From bb77cd9855adff18de60a74d8a45dce964407099 Mon Sep 17 00:00:00 2001 From: CSH <40987381+csatsurnh@users.noreply.github.com> Date: Mon, 6 Mar 2023 14:49:37 +0800 Subject: [PATCH 01/32] [Doc] Add zh_cn add_transforms doc (#2673) as title --- docs/zh_cn/advanced_guides/add_transforms.md | 52 +++++++++++++++++++- 1 file changed, 50 insertions(+), 2 deletions(-) diff --git a/docs/zh_cn/advanced_guides/add_transforms.md b/docs/zh_cn/advanced_guides/add_transforms.md index 58a2485e04..d7206680d3 100644 --- a/docs/zh_cn/advanced_guides/add_transforms.md +++ b/docs/zh_cn/advanced_guides/add_transforms.md @@ -1,3 +1,51 @@ -# 新增数据增强(待更新) +# 新增数据增强 -中文版文档支持中,请先阅读[英文版本](../../en/advanced_guides/add_transform.md) +## 自定义数据增强 + +自定义数据增强必须继承 `BaseTransform` 并实现 `transform` 函数。这里我们使用一个简单的翻转变换作为示例: + +```python +import random +import mmcv +from mmcv.transforms import BaseTransform, TRANSFORMS + +@TRANSFORMS.register_module() +class MyFlip(BaseTransform): + def __init__(self, direction: str): + super().__init__() + self.direction = direction + + def transform(self, results: dict) -> dict: + img = results['img'] + results['img'] = mmcv.imflip(img, direction=self.direction) + return results +``` + +此外,新的类需要被导入。 + +```python +from .my_pipeline import MyFlip +``` + +这样,我们就可以实例化一个 `MyFlip` 对象并使用它来处理数据字典。 + +```python +import numpy as np + +transform = MyFlip(direction='horizontal') +data_dict = {'img': np.random.rand(224, 224, 3)} +data_dict = transform(data_dict) +processed_img = data_dict['img'] +``` + +或者,我们可以在配置文件中的数据流程中使用 `MyFlip` 变换。 + +```python +pipeline = [ + ... + dict(type='MyFlip', direction='horizontal'), + ... +] +``` + +需要注意,如果要在配置文件中使用 `MyFlip`,必须确保在运行时导入了包含 `MyFlip` 的文件。 From e541d1acd48cac67d9a71a1bcadba7cce3bb9c4e Mon Sep 17 00:00:00 2001 From: CSH <40987381+csatsurnh@users.noreply.github.com> Date: Mon, 6 Mar 2023 18:03:12 +0800 Subject: [PATCH 02/32] [Doc] Add zh_cn add_models doc & fix link (#2702) as title --- docs/en/advanced_guides/add_models.md | 2 +- docs/zh_cn/advanced_guides/add_models.md | 261 ++++++++++++++++++++++- 2 files changed, 260 insertions(+), 3 deletions(-) diff --git a/docs/en/advanced_guides/add_models.md b/docs/en/advanced_guides/add_models.md index 1f1969db39..e470e48ef2 100644 --- a/docs/en/advanced_guides/add_models.md +++ b/docs/en/advanced_guides/add_models.md @@ -202,7 +202,7 @@ In MMSegmentation 1.x versions, we use [SegDataPreProcessor](https://github.com/ ## Develop new segmentors -The segmentor is an algorithmic architecture in which users can customize their algorithms by adding customized components and defining the logic of algorithm execution. Please refer to [the model document](https://github.com/open-mmlab/mmsegmentation/blob/1.x/docs/en/advanced_guides/models.md) for more details. +The segmentor is an algorithmic architecture in which users can customize their algorithms by adding customized components and defining the logic of algorithm execution. Please refer to [the model document](./models.md) for more details. Since the [BaseSegmentor](https://github.com/open-mmlab/mmsegmentation/blob/1.x/mmseg/models/segmentors/base.py#L15) in MMSegmentation unifies three modes for a forward process, to develop a new segmentor, users need to overwrite `loss`, `predict` and `_forward` methods corresponding to the `loss`, `predict` and `tensor` modes. diff --git a/docs/zh_cn/advanced_guides/add_models.md b/docs/zh_cn/advanced_guides/add_models.md index 3f86a0c7c6..2f0a5af0d1 100644 --- a/docs/zh_cn/advanced_guides/add_models.md +++ b/docs/zh_cn/advanced_guides/add_models.md @@ -1,3 +1,260 @@ -# 新增模块(待更新) +# 新增模块 -中文版文档支持中,请先阅读[英文版本](../../en/advanced_guides/add_models.md) +## 开发新组件 + +我们可以自定义 [模型文档](./models.md) 中介绍的所有组件,例如**主干网络(backbone)**、**头(head)**、**损失函数(loss function)**和**数据预处理器(data preprocessor)**。 + +### 添加新的主干网络(backbone) + +在这里,我们以 MobileNet 为例展示如何开发新的主干网络。 + +1. 创建一个新文件 `mmseg/models/backbones/mobilenet.py`。 + + ```python + import torch.nn as nn + + from mmseg.registry import MODELS + + + @MODELS.register_module() + class MobileNet(nn.Module): + + def __init__(self, arg1, arg2): + pass + + def forward(self, x): # should return a tuple + pass + + def init_weights(self, pretrained=None): + pass + ``` + +2. 在 `mmseg/models/backbones/__init__.py` 中引入模块。 + + ```python + from .mobilenet import MobileNet + ``` + +3. 在配置文件中使用它。 + + ```python + model = dict( + ... + backbone=dict( + type='MobileNet', + arg1=xxx, + arg2=xxx), + ... + ``` + +### 添加新的头(head) + +在 MMSegmentation 中,我们提供 [BaseDecodeHead](https://github.com/open-mmlab/mmsegmentation/blob/1.x/mmseg/models/decode_heads/decode_head.py#L17) 用于开发所有分割头。 +所有新实现的解码头都应该从中派生出来。 +接下来我们以 [PSPNet](https://arxiv.org/abs/1612.01105) 为例说明如何开发新的头。 + +首先,在 `mmseg/models/decode_heads/psp_head.py` 中添加一个新的解码头。 +PSPNet 实现了用于分割解码的解码头。 +为了实现解码头,在新模块中我们需要执行以下三个函数。 + +```python +from mmseg.registry import MODELS + +@MODELS.register_module() +class PSPHead(BaseDecodeHead): + + def __init__(self, pool_scales=(1, 2, 3, 6), **kwargs): + super(PSPHead, self).__init__(**kwargs) + + def init_weights(self): + pass + + def forward(self, inputs): + pass +``` + +接下来,用户需要在 `mmseg/models/decode_heads/__init__.py` 中添加模块,这样相应的注册器就可以找到并加载它们。 + +PSPNet 的配置文件如下 + +```python +norm_cfg = dict(type='SyncBN', requires_grad=True) +model = dict( + type='EncoderDecoder', + pretrained='pretrain_model/resnet50_v1c_trick-2cccc1ad.pth', + backbone=dict( + type='ResNetV1c', + depth=50, + num_stages=4, + out_indices=(0, 1, 2, 3), + dilations=(1, 1, 2, 4), + strides=(1, 2, 1, 1), + norm_cfg=norm_cfg, + norm_eval=False, + style='pytorch', + contract_dilation=True), + decode_head=dict( + type='PSPHead', + in_channels=2048, + in_index=3, + channels=512, + pool_scales=(1, 2, 3, 6), + dropout_ratio=0.1, + num_classes=19, + norm_cfg=norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0))) + +``` + +### 添加新的损失函数(loss) + +假设您想为分割解码添加一个叫做 `MyLoss` 的新的损失函数。 +要添加新的损失函数,用户需要在 `mmseg/models/loss/my_loss.py` 中实现它。 +修饰器 `weighted_loss` 可以对损失的每个元素进行加权。 + +```python +import torch +import torch.nn as nn + +from mmseg.registry import MODELS +from .utils import weighted_loss + +@weighted_loss +def my_loss(pred, target): + assert pred.size() == target.size() and target.numel() > 0 + loss = torch.abs(pred - target) + return loss + +@MODELS.register_module() +class MyLoss(nn.Module): + + def __init__(self, reduction='mean', loss_weight=1.0): + super(MyLoss, self).__init__() + self.reduction = reduction + self.loss_weight = loss_weight + + def forward(self, + pred, + target, + weight=None, + avg_factor=None, + reduction_override=None): + assert reduction_override in (None, 'none', 'mean', 'sum') + reduction = ( + reduction_override if reduction_override else self.reduction) + loss = self.loss_weight * my_loss( + pred, target, weight, reduction=reduction, avg_factor=avg_factor) + return loss +``` + +然后,用户需要将其添加到 `mmseg/models/loss/__init__.py` 中。 + +```python +from .my_loss import MyLoss, my_loss + +``` + +要使用它,请修改 `loss_xx` 字段。 +然后需要修改头中的 `loss_decode` 字段。 +`loss_weight` 可用于平衡多重损失。 + +```python +loss_decode=dict(type='MyLoss', loss_weight=1.0)) +``` + +### 添加新的数据预处理器(data preprocessor) + +在 MMSegmentation 1.x 版本中,我们使用 [SegDataPreProcessor](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/models/data_preprocessor.py#L13) 将数据复制到目标设备,并将数据预处理为默认的模型输入格式。这里我们将展示如何开发一个新的数据预处理器。 + +1. 创建一个新文件 `mmseg/models/my_datapreprocessor.py`。 + + ```python + from mmengine.model import BaseDataPreprocessor + + from mmseg.registry import MODELS + + @MODELS.register_module() + class MyDataPreProcessor(BaseDataPreprocessor): + def __init__(self, **kwargs): + super().__init__(**kwargs) + + def forward(self, data: dict, training: bool=False) -> Dict[str, Any]: + # TODO Define the logic for data pre-processing in the forward method + pass + ``` + +2. 在 `mmseg/models/__init__.py` 中导入数据预处理器 + + ```python + from .my_datapreprocessor import MyDataPreProcessor + ``` + +3. 在配置文件中使用它。 + + ```python + model = dict( + data_preprocessor=dict(type='MyDataPreProcessor) + ... + ) + ``` + +## 开发新的分割器(segmentor) + +分割器是一种户可以通过添加自定义组件和定义算法执行逻辑来自定义其算法的算法架构。请参考[模型文档](./models.md)了解更多详情。 + +由于 MMSegmentation 中的 [BaseSegmenter](https://github.com/open-mmlab/mmsegmentation/blob/1.x/mmseg/models/segmentors/base.py#L15) 统一了前向过程的三种模式,为了开发新的分割器,用户需要重写与 `loss`、`predict` 和 `tensor` 相对应的 `loss`、`predict` 和 `_forward` 方法。 + +这里我们将展示如何开发一个新的分割器。 + +1. 创建一个新文件 `mmseg/models/segmentors/my_segmentor.py`。 + + ```python + from typing import Dict, Optional, Union + + import torch + + from mmseg.registry import MODELS + from mmseg.models import BaseSegmentor + + @MODELS.register_module() + class MySegmentor(BaseSegmentor): + def __init__(self, **kwargs): + super().__init__(**kwargs) + # TODO users should build components of the network here + + def loss(self, inputs: Tensor, data_samples: SampleList) -> dict: + """Calculate losses from a batch of inputs and data samples.""" + pass + + def predict(self, inputs: Tensor, data_samples: OptSampleList=None) -> SampleList: + """Predict results from a batch of inputs and data samples with post- + processing.""" + pass + + def _forward(self, + inputs: Tensor, + data_samples: OptSampleList = None) -> Tuple[List[Tensor]]: + """Network forward process. + + Usually includes backbone, neck and head forward without any post- + processing. + """ + pass + ``` + +2. 在 `mmseg/models/segmentors/__init__.py` 中导入分割器。 + + ```python + from .my_segmentor import MySegmentor + ``` + +3. 在配置文件中使用它。 + + ```python + model = dict( + type='MySegmentor' + ... + ) + ``` From 6c3599bd9dd7106de7b9167e5e5113e72e9ea435 Mon Sep 17 00:00:00 2001 From: CSH <40987381+csatsurnh@users.noreply.github.com> Date: Tue, 7 Mar 2023 11:47:10 +0800 Subject: [PATCH 03/32] [Doc] Add zh_cn models doc and fix en doc typo (#2703) as title --------- Co-authored-by: Miao Zheng <76149310+MeowZheng@users.noreply.github.com> --- docs/en/advanced_guides/models.md | 10 +- docs/zh_cn/advanced_guides/models.md | 176 ++++++++++++++++++++++++++- 2 files changed, 179 insertions(+), 7 deletions(-) diff --git a/docs/en/advanced_guides/models.md b/docs/en/advanced_guides/models.md index 8202e95b7c..84e6cb6a9e 100644 --- a/docs/en/advanced_guides/models.md +++ b/docs/en/advanced_guides/models.md @@ -1,7 +1,5 @@ # Models -# Models - We usually define a neural network in a deep learning task as a model, and this model is the core of an algorithm. [MMEngine](https://github.com/open-mmlab/mmengine) abstracts a unified model [BaseModel](https://github.com/open-mmlab/mmengine/blob/main/mmengine/model/base_model/base_model.py#L16) to standardize the interfaces for training, testing and other processes. All models implemented by MMSegmentation inherit from `BaseModel`, and in MMSegmentation we implemented forward and added some functions for the semantic segmentation algorithm. ## Common components @@ -22,9 +20,9 @@ In MMSegmentation, we abstract the network architecture as a **Segmentor**, it i **Neck** is the part that connects the backbone and heads. It performs some refinements or reconfigurations on the raw feature maps produced by the backbone. An example is **Feature Pyramid Network (FPN)**. -### Decode Head +### Decode head -**Decode Head** is the part that transforms the feature maps into a segmentation mask, such as **PSPNet**. +**Decode head** is the part that transforms the feature maps into a segmentation mask, such as **PSPNet**. ### Auxiliary head @@ -110,7 +108,7 @@ Parameters: - data (dict or tuple or list) - Data sampled from the dataset. In MMSegmentation, the data dict contains `inputs` and `data_samples` two fields. - optim_wrapper (OptimWrapper) - OptimWrapper instance used to update model parameters. -**Note:** [OptimWrapper](https://github.com/open-mmlab/mmengine/blob/main/mmengine/optim/optimizer/optimizer_wrapper.py#L17) provides a common interface for updating parameters, please refer to optimizer wrapper [documentation](https://mmengine.readthedocs.io/zh_CN/latest/tutorials/optim_wrapper.html) in [MMEngine](https://github.com/open-mmlab/mmengine) for more information. +**Note:** [OptimWrapper](https://github.com/open-mmlab/mmengine/blob/main/mmengine/optim/optimizer/optimizer_wrapper.py#L17) provides a common interface for updating parameters, please refer to optimizer wrapper [documentation](https://mmengine.readthedocs.io/en/latest/tutorials/optim_wrapper.html) in [MMEngine](https://github.com/open-mmlab/mmengine) for more information. Returns: @@ -157,7 +155,7 @@ The parameters of the `SegDataPreProcessor` constructor: - pad_val (float, optional) - Padding value. Default: 0. - seg_pad_val (float, optional) - Padding value of segmentation map. Default: 255. - bgr_to_rgb (bool) - whether to convert image from BGR to RGB. Defaults to False. -- rgb_to_bgr (bool) - whether to convert image from RGB to RGB. Defaults to False. +- rgb_to_bgr (bool) - whether to convert image from RGB to BGR. Defaults to False. - batch_augments (list\[dict\], optional) - Batch-level augmentations. Default to None. The data will be processed as follows: diff --git a/docs/zh_cn/advanced_guides/models.md b/docs/zh_cn/advanced_guides/models.md index 62dbea38c4..408a57863c 100644 --- a/docs/zh_cn/advanced_guides/models.md +++ b/docs/zh_cn/advanced_guides/models.md @@ -1,3 +1,177 @@ # 模型 -中文版文档支持中,请先阅读[英文版本](../../en/advanced_guides/models.md) +我们通常将深度学习任务中的神经网络定义为模型,这个模型即是算法的核心。[MMEngine](https://github.com/open-mmlab/mmengine) 抽象出了一个统一模型 [BaseModel](https://github.com/open-mmlab/mmengine/blob/main/mmengine/model/base_model/base_model.py#L16) 以标准化训练、测试和其他过程。MMSegmentation 实现的所有模型都继承自 `BaseModel`,并且在 MMSegmention 中,我们实现了前向传播并为语义分割算法添加了一些功能。 + +## 常用组件 + +### 分割器(Segmentor) + +在 MMSegmentation 中,我们将网络架构抽象为**分割器**,它是一个包含网络所有组件的模型。我们已经实现了**编码器解码器(EncoderDecoder)**和**级联编码器解码器(CascadeEncoderDecoder)**,它们通常由**数据预处理器**、**骨干网络**、**解码头**和**辅助头**组成。 + +### 数据预处理器(Data preprocessor) + +**数据预处理器**是将数据复制到目标设备并将数据预处理为模型输入格式的部分。 + +### 主干网络(Backbone) + +**主干网络**是将图像转换为特征图的部分,例如没有最后全连接层的 **ResNet-50**。 + +### 颈部(Neck) + +**颈部**是连接主干网络和头的部分。它对主干网络生成的原始特征图进行一些改进或重新配置。例如 **Feature Pyramid Network(FPN)**。 + +### 解码头(Decode head) + +**解码头**是将特征图转换为分割掩膜的部分,例如 **PSPNet**。 + +### 辅助头(Auxiliary head) + +**辅助头**是一个可选组件,它将特征图转换为仅用于计算辅助损失的分割掩膜。 + +## 基本接口 + +MMSegmentation 封装 `BaseModel` 并实现了 [BaseSegmenter](https://github.com/open-mmlab/mmsegmentation/blob/1.x/mmseg/models/segmentors/base.py#L15) 类,主要提供 `forward`、`train_step`、`val_step` 和 `test_step` 接口。接下来将详细介绍这些接口。 + +### forward + +
+ +
编码器解码器数据流
+
+ +
+
+
级联编码器解码器数据流
+
+ +`forward` 方法返回训练、验证、测试和简单推理过程的损失或预测。 + +该方法应接受三种模式:“tensor”、“predict” 和 “loss”: + +- “tensor”:前向推理整个网络并返回张量或张量数组,无需任何后处理,与常见的 `nn.Module` 相同。 +- “predict”:前向推理并返回预测值,这些预测值将被完全处理到 `SegDataSample` 列表中。 +- “loss”:前向推理并根据给定的输入和数据样本返回损失的`字典`。 + +**注:**[SegDataSample](https://github.com/open-mmlab/mmsegmentation/blob/1.x/mmseg/structures/seg_data_sample.py) 是 MMSegmentation 的数据结构接口,用作不同组件之间的接口。`SegDataSample` 实现了抽象数据元素 `mmengine.structures.BaseDataElement`,请参阅 [MMMEngine](https://github.com/open-mmlab/mmengine) 中的 [SegDataSample 文档](https://mmsegmentation.readthedocs.io/zh_CN/1.x/advanced_guides/structures.html)和[数据元素文档](https://mmengine.readthedocs.io/zh_CN/latest/advanced_tutorials/data_element.html)了解更多信息。 + +注意,此方法不处理在 `train_step` 方法中完成的反向传播或优化器更新。 + +参数: + +- inputs(torch.Tensor)- 通常为形状是(N, C, ...) 的输入张量。 +- data_sample(list\[[SegDataSample](https://github.com/open-mmlab/mmsegmentation/blob/1.x/mmseg/structures/seg_data_sample.py)\]) - 分割数据样本。它通常包括 `metainfo` 和 `gt_sem_seg` 等信息。默认值为 None。 +- mode (str) - 返回什么类型的值。默认为 'tensor'。 + +返回值: + +- `dict` 或 `list`: + - 如果 `mode == "loss"`,则返回用于反向过程和日志记录的损失张量`字典`。 + - 如果 `mode == "predict"`,则返回 `SegDataSample` 的`列表`,推理结果将被递增地添加到传递给 forward 方法的 `data_sample` 参数中,每个 `SegDataSeample` 包含以下关键词: + - pred_sm_seg (`PixelData`):语义分割的预测。 + - seg_logits (`PixelData`):标准化前语义分割的预测指标。 + - 如果 `mode == "tensor"`,则返回`张量`或`张量数组`的`字典`以供自定义使用。 + +### 预测模式 + +我们在[配置文档](../user_guides/1_config.md)中简要描述了模型配置的字段,这里我们详细介绍 `model.test_cfg` 字段。`model.test_cfg` 用于控制前向行为,`"predict"` 模式下的 `forward` 方法可以在两种模式下运行: + +- `whole_inference`:如果 `cfg.model.test_cfg.mode == 'whole'`,则模型将使用完整图像进行推理。 + + `whole_inference` 模式的一个示例配置: + + ```python + model = dict( + type='EncoderDecoder' + ... + test_cfg=dict(mode='whole') + ) + ``` + +- `slide_inference`:如果 `cfg.model.test_cfg.mode == ‘slide’`,则模型将通过滑动窗口进行推理。**注意:** 如果选择 `slide` 模式,还应指定 `cfg.model.test_cfg.stride` 和 `cfg.model.test_cfg.crop_size`。 + + `slide_inference` 模式的一个示例配置: + + ```python + model = dict( + type='EncoderDecoder' + ... + test_cfg=dict(mode='slide', crop_size=256, stride=170) + ) + ``` + +### train_step + +`train_step` 方法调用 `loss` 模式的前向接口以获得损失`字典`。`BaseModel` 类实现默认的模型训练过程,包括预处理、模型前向传播、损失计算、优化和反向传播。 + +参数: + +- data (dict or tuple or list) - 从数据集采样的数据。在 MMSegmentation 中,数据字典包含 `inputs` 和 `data_samples` 两个字段。 +- optim_wrapper (OptimWrapper) - 用于更新模型参数的 OptimWrapper 实例。 + +**注:**[OptimWrapper](https://github.com/open-mmlab/mmengine/blob/main/mmengine/optim/optimizer/optimizer_wrapper.py#L17) 提供了一个用于更新参数的通用接口,请参阅 [MMMEngine](https://github.com/open-mmlab/mmengine) 中的优化器封装[文档](https://mmengine.readthedocs.io/zh_CN/latest/tutorials/optim_wrapper.html)了解更多信息。 + +返回值: + +-Dict\[str, `torch.Tensor`\]:用于记录日志的张量的`字典`。 + +
+ +
train_step 数据流
+
+ +### val_step + +`val_step` 方法调用 `predict` 模式的前向接口并返回预测结果,预测结果将进一步被传递给评测器的进程接口和钩子的 `after_val_inter` 接口。 + +参数: + +- data (`dict` or `tuple` or `list`) - 从数据集中采样的数据。在 MMSegmentation 中,数据字典包含 `inputs` 和 `data_samples` 两个字段。 + +返回值: + +- `list` - 给定数据的预测结果。 + +
+ +
test_step/val_step 数据流
+
+ +### test_step + +`BaseModel` 中 `test_step` 与 `val_step` 的实现相同。 + +## 数据预处理器(Data Preprocessor) + +MMSegmentation 实现的 [SegDataPreProcessor](https://github.com/open-mmlab/mmsegmentation/blob/1.x/mmseg/models/data_preprocessor.py#L13) 继承自由 [MMEngine](https://github.com/open-mmlab/mmengine) 实现的 [BaseDataPreprocessor](https://github.com/open-mmlab/mmengine/blob/main/mmengine/model/base_model/data_preprocessor.py#L18),提供数据预处理和将数据复制到目标设备的功能。 + +Runner 在构建阶段将模型传送到指定的设备,而 [SegDataPreProcessor](https://github.com/open-mmlab/mmsegmentation/blob/1.x/mmseg/models/data_preprocessor.py#L13) 在 `train_step`、`val_step` 和 `test_step` 中将数据传送到指定设备,之后处理后的数据将被进一步传递给模型。 + +`SegDataPreProcessor` 构造函数的参数: + +- mean (Sequence\[Number\], 可选) - R、G、B 通道的像素平均值。默认为 None。 +- std (Sequence\[Number\], 可选) - R、G、B 通道的像素标准差。默认为 None。 +- size (tuple, 可选) - 固定的填充大小。 +- size_divisor (int, 可选) - 填充大小的除法因子。 +- pad_val (float, 可选) - 填充值。默认值:0。 +- seg_pad_val (float, 可选) - 分割图的填充值。默认值:255。 +- bgr_to_rgb (bool) - 是否将图像从 BGR 转换为 RGB。默认为 False。 +- rgb_to_bgr (bool) - 是否将图像从 RGB 转换为 BGR。默认为 False。 +- batch_augments (list\[dict\], 可选) - 批量化的数据增强。默认值为 None。 + +数据将按如下方式处理: + +- 收集数据并将其移动到目标设备。 +- 用定义的 `pad_val` 将输入填充到输入大小,并用定义的 `seg_Pad_val` 填充分割图。 +- 将输入堆栈到 batch_input。 +- 如果输入的形状为 (3, H, W),则将输入从 BGR 转换为 RGB。 +- 使用定义的标准差和平均值标准化图像。 +- 在训练期间进行如 Mixup 和 Cutmix 的批量化数据增强。 + +`forward` 方法的参数: + +- data (dict) - 从数据加载器采样的数据。 +- training (bool) - 是否启用训练时数据增强。 + +`forward` 方法的返回值: + +- Dict:与模型输入格式相同的数据。 From a8aafdd902b9fe73596fb4b8c03ec693416acf42 Mon Sep 17 00:00:00 2001 From: Miao Zheng <76149310+MeowZheng@users.noreply.github.com> Date: Tue, 7 Mar 2023 17:57:37 +0800 Subject: [PATCH 04/32] [Fix] Support format_result and fix prefix param in cityscape metric, and rename CitysMetric to CityscapesMetric (#2660) as title --- mmseg/evaluation/__init__.py | 4 +- mmseg/evaluation/metrics/__init__.py | 4 +- mmseg/evaluation/metrics/citys_metric.py | 116 ++++++++++-------- .../test_metrics/test_citys_metric.py | 44 ++++--- 4 files changed, 94 insertions(+), 74 deletions(-) diff --git a/mmseg/evaluation/__init__.py b/mmseg/evaluation/__init__.py index c28bb75cb4..a82008f3ad 100644 --- a/mmseg/evaluation/__init__.py +++ b/mmseg/evaluation/__init__.py @@ -1,4 +1,4 @@ # Copyright (c) OpenMMLab. All rights reserved. -from .metrics import CitysMetric, IoUMetric +from .metrics import CityscapesMetric, IoUMetric -__all__ = ['IoUMetric', 'CitysMetric'] +__all__ = ['IoUMetric', 'CityscapesMetric'] diff --git a/mmseg/evaluation/metrics/__init__.py b/mmseg/evaluation/metrics/__init__.py index aec08bb071..0aa39e480c 100644 --- a/mmseg/evaluation/metrics/__init__.py +++ b/mmseg/evaluation/metrics/__init__.py @@ -1,5 +1,5 @@ # Copyright (c) OpenMMLab. All rights reserved. -from .citys_metric import CitysMetric +from .citys_metric import CityscapesMetric from .iou_metric import IoUMetric -__all__ = ['IoUMetric', 'CitysMetric'] +__all__ = ['IoUMetric', 'CityscapesMetric'] diff --git a/mmseg/evaluation/metrics/citys_metric.py b/mmseg/evaluation/metrics/citys_metric.py index 50e9ea68a0..a2c008b99d 100644 --- a/mmseg/evaluation/metrics/citys_metric.py +++ b/mmseg/evaluation/metrics/citys_metric.py @@ -1,30 +1,41 @@ # Copyright (c) OpenMMLab. All rights reserved. import os.path as osp -from typing import Dict, List, Optional, Sequence +import shutil +from collections import OrderedDict +from typing import Dict, Optional, Sequence + +try: + + import cityscapesscripts.evaluation.evalPixelLevelSemanticLabeling as CSEval # noqa + import cityscapesscripts.helpers.labels as CSLabels +except ImportError: + CSLabels = None + CSEval = None import numpy as np +from mmengine.dist import is_main_process, master_only from mmengine.evaluator import BaseMetric from mmengine.logging import MMLogger, print_log -from mmengine.utils import mkdir_or_exist, scandir +from mmengine.utils import mkdir_or_exist from PIL import Image from mmseg.registry import METRICS @METRICS.register_module() -class CitysMetric(BaseMetric): +class CityscapesMetric(BaseMetric): """Cityscapes evaluation metric. Args: + output_dir (str): The directory for output prediction ignore_index (int): Index that will be ignored in evaluation. Default: 255. - citys_metrics (list[str] | str): Metrics to be evaluated, - Default: ['cityscapes']. - to_label_id (bool): whether convert output to label_id for - submission. Default: True. - suffix (str): The filename prefix of the png files. - If the prefix is "somepath/xxx", the png files will be - named "somepath/xxx.png". Default: '.format_cityscapes'. + format_only (bool): Only format result for results commit without + perform evaluation. It is useful when you want to format the result + to a specific format and submit it to the test server. + Defaults to False. + keep_results (bool): Whether to keep the results. When ``format_only`` + is True, ``keep_results`` must be True. Defaults to False. collect_device (str): Device name used for collecting results from different ranks during distributed training. Must be 'cpu' or 'gpu'. Defaults to 'cpu'. @@ -35,19 +46,34 @@ class CitysMetric(BaseMetric): """ def __init__(self, + output_dir: str, ignore_index: int = 255, - citys_metrics: List[str] = ['cityscapes'], - to_label_id: bool = True, - suffix: str = '.format_cityscapes', + format_only: bool = False, + keep_results: bool = False, collect_device: str = 'cpu', prefix: Optional[str] = None) -> None: super().__init__(collect_device=collect_device, prefix=prefix) - + if CSEval is None: + raise ImportError('Please run "pip install cityscapesscripts" to ' + 'install cityscapesscripts first.') + self.output_dir = output_dir self.ignore_index = ignore_index - self.metrics = citys_metrics - assert self.metrics[0] == 'cityscapes' - self.to_label_id = to_label_id - self.suffix = suffix + + self.format_only = format_only + if format_only: + assert keep_results, ( + 'When format_only is True, the results must be keep, please ' + f'set keep_results as True, but got {keep_results}') + self.keep_results = keep_results + self.prefix = prefix + if is_main_process(): + mkdir_or_exist(self.output_dir) + + @master_only + def __del__(self) -> None: + """Clean up.""" + if not self.keep_results: + shutil.rmtree(self.output_dir) def process(self, data_batch: dict, data_samples: Sequence[dict]) -> None: """Process one batch of data and data_samples. @@ -59,26 +85,23 @@ def process(self, data_batch: dict, data_samples: Sequence[dict]) -> None: data_batch (dict): A batch of data from the dataloader. data_samples (Sequence[dict]): A batch of outputs from the model. """ - mkdir_or_exist(self.suffix) + mkdir_or_exist(self.output_dir) for data_sample in data_samples: pred_label = data_sample['pred_sem_seg']['data'][0].cpu().numpy() - # results2img - if self.to_label_id: - pred_label = self._convert_to_label_id(pred_label) + # when evaluating with official cityscapesscripts, + # labelIds should be used + pred_label = self._convert_to_label_id(pred_label) basename = osp.splitext(osp.basename(data_sample['img_path']))[0] - png_filename = osp.join(self.suffix, f'{basename}.png') + png_filename = osp.abspath( + osp.join(self.output_dir, f'{basename}.png')) output = Image.fromarray(pred_label.astype(np.uint8)).convert('P') - import cityscapesscripts.helpers.labels as CSLabels - palette = np.zeros((len(CSLabels.id2label), 3), dtype=np.uint8) - for label_id, label in CSLabels.id2label.items(): - palette[label_id] = label.color - output.putpalette(palette) output.save(png_filename) - - ann_dir = osp.join(data_samples[0]['seg_map_path'].split('val')[0], - 'val') - self.results.append(ann_dir) + # when evaluating with official cityscapesscripts, + # **_gtFine_labelIds.png is used + gt_filename = data_sample['seg_map_path'].replace( + 'labelTrainIds.png', 'labelIds.png') + self.results.append((png_filename, gt_filename)) def compute_metrics(self, results: list) -> Dict[str, float]: """Compute the metrics from processed results. @@ -90,38 +113,28 @@ def compute_metrics(self, results: list) -> Dict[str, float]: dict[str: float]: Cityscapes evaluation results. """ logger: MMLogger = MMLogger.get_current_instance() - try: - import cityscapesscripts.evaluation.evalPixelLevelSemanticLabeling as CSEval # noqa - except ImportError: - raise ImportError('Please run "pip install cityscapesscripts" to ' - 'install cityscapesscripts first.') - msg = 'Evaluating in Cityscapes style' + if self.format_only: + logger.info(f'results are saved to {osp.dirname(self.output_dir)}') + return OrderedDict() + msg = 'Evaluating in Cityscapes style' if logger is None: msg = '\n' + msg print_log(msg, logger=logger) - result_dir = self.suffix - eval_results = dict() - print_log(f'Evaluating results under {result_dir} ...', logger=logger) + print_log( + f'Evaluating results under {self.output_dir} ...', logger=logger) CSEval.args.evalInstLevelScore = True - CSEval.args.predictionPath = osp.abspath(result_dir) + CSEval.args.predictionPath = osp.abspath(self.output_dir) CSEval.args.evalPixelAccuracy = True CSEval.args.JSONOutput = False - seg_map_list = [] - pred_list = [] - ann_dir = results[0] - # when evaluating with official cityscapesscripts, - # **_gtFine_labelIds.png is used - for seg_map in scandir(ann_dir, 'gtFine_labelIds.png', recursive=True): - seg_map_list.append(osp.join(ann_dir, seg_map)) - pred_list.append(CSEval.getPrediction(CSEval.args, seg_map)) + pred_list, gt_list = zip(*results) metric = dict() eval_results.update( - CSEval.evaluateImgLists(pred_list, seg_map_list, CSEval.args)) + CSEval.evaluateImgLists(pred_list, gt_list, CSEval.args)) metric['averageScoreCategories'] = eval_results[ 'averageScoreCategories'] metric['averageScoreInstCategories'] = eval_results[ @@ -133,7 +146,6 @@ def _convert_to_label_id(result): """Convert trainId to id for cityscapes.""" if isinstance(result, str): result = np.load(result) - import cityscapesscripts.helpers.labels as CSLabels result_copy = result.copy() for trainId, label in CSLabels.trainId2label.items(): result_copy[result == trainId] = label.id diff --git a/tests/test_evaluation/test_metrics/test_citys_metric.py b/tests/test_evaluation/test_metrics/test_citys_metric.py index a6d6db5caa..0a20b41aee 100644 --- a/tests/test_evaluation/test_metrics/test_citys_metric.py +++ b/tests/test_evaluation/test_metrics/test_citys_metric.py @@ -1,15 +1,17 @@ # Copyright (c) OpenMMLab. All rights reserved. +import os.path as osp from unittest import TestCase import numpy as np +import pytest import torch from mmengine.structures import BaseDataElement, PixelData -from mmseg.evaluation import CitysMetric +from mmseg.evaluation import CityscapesMetric from mmseg.structures import SegDataSample -class TestCitysMetric(TestCase): +class TestCityscapesMetric(TestCase): def _demo_mm_inputs(self, batch_size=1, @@ -42,9 +44,8 @@ def _demo_mm_inputs(self, gt_sem_seg_data = dict(data=gt_semantic_seg) data_sample.gt_sem_seg = PixelData(**gt_sem_seg_data) mm_inputs['data_sample'] = data_sample.to_dict() - mm_inputs['data_sample']['seg_map_path'] = \ - 'tests/data/pseudo_cityscapes_dataset/gtFine/val/\ - frankfurt/frankfurt_000000_000294_gtFine_labelTrainIds.png' + mm_inputs['data_sample'][ + 'seg_map_path'] = 'tests/data/pseudo_cityscapes_dataset/gtFine/val/frankfurt/frankfurt_000000_000294_gtFine_labelTrainIds.png' # noqa mm_inputs['seg_map_path'] = mm_inputs['data_sample'][ 'seg_map_path'] @@ -86,9 +87,8 @@ def _demo_mm_model_output(self, for pred in batch_datasampes: if isinstance(pred, BaseDataElement): test_data = pred.to_dict() - test_data['img_path'] = \ - 'tests/data/pseudo_cityscapes_dataset/leftImg8bit/val/\ - frankfurt/frankfurt_000000_000294_leftImg8bit.png' + test_data[ + 'img_path'] = 'tests/data/pseudo_cityscapes_dataset/leftImg8bit/val/frankfurt/frankfurt_000000_000294_leftImg8bit.png' # noqa _predictions.append(test_data) else: @@ -104,15 +104,23 @@ def test_evaluate(self): dict(**data, **result) for data, result in zip(data_batch, predictions) ] - iou_metric = CitysMetric(citys_metrics=['cityscapes']) - iou_metric.process(data_batch, data_samples) - res = iou_metric.evaluate(6) - self.assertIsInstance(res, dict) - # test to_label_id = True - iou_metric = CitysMetric( - citys_metrics=['cityscapes'], to_label_id=True) - iou_metric.process(data_batch, data_samples) - res = iou_metric.evaluate(6) + # test keep_results should be True when format_only is True + with pytest.raises(AssertionError): + CityscapesMetric( + output_dir='tmp', format_only=True, keep_results=False) + + # test evaluate with cityscape metric + metric = CityscapesMetric(output_dir='tmp') + metric.process(data_batch, data_samples) + res = metric.evaluate(2) self.assertIsInstance(res, dict) + + # test format_only + metric = CityscapesMetric( + output_dir='tmp', format_only=True, keep_results=True) + metric.process(data_batch, data_samples) + metric.evaluate(2) + assert osp.exists('tmp') + assert osp.isfile('tmp/frankfurt_000000_000294_leftImg8bit.png') import shutil - shutil.rmtree('.format_cityscapes') + shutil.rmtree('tmp') From 91c62abcf44528f007ffa220af8873499790337d Mon Sep 17 00:00:00 2001 From: MengzhangLI Date: Tue, 7 Mar 2023 21:21:01 +0800 Subject: [PATCH 05/32] [Fix] Fix the correct location of FAQ in dev-1.x (#2717) --- docs/en/get_started.md | 2 +- docs/zh_cn/get_started.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/get_started.md b/docs/en/get_started.md index cf861b1fe8..b082508693 100644 --- a/docs/en/get_started.md +++ b/docs/en/get_started.md @@ -197,5 +197,5 @@ docker run --gpus all --shm-size=8g -it -v {DATA_DIR}:/mmsegmentation/data mmseg ## Trouble shooting -If you have some issues during the installation, please first view the [FAQ](faq.md) page. +If you have some issues during the installation, please first view the [FAQ](notes/faq.md) page. You may [open an issue](https://github.com/open-mmlab/mmsegmentation/issues/new/choose) on GitHub if no solution is found. diff --git a/docs/zh_cn/get_started.md b/docs/zh_cn/get_started.md index da6d728a15..38e93e9cb4 100644 --- a/docs/zh_cn/get_started.md +++ b/docs/zh_cn/get_started.md @@ -197,4 +197,4 @@ docker run --gpus all --shm-size=8g -it -v {DATA_DIR}:/mmsegmentation/data mmseg ## 问题解答 -如果您在安装过程中遇到了其他问题,请第一时间查阅 [FAQ](faq.md) 文件。如果没有找到答案,您也可以在 GitHub 上提出 [issue](https://github.com/open-mmlab/mmsegmentation/issues/new/choose) +如果您在安装过程中遇到了其他问题,请第一时间查阅 [FAQ](notes/faq.md) 文件。如果没有找到答案,您也可以在 GitHub 上提出 [issue](https://github.com/open-mmlab/mmsegmentation/issues/new/choose) From 7e41b5af8d769b6b4e0aa95943068b25ef7e3c75 Mon Sep 17 00:00:00 2001 From: jinxianwei <81373517+jinxianwei@users.noreply.github.com> Date: Tue, 7 Mar 2023 21:23:04 +0800 Subject: [PATCH 06/32] en doc of uisualization_feature_map.md (#2715) ## Motivation En doc for visualization_feature_map.md and index.rst ## Modification Add new file and change index.rst --- docs/en/user_guides/index.rst | 1 + .../user_guides/visualization_feature_map.md | 201 ++++++++++++++++++ 2 files changed, 202 insertions(+) create mode 100644 docs/en/user_guides/visualization_feature_map.md diff --git a/docs/en/user_guides/index.rst b/docs/en/user_guides/index.rst index 9e7d365925..1feb1271ae 100644 --- a/docs/en/user_guides/index.rst +++ b/docs/en/user_guides/index.rst @@ -18,3 +18,4 @@ Useful Tools visualization.md useful_tools.md deployment.md + visualization_feature_map.md diff --git a/docs/en/user_guides/visualization_feature_map.md b/docs/en/user_guides/visualization_feature_map.md new file mode 100644 index 0000000000..d61226f055 --- /dev/null +++ b/docs/en/user_guides/visualization_feature_map.md @@ -0,0 +1,201 @@ +# Wandb Feature Map Visualization + +MMSegmentation 1.x provides backend support for Weights & Biases to facilitate visualization and management of project code results. + +## Wandb Configuration + +Install Weights & Biases following [official instructions](https://docs.wandb.ai/quickstart) e.g. + +```shell +pip install wandb +wandb login +``` + +Add `WandbVisBackend` in `vis_backend` of `visualizer` in `default_runtime.py` config file: + +```python +vis_backends=[dict(type='LocalVisBackend'), + dict(type='TensorboardVisBackend'), + dict(type='WandbVisBackend')] +``` + +## Examining feature map visualization in Wandb + +`SegLocalVisualizer` is child class inherits from `Visualizer` in MMEngine and works for MMSegmentation visualization, for more details about `Visualizer` please refer to [visualization tutorial](https://github.com/open-mmlab/mmengine/blob/main/docs/en/advanced_tutorials/visualization.md) in MMEngine. + +Here is an example about `SegLocalVisualizer`, first you may download example data below by following commands: + +
+ +
+ +```shell +wget https://user-images.githubusercontent.com/24582831/189833109-eddad58f-f777-4fc0-b98a-6bd429143b06.png --output-document aachen_000000_000019_leftImg8bit.png +wget https://user-images.githubusercontent.com/24582831/189833143-15f60f8a-4d1e-4cbb-a6e7-5e2233869fac.png --output-document aachen_000000_000019_gtFine_labelTrainIds.png + +wget https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r50-d8_512x1024_40k_cityscapes/ann_r50-d8_512x1024_40k_cityscapes_20200605_095211-049fc292.pth + +``` + +```python +# Copyright (c) OpenMMLab. All rights reserved. +from argparse import ArgumentParser +from typing import Type + +import mmcv +import torch +import torch.nn as nn + +from mmengine.model import revert_sync_batchnorm +from mmengine.structures import PixelData +from mmseg.apis import inference_model, init_model +from mmseg.structures import SegDataSample +from mmseg.utils import register_all_modules +from mmseg.visualization import SegLocalVisualizer + + +class Recorder: + """record the forward output feature map and save to data_buffer.""" + + def __init__(self) -> None: + self.data_buffer = list() + + def __enter__(self, ): + self._data_buffer = list() + + def record_data_hook(self, model: nn.Module, input: Type, output: Type): + self.data_buffer.append(output) + + def __exit__(self, *args, **kwargs): + pass + + +def visualize(args, model, recorder, result): + seg_visualizer = SegLocalVisualizer( + vis_backends=[dict(type='WandbVisBackend')], + save_dir='temp_dir', + alpha=0.5) + seg_visualizer.dataset_meta = dict( + classes=model.dataset_meta['classes'], + palette=model.dataset_meta['palette']) + + image = mmcv.imread(args.img, 'color') + + seg_visualizer.add_datasample( + name='predict', + image=image, + data_sample=result, + draw_gt=False, + draw_pred=True, + wait_time=0, + out_file=None, + show=False) + + # add feature map to wandb visualizer + for i in range(len(recorder.data_buffer)): + feature = recorder.data_buffer[i][0] # remove the batch + drawn_img = seg_visualizer.draw_featmap( + feature, image, channel_reduction='select_max') + seg_visualizer.add_image(f'feature_map{i}', drawn_img) + + if args.gt_mask: + sem_seg = mmcv.imread(args.gt_mask, 'unchanged') + sem_seg = torch.from_numpy(sem_seg) + gt_mask = dict(data=sem_seg) + gt_mask = PixelData(**gt_mask) + data_sample = SegDataSample() + data_sample.gt_sem_seg = gt_mask + + seg_visualizer.add_datasample( + name='gt_mask', + image=image, + data_sample=data_sample, + draw_gt=True, + draw_pred=False, + wait_time=0, + out_file=None, + show=False) + + seg_visualizer.add_image('image', image) + + +def main(): + parser = ArgumentParser( + description='Draw the Feature Map During Inference') + parser.add_argument('img', help='Image file') + parser.add_argument('config', help='Config file') + parser.add_argument('checkpoint', help='Checkpoint file') + parser.add_argument('--gt_mask', default=None, help='Path of gt mask file') + parser.add_argument('--out-file', default=None, help='Path to output file') + parser.add_argument( + '--device', default='cuda:0', help='Device used for inference') + parser.add_argument( + '--opacity', + type=float, + default=0.5, + help='Opacity of painted segmentation map. In (0, 1] range.') + parser.add_argument( + '--title', default='result', help='The image identifier.') + args = parser.parse_args() + + register_all_modules() + + # build the model from a config file and a checkpoint file + model = init_model(args.config, args.checkpoint, device=args.device) + if args.device == 'cpu': + model = revert_sync_batchnorm(model) + + # show all named module in the model and use it in source list below + for name, module in model.named_modules(): + print(name) + + source = [ + 'decode_head.fusion.stages.0.query_project.activate', + 'decode_head.context.stages.0.key_project.activate', + 'decode_head.context.bottleneck.activate' + ] + source = dict.fromkeys(source) + + count = 0 + recorder = Recorder() + # registry the forward hook + for name, module in model.named_modules(): + if name in source: + count += 1 + module.register_forward_hook(recorder.record_data_hook) + if count == len(source): + break + + with recorder: + # test a single image, and record feature map to data_buffer + result = inference_model(model, args.img) + + visualize(args, model, recorder, result) + + +if __name__ == '__main__': + main() + +``` + +Save the above code as feature_map_visual.py and execute the following code in terminal + +```shell +python feature_map_visual.py ${image} ${config} ${checkpoint} [optional args] +``` + +e.g + +```shell +python feature_map_visual.py \ +aachen_000000_000019_leftImg8bit.png \ +configs/ann/ann_r50-d8_4xb2-40k_cityscapes-512x1024.py \ +ann_r50-d8_512x1024_40k_cityscapes_20200605_095211-049fc292.pth \ +--gt_mask aachen_000000_000019_gtFine_labelTrainIds.png +``` + +The visualized image result and its corresponding reature map will appear in the wandb account. + +
+ +
From 645dcf8c49e78529176f9f9893faa878f843cc65 Mon Sep 17 00:00:00 2001 From: CSH <40987381+csatsurnh@users.noreply.github.com> Date: Thu, 9 Mar 2023 22:27:42 +0800 Subject: [PATCH 07/32] [Doc] Add zh_cn evaluation doc and fix en typo (#2701) as title --------- Signed-off-by: csatsurnh --- docs/en/advanced_guides/evaluation.md | 28 ++-- docs/zh_cn/advanced_guides/evaluation.md | 157 ++++++++++++++++++++++- 2 files changed, 170 insertions(+), 15 deletions(-) diff --git a/docs/en/advanced_guides/evaluation.md b/docs/en/advanced_guides/evaluation.md index ee5a927ff7..1e42db2a10 100644 --- a/docs/en/advanced_guides/evaluation.md +++ b/docs/en/advanced_guides/evaluation.md @@ -1,6 +1,6 @@ # Evaluation -The evaluation procedure would be executed at [ValLoop](https://github.com/open-mmlab/mmengine/blob/main/mmengine/runner/loops.py#L300) and [TestLoop](https://github.com/open-mmlab/mmengine/blob/main/mmengine/runner/loops.py#L373), users can evaluate model performance during training or using the test script with simple settings in the configuration file. The `ValLoop` and `TestLoop` are properties of [Runner](https://github.com/open-mmlab/mmengine/blob/main/mmengine/runner/runner.py#L59), they will be built the first time they are called. To build the `ValLoop` successfully, the `val_dataloader` and `val_evaluator` must be set when building `Runner` since `dataloder` and `evaluator` are required parameters, and the same goes for `TestLoop`. For more information about the Runner's design, please refer to the [documentoation](https://github.com/open-mmlab/mmengine/blob/main/docs/en/design/runner.md) of [MMEngine](https://github.com/open-mmlab/mmengine). +The evaluation procedure would be executed at [ValLoop](https://github.com/open-mmlab/mmengine/blob/main/mmengine/runner/loops.py#L300) and [TestLoop](https://github.com/open-mmlab/mmengine/blob/main/mmengine/runner/loops.py#L373), users can evaluate model performance during training or using the test script with simple settings in the configuration file. The `ValLoop` and `TestLoop` are properties of [Runner](https://github.com/open-mmlab/mmengine/blob/main/mmengine/runner/runner.py#L59), they will be built the first time they are called. To build the `ValLoop` successfully, the `val_dataloader` and `val_evaluator` must be set when building `Runner` since `dataloader` and `evaluator` are required parameters, and the same goes for `TestLoop`. For more information about the Runner's design, please refer to the [documentation](https://github.com/open-mmlab/mmengine/blob/main/docs/en/design/runner.md) of [MMEngine](https://github.com/open-mmlab/mmengine).
@@ -61,7 +61,7 @@ In MMSegmentation, the settings of `test_dataloader` and `test_evaluator` are th ## IoUMetric -MMSegmentation implements [IoUMetric](https://github.com/open-mmlab/mmsegmentation/blob/1.x/mmseg/evaluation/metrics/iou_metric.py) and [CitysMetric](https://github.com/open-mmlab/mmsegmentation/blob/1.x/mmseg/evaluation/metrics/citys_metric.py) for evaluating the performance of models, based on the [BaseMetric](https://github.com/open-mmlab/mmengine/blob/main/mmengine/evaluator/metric.py) provided by [MMEngine](https://github.com/open-mmlab/mmengine). Please refer to [the documentation](https://mmengine.readthedocs.io/en/latest/tutorials/evaluation.html) for more details about the unified evaluation interface. +MMSegmentation implements [IoUMetric](https://github.com/open-mmlab/mmsegmentation/blob/1.x/mmseg/evaluation/metrics/iou_metric.py) and [CityscapesMetric](https://github.com/open-mmlab/mmsegmentation/blob/1.x/mmseg/evaluation/metrics/citys_metric.py) for evaluating the performance of models, based on the [BaseMetric](https://github.com/open-mmlab/mmengine/blob/main/mmengine/evaluator/metric.py) provided by [MMEngine](https://github.com/open-mmlab/mmengine). Please refer to [the documentation](https://mmengine.readthedocs.io/en/latest/tutorials/evaluation.html) for more details about the unified evaluation interface. Here we briefly describe the arguments and the two main methods of `IoUMetric`. @@ -102,9 +102,9 @@ Returns: - Dict\[str, float\] - The computed metrics. The keys are the names of the metrics, and the values are corresponding results. The key mainly includes **aAcc**, **mIoU**, **mAcc**, **mDice**, **mFscore**, **mPrecision**, **mRecall**. -## CitysMetric +## CityscapesMetric -`CitysMetric` uses the official [CityscapesScripts](https://github.com/mcordts/cityscapesScripts) provided by Cityscapes to evaluate model performance. +`CityscapesMetric` uses the official [CityscapesScripts](https://github.com/mcordts/cityscapesScripts) provided by Cityscapes to evaluate model performance. ### Usage @@ -114,10 +114,10 @@ Before using it, please install the `cityscapesscripts` package first: pip install cityscapesscripts ``` -Since the `IoUMetric` is used as the default evaluator in MMSegmentation, if you would like to use `CitysMetric`, customizing the config file is required. In your customized config file, you should overwrite the default evaluator as follows. +Since the `IoUMetric` is used as the default evaluator in MMSegmentation, if you would like to use `CityscapesMetric`, customizing the config file is required. In your customized config file, you should overwrite the default evaluator as follows. ```python -val_evaluator = dict(type='CitysMetric', citys_metrics=['cityscapes']) +val_evaluator = dict(type='CityscapesMetric', output_dir='tmp') test_evaluator = val_evaluator ``` @@ -125,27 +125,27 @@ test_evaluator = val_evaluator The arguments of the constructor: +- output_dir (str) - The directory for output prediction - ignore_index (int) - Index that will be ignored in evaluation. Default: 255. -- citys_metrics (list\[str\] | str) - Metrics to be evaluated, Default: \['cityscapes'\]. -- to_label_id (bool) - whether convert output to label_id for submission. Default: True. -- suffix (str): The filename prefix of the png files. If the prefix is "somepath/xxx", the png files will be named "somepath/xxx.png". Default: '.format_cityscapes'. -- collect_device (str): Device name used for collecting results from different ranks during distributed training. Must be 'cpu' or 'gpu'. Defaults to 'cpu'. -- prefix (str, optional): The prefix that will be added in the metric names to disambiguate homonymous metrics of different evaluators. If the prefix is not provided in the argument, self.default_prefix will be used instead. Defaults to None. +- format_only (bool) - Only format result for results commit without perform evaluation. It is useful when you want to format the result to a specific format and submit it to the test server. Defaults to False. +- keep_results (bool) - Whether to keep the results. When `format_only` is True, `keep_results` must be True. Defaults to False. +- collect_device (str) - Device name used for collecting results from different ranks during distributed training. Must be 'cpu' or 'gpu'. Defaults to 'cpu'. +- prefix (str, optional) - The prefix that will be added in the metric names to disambiguate homonymous metrics of different evaluators. If prefix is not provided in the argument, self.default_prefix will be used instead. Defaults to None. -#### CitysMetric.process +#### CityscapesMetric.process This method would draw the masks on images and save the painted images to `work_dir`. Parameters: -- data_batch (Any) - A batch of data from the dataloader. +- data_batch (dict) - A batch of data from the dataloader. - data_samples (Sequence\[dict\]) - A batch of outputs from the model. Returns: This method doesn't have returns, the annotations' path would be stored in `self.results`, which will be used to compute the metrics when all batches have been processed. -#### CitysMetric.compute_metrics +#### CityscapesMetric.compute_metrics This method would call `cityscapesscripts.evaluation.evalPixelLevelSemanticLabeling` tool to calculate metrics. diff --git a/docs/zh_cn/advanced_guides/evaluation.md b/docs/zh_cn/advanced_guides/evaluation.md index a82311ccc7..dc93a46e13 100644 --- a/docs/zh_cn/advanced_guides/evaluation.md +++ b/docs/zh_cn/advanced_guides/evaluation.md @@ -1,3 +1,158 @@ # 模型评测 -中文版文档支持中,请先阅读[英文版本](../../en/advanced_guides/evaluation.md) +模型评测过程会分别在 [ValLoop](https://github.com/open-mmlab/mmengine/blob/main/mmengine/runner/loops.py#L300) 和 [TestLoop](https://github.com/open-mmlab/mmengine/blob/main/mmengine/runner/loops.py#L373) 中被执行,用户可以在训练期间或使用配置文件中简单设置的测试脚本进行模型性能评估。`ValLoop` 和 `TestLoop` 属于 [Runner](https://github.com/open-mmlab/mmengine/blob/main/mmengine/runner/runner.py#L59),它们会在第一次被调用时构建。由于 `dataloader` 与 `evaluator` 是必需的参数,所以要成功构建 `ValLoop`,在构建 `Runner` 时必须设置 `val_dataloader` 和 `val_evaluator`,`TestLoop` 亦然。有关 Runner 设计的更多信息,请参阅 [MMEngine](https://github.com/open-mmlab/mmengine) 的[文档](https://github.com/open-mmlab/mmengine/blob/main/docs/zh_cn/design/runner.md)。 + +
+ +
测试/验证 数据流
+
+ +在 MMSegmentation 中,默认情况下,我们将 dataloader 和 metrics 的设置写在数据集配置文件中,并将 evaluation loop 的配置写在 `schedule_x` 配置文件中。 + +例如,在 ADE20K 配置文件 `configs/_base_/dataset/ADE20K.py` 中,在第37到48行,我们配置了 `val_dataloader`,在第51行,我们选择 `IoUMetric` 作为 evaluator,并设置 `mIoU` 作为指标: + +```python +val_dataloader = dict( + batch_size=1, + num_workers=4, + persistent_workers=True, + sampler=dict(type='DefaultSampler', shuffle=False), + dataset=dict( + type=dataset_type, + data_root=data_root, + data_prefix=dict( + img_path='images/validation', + seg_map_path='annotations/validation'), + pipeline=test_pipeline)) + +val_evaluator = dict(type='IoUMetric', iou_metrics=['mIoU']) +``` + +为了能够在训练期间进行评估模型,我们将评估配置添加到了 `configs/schedules/schedule_40k.py` 文件的第15至16行: + +```python +train_cfg = dict(type='IterBasedTrainLoop', max_iters=40000, val_interval=4000) +val_cfg = dict(type='ValLoop') +``` + +使用以上两种设置,MMSegmentation 在 40K 迭代训练期间,每 4000 次迭代进行一次模型 **mIoU** 指标的评估。 + +如果我们希望在训练后测试模型,则需要将 `test_dataloader`、`test_evaluator` 和 `test_cfg` 配置添加到配置文件中。 + +```python +test_dataloader = dict( + batch_size=1, + num_workers=4, + persistent_workers=True, + sampler=dict(type='DefaultSampler', shuffle=False), + dataset=dict( + type=dataset_type, + data_root=data_root, + data_prefix=dict( + img_path='images/validation', + seg_map_path='annotations/validation'), + pipeline=test_pipeline)) + +test_evaluator = dict(type='IoUMetric', iou_metrics=['mIoU']) +test_cfg = dict(type='TestLoop') +``` + +在 MMSegmentation 中,默认情况下,`test_dataloader` 和 `test_evaluator` 的设置与 `ValLoop` 的 dataloader 和 evaluator 相同,我们可以修改这些设置以满足我们的需要。 + +## IoUMetric + +MMSegmentation 基于 [MMEngine](https://github.com/open-mmlab/mmengine) 提供的 [BaseMetric](https://github.com/open-mmlab/mmengine/blob/main/mmengine/evaluator/metric.py) 实现 [IoUMetric](https://github.com/open-mmlab/mmsegmentation/blob/1.x/mmseg/evaluation/metrics/iou_metric.py) 和 [CityscapesMetric](https://github.com/open-mmlab/mmsegmentation/blob/1.x/mmseg/evaluation/metrics/citys_metric.py),以评估模型的性能。有关统一评估接口的更多详细信息,请参阅[文档](https://mmengine.readthedocs.io/zh_CN/latest/tutorials/evaluation.html)。 + +这里我们简要介绍 `IoUMetric` 的参数和两种主要方法。 + +除了 `collect_device` 和 `prefix` 之外,`IoUMetric` 的构建还包含一些其他参数。 + +构造函数的参数: + +- ignore_index(int)- 将在评估中忽略的类别索引。默认值:255。 +- iou_metrics(list\[str\] | str)- 需要计算的指标,可选项包括 'mIoU'、'mDice' 和 'mFscore'。 +- nan_to_num(int,可选)- 如果指定,NaN 值将被用户定义的数字替换。默认值:None。 +- beta(int)- 决定综合评分中 recall 的权重。默认值:1。 +- collect_device(str)- 用于在分布式训练期间从不同进程收集结果的设备名称。必须是 'cpu' 或 'gpu'。默认为 'cpu'。 +- prefix(str,可选)- 将添加到指标名称中的前缀,以消除不同 evaluator 的同名指标的歧义。如果参数中未提供前缀,则将使用 self.default_prefix 进行替代。默认为 None。 + +`IoUMetric` 实现 IoU 指标的计算,`IoUMetric` 的两个核心方法是 `process` 和 `compute_metrics`。 + +- `process` 方法处理一批 data 和 data_samples。 +- `compute_metrics` 方法根据处理的结果计算指标。 + +### IoUMetric.process + +参数: + +- data_batch(Any)- 来自 dataloader 的一批数据。 +- data_samples(Sequence\[dict\])- 模型的一批输出。 + +返回值: + +此方法没有返回值,因为处理的结果将存储在 `self.results` 中,以在处理完所有批次后进行指标的计算。 + +### IoUMetric.compute_metrics + +参数: + +- results(list)- 每个批次的处理结果。 + +返回值: + +- Dict\[str,float\] - 计算的指标。指标的名称为 key,值是相应的结果。key 主要包括 **aAcc**、**mIoU**、**mAcc**、**mDice**、**mFscore**、**mPrecision**、**mPrecall**。 + +## CityscapesMetric + +`CityscapesMetric` 使用由 Cityscapes 官方提供的 [CityscapesScripts](https://github.com/mcordts/cityscapesScripts) 进行模型性能的评估。 + +### 使用方法 + +在使用之前,请先安装 `cityscapesscripts` 包: + +```shell +pip install cityscapesscripts +``` + +由于 `IoUMetric` 在 MMSegmentation 中作为默认的 evaluator 使用,如果您想使用 `CityscapesMetric`,则需要自定义配置文件。在自定义配置文件中,应按如下方式替换默认 evaluator。 + +```python +val_evaluator = dict(type='CityscapesMetric', output_dir='tmp') +test_evaluator = val_evaluator +``` + +### 接口 + +构造函数的参数: + +- output_dir (str) - 预测结果输出的路径 +- ignore_index (int) - 将在评估中忽略的类别索引。默认值:255。 +- format_only (bool) - 只为提交进行结果格式化而不进行评估。当您希望将结果格式化为特定格式并将其提交给测试服务器时有用。默认为 False。 +- keep_results (bool) - 是否保留结果。当 `format_only` 为 True 时,`keep_results` 必须为 True。默认为 False。 +- collect_device (str) - 用于在分布式训练期间从不同进程收集结果的设备名称。必须是 'cpu' 或 'gpu'。默认为 'cpu'。 +- prefix (str,可选) - 将添加到指标名称中的前缀,以消除不同 evaluator 的同名指标的歧义。如果参数中未提供前缀,则将使用 self.default_prefix 进行替代。默认为 None。 + +#### CityscapesMetric.process + +该方法将在图像上绘制 mask,并将绘制的图像保存到 `work_dir` 中。 + +参数: + +- data_batch(dict)- 来自 dataloader 的一批数据。 +- data_samples(Sequence\[dict\])- 模型的一批输出。 + +返回值: + +此方法没有返回值,因为处理的结果将存储在 `self.results` 中,以在处理完所有批次后进行指标的计算。 + +#### CityscapesMetric.compute_metrics + +此方法将调用 `cityscapessscripts.evaluation.evalPixelLevelSemanticLabeling` 工具来计算指标。 + +参数: + +- results(list)- 数据集的测试结果。 + +返回值: + +- dict\[str:float\] - Cityscapes 评测结果。 From 6468d3150a0a02c212bd1515b9b52f9a74a95f94 Mon Sep 17 00:00:00 2001 From: CSH <40987381+csatsurnh@users.noreply.github.com> Date: Thu, 9 Mar 2023 22:28:58 +0800 Subject: [PATCH 08/32] [Doc] Add zh_cn transforms doc and format en doc (#2722) as title --- docs/en/advanced_guides/transforms.md | 24 ++--- docs/zh_cn/advanced_guides/transforms.md | 118 ++++++++++++++++++++++- 2 files changed, 124 insertions(+), 18 deletions(-) diff --git a/docs/en/advanced_guides/transforms.md b/docs/en/advanced_guides/transforms.md index e0c4155b57..68b1f44bd3 100644 --- a/docs/en/advanced_guides/transforms.md +++ b/docs/en/advanced_guides/transforms.md @@ -12,15 +12,10 @@ The structure of this guide is as follows: ## Design of Data pipelines -Following typical conventions, we use `Dataset` and `DataLoader` for data loading -with multiple workers. `Dataset` returns a dict of data items corresponding -the arguments of models' forward method. -Since the data in semantic segmentation may not be the same size, -we introduce a new `DataContainer` type in MMCV to help collect and distribute -data of different size. -See [here](https://github.com/open-mmlab/mmcv/blob/master/mmcv/parallel/data_container.py) for more details. +Following typical conventions, we use `Dataset` and `DataLoader` for data loading with multiple workers. `Dataset` returns a dict of data items corresponding the arguments of models' forward method. Since the data in semantic segmentation may not be the same size, we introduce a new `DataContainer` type in MMCV to help collect and distribute data of different size. See [here](https://github.com/open-mmlab/mmcv/blob/master/mmcv/parallel/data_container.py) for more details. In 1.x version of MMSegmentation, all data transformations are inherited from [`BaseTransform`](https://github.com/open-mmlab/mmcv/blob/2.x/mmcv/transforms/base.py#L6). + The input and output types of transformations are both dict. A simple example is as follows: ```python @@ -38,13 +33,11 @@ The input and output types of transformations are both dict. A simple example is dict_keys(['img_path', 'seg_map_path', 'reduce_zero_label', 'seg_fields', 'gt_seg_map']) ``` -The data preparation pipeline and the dataset are decomposed. Usually a dataset -defines how to process the annotations and a data pipeline defines all the steps to prepare a data dict. -A pipeline consists of a sequence of operations. Each operation takes a dict as input and also outputs a dict for the next transform. +The data preparation pipeline and the dataset are decomposed. Usually a dataset defines how to process the annotations and a data pipeline defines all the steps to prepare a data dict. A pipeline consists of a sequence of operations. Each operation takes a dict as input and also outputs a dict for the next transform. The operations are categorized into data loading, pre-processing, formatting and test-time augmentation. -Here is a pipeline example for PSPNet. +Here is a pipeline example for PSPNet: ```python crop_size = (512, 1024) @@ -71,8 +64,7 @@ test_pipeline = [ ] ``` -For each operation, we list the related dict fields that are `added`/`updated`/`removed`. -Before pipelines, the information we can directly obtain from the datasets are `img_path` and `seg_map_path`. +For each operation, we list the related dict fields that are `added`/`updated`/`removed`. Before pipelines, the information we can directly obtain from the datasets are `img_path` and `seg_map_path`. ### Data loading @@ -98,16 +90,14 @@ Before pipelines, the information we can directly obtain from the datasets are ` `RandomCrop`: Random crop image & segmentation map. -- update: `img`, `gt_seg_map`, `img_shape`. +- update: `img`, `gt_seg_map`, `img_shape` `RandomFlip`: Flip the image & segmentation map. - add: `flip`, `flip_direction` - update: `img`, `gt_seg_map` -`PhotoMetricDistortion`: Apply photometric distortion to image sequentially, -every transformation is applied with a probability of 0.5. -The position of random contrast is in second or second to last(mode 0 or 1 below, respectively). +`PhotoMetricDistortion`: Apply photometric distortion to image sequentially, every transformation is applied with a probability of 0.5. The position of random contrast is in second or second to last(mode 0 or 1 below, respectively). ``` 1. random brightness diff --git a/docs/zh_cn/advanced_guides/transforms.md b/docs/zh_cn/advanced_guides/transforms.md index 1cbe79ba49..e5f3bebf6d 100644 --- a/docs/zh_cn/advanced_guides/transforms.md +++ b/docs/zh_cn/advanced_guides/transforms.md @@ -1,3 +1,119 @@ # 数据增强变化 -中文版文档支持中,请先阅读[英文版本](../../en/advanced_guides/transforms.md) +在本教程中,我们将介绍 MMSegmentation 中数据增强变化流程的设计。 + +本指南的结构如下: + +- [数据增强变化](#数据增强变化) + - [数据增强变化流程设计](#数据增强变化流程设计) + - [数据加载](#数据加载) + - [预处理](#预处理) + - [格式修改](#格式修改) + +## 数据增强变化流程设计 + +按照惯例,我们使用 `Dataset` 和 `DataLoader` 多进程地加载数据。`Dataset` 返回与模型 forward 方法的参数相对应的数据项的字典。由于语义分割中的数据可能大小不同,我们在 MMCV 中引入了一种新的 `DataContainer` 类型,以帮助收集和分发不同大小的数据。参见[此处](https://github.com/open-mmlab/mmcv/blob/master/mmcv/parallel/data_container.py)了解更多详情。 + +在 MMSegmentation 的 1.x 版本中,所有数据转换都继承自 [`BaseTransform`](https://github.com/open-mmlab/mmcv/blob/2.x/mmcv/transforms/base.py#L6). + +转换的输入和输出类型都是字典。一个简单的示例如下: + +```python +>>> from mmseg.datasets.transforms import LoadAnnotations +>>> transforms = LoadAnnotations() +>>> img_path = './data/cityscapes/leftImg8bit/train/aachen/aachen_000000_000019_leftImg8bit.png.png' +>>> gt_path = './data/cityscapes/gtFine/train/aachen/aachen_000015_000019_gtFine_instanceTrainIds.png' +>>> results = dict( +>>> img_path=img_path, +>>> seg_map_path=gt_path, +>>> reduce_zero_label=False, +>>> seg_fields=[]) +>>> data_dict = transforms(results) +>>> print(data_dict.keys()) +dict_keys(['img_path', 'seg_map_path', 'reduce_zero_label', 'seg_fields', 'gt_seg_map']) +``` + +数据准备流程和数据集是解耦的。通常,数据集定义如何处理标注,数据流程定义准备数据字典的所有步骤。流程由一系列操作组成。每个操作都将字典作为输入,并为接下来的转换输出字典。 + +操作分为数据加载、预处理、格式修改和测试数据增强。 + +这里是 PSPNet 的流程示例: + +```python +crop_size = (512, 1024) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations'), + dict( + type='RandomResize', + scale=(2048, 1024), + ratio_range=(0.5, 2.0), + keep_ratio=True), + dict(type='RandomCrop', crop_size=crop_size, cat_max_ratio=0.75), + dict(type='RandomFlip', prob=0.5), + dict(type='PhotoMetricDistortion'), + dict(type='PackSegInputs') +] +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='Resize', scale=(2048, 1024), keep_ratio=True), + # add loading annotation after ``Resize`` because ground truth + # does not need to resize data transform + dict(type='LoadAnnotations'), + dict(type='PackSegInputs') +] +``` + +对于每个操作,我们列出了 `添加`/`更新`/`删除` 相关的字典字段。在流程前,我们可以从数据集直接获得的信息是 `img_path` 和 `seg_map_path`。 + +### 数据加载 + +`LoadImageFromFile`:从文件加载图像。 + +- 添加:`img`,`img_shape`,`ori_shape` + +`LoadAnnotations`:加载数据集提供的语义分割图。 + +- 添加:`seg_fields`,`gt_seg_map` + +### 预处理 + +`RandomResize`:随机调整图像和分割图大小。 + +-添加:`scale`,`scale_factor`,`keep_ratio` +-更新:`img`,`img_shape`,`gt_seg_map` + +`Resize`:调整图像和分割图的大小。 + +-添加:`scale`,`scale_factor`,`keep_ratio` +-更新:`img`,`gt_seg_map`,`img_shape` + +`RandomCrop`:随机裁剪图像和分割图。 + +-更新:`img`,`gt_seg_map`,`img_shape` + +`RandomFlip`:翻转图像和分割图。 + +-添加:`flip`,`flip_direction` +-更新:`img`,`gt_seg_map` + +`PhotoMetricDistortion`:按顺序对图像应用光度失真,每个变换的应用概率为 0.5。随机对比度的位置是第二或倒数第二(分别为下面的模式 0 或 1)。 + +``` +1.随机亮度 +2.随机对比度(模式 0) +3.将颜色从 BGR 转换为 HSV +4.随机饱和度 +5.随机色调 +6.将颜色从 HSV 转换为 BGR +7.随机对比度(模式 1) +``` + +- 更新:`img` + +### 格式修改 + +`PackSegInputs`:为语义分段打包输入数据。 + +- 添加:`inputs`,`data_sample` +- 删除:由 `meta_keys` 指定的 keys(合并到 data_sample 的 metainfo 中),所有其他 keys From 45fae72de5d3bf933504348daba5c848f752d4a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E6=98=95=E8=BE=B0?= Date: Fri, 10 Mar 2023 19:25:47 +0800 Subject: [PATCH 09/32] [Feature] Support calculating FLOPs of segmentors (#2706) ## Motivation fix compute flops problems ## Modification Please briefly describe what modification is made in this PR. --- tools/analysis_tools/get_flops.py | 108 ++++++++++++++++++++++++------ 1 file changed, 86 insertions(+), 22 deletions(-) diff --git a/tools/analysis_tools/get_flops.py b/tools/analysis_tools/get_flops.py index 1e8f188e18..66b2d52fcd 100644 --- a/tools/analysis_tools/get_flops.py +++ b/tools/analysis_tools/get_flops.py @@ -1,10 +1,23 @@ # Copyright (c) OpenMMLab. All rights reserved. import argparse +import tempfile +from pathlib import Path -from mmcv.cnn import get_model_complexity_info -from mmengine import Config +import torch +from mmengine import Config, DictAction +from mmengine.logging import MMLogger +from mmengine.model import revert_sync_batchnorm +from mmengine.registry import init_default_scope -from mmseg.models import build_segmentor +from mmseg.models import BaseSegmentor +from mmseg.registry import MODELS +from mmseg.structures import SegDataSample + +try: + from mmengine.analysis import get_model_complexity_info + from mmengine.analysis.print_helper import _format_size +except ImportError: + raise ImportError('Please upgrade mmengine >= 0.6.0 to use this script.') def parse_args(): @@ -17,13 +30,33 @@ def parse_args(): nargs='+', default=[2048, 1024], help='input image size') + 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 main(): +def inference(args: argparse.Namespace, logger: MMLogger) -> dict: + config_name = Path(args.config) - args = parse_args() + if not config_name.exists(): + logger.error(f'Config file {config_name} does not exist') + + cfg: Config = Config.fromfile(config_name) + cfg.work_dir = tempfile.TemporaryDirectory().name + cfg.log_level = 'WARN' + if args.cfg_options is not None: + cfg.merge_from_dict(args.cfg_options) + + init_default_scope(cfg.get('scope', 'mmseg')) if len(args.shape) == 1: input_shape = (3, args.shape[0], args.shape[0]) @@ -31,29 +64,60 @@ def main(): input_shape = (3, ) + tuple(args.shape) else: raise ValueError('invalid input shape') + result = {} - cfg = Config.fromfile(args.config) - cfg.model.pretrained = None - model = build_segmentor( - cfg.model, - train_cfg=cfg.get('train_cfg'), - test_cfg=cfg.get('test_cfg')).cuda() + model: BaseSegmentor = MODELS.build(cfg.model) + if hasattr(model, 'auxiliary_head'): + model.auxiliary_head = None + if torch.cuda.is_available(): + model.cuda() + model = revert_sync_batchnorm(model) + result['ori_shape'] = input_shape[-2:] + result['pad_shape'] = input_shape[-2:] + data_batch = { + 'inputs': [torch.rand(input_shape)], + 'data_samples': [SegDataSample(metainfo=result)] + } + data = model.data_preprocessor(data_batch) model.eval() + if cfg.model.decode_head.type in ['MaskFormerHead', 'Mask2FormerHead']: + # TODO: Support MaskFormer and Mask2Former + raise NotImplementedError('MaskFormer and Mask2Former are not ' + 'supported yet.') + outputs = get_model_complexity_info( + model, + input_shape, + inputs=data['inputs'], + show_table=False, + show_arch=False) + result['flops'] = _format_size(outputs['flops']) + result['params'] = _format_size(outputs['params']) + result['compute_type'] = 'direct: randomly generate a picture' + return result - if hasattr(model, 'forward_dummy'): - model.forward = model.forward_dummy - else: - raise NotImplementedError( - 'FLOPs counter is currently not currently supported with {}'. - format(model.__class__.__name__)) - flops, params = get_model_complexity_info(model, input_shape) +def main(): + + args = parse_args() + logger = MMLogger.get_instance(name='MMLogger') + + result = inference(args, logger) split_line = '=' * 30 - print('{0}\nInput shape: {1}\nFlops: {2}\nParams: {3}\n{0}'.format( - split_line, input_shape, flops, params)) + ori_shape = result['ori_shape'] + pad_shape = result['pad_shape'] + flops = result['flops'] + params = result['params'] + compute_type = result['compute_type'] + + if pad_shape != ori_shape: + print(f'{split_line}\nUse size divisor set input shape ' + f'from {ori_shape} to {pad_shape}') + print(f'{split_line}\nCompute type: {compute_type}\n' + f'Input shape: {pad_shape}\nFlops: {flops}\n' + f'Params: {params}\n{split_line}') print('!!!Please be cautious if you use the results in papers. ' - 'You may need to check if all ops are supported and verify that the ' - 'flops computation is correct.') + 'You may need to check if all ops are supported and verify ' + 'that the flops computation is correct.') if __name__ == '__main__': From 684d79fedc2d144c8ac9e4ce16cd3b0dbd524ccb Mon Sep 17 00:00:00 2001 From: CSH <40987381+csatsurnh@users.noreply.github.com> Date: Mon, 13 Mar 2023 19:23:22 +0800 Subject: [PATCH 10/32] [Doc] add zh_cn migration doc (#2733) as title --------- Co-authored-by: MeowZheng --- README_zh-CN.md | 2 +- docs/en/migration/interface.md | 39 +-- docs/en/migration/package.md | 7 +- docs/zh_cn/migration.md | 3 - docs/zh_cn/migration/index.rst | 8 + docs/zh_cn/migration/interface.md | 496 ++++++++++++++++++++++++++++++ docs/zh_cn/migration/package.md | 113 +++++++ 7 files changed, 637 insertions(+), 31 deletions(-) delete mode 100644 docs/zh_cn/migration.md create mode 100644 docs/zh_cn/migration/index.rst create mode 100644 docs/zh_cn/migration/interface.md create mode 100644 docs/zh_cn/migration/package.md diff --git a/README_zh-CN.md b/README_zh-CN.md index 858485fd54..f7c3b0b18e 100644 --- a/README_zh-CN.md +++ b/README_zh-CN.md @@ -76,7 +76,7 @@ MMSegmentation 是一个基于 PyTorch 的语义分割开源工具箱。它是 O 同时,我们提供了 Colab 教程。你可以在[这里](demo/MMSegmentation_Tutorial.ipynb)浏览教程,或者直接在 Colab 上[运行](https://colab.research.google.com/github/open-mmlab/mmsegmentation/blob/1.x/demo/MMSegmentation_Tutorial.ipynb)。 -若需要将0.x版本的代码迁移至新版,请参考[迁移文档](docs/zh_cn/migration.md)。 +若需要将0.x版本的代码迁移至新版,请参考[迁移文档](docs/zh_cn/migration)。 ## 基准测试和模型库 diff --git a/docs/en/migration/interface.md b/docs/en/migration/interface.md index d75f8ec3ef..3dab125ebc 100644 --- a/docs/en/migration/interface.md +++ b/docs/en/migration/interface.md @@ -6,14 +6,17 @@ This guide describes the fundamental differences between MMSegmentation 0.x and ## New dependencies -MMSegmentation 1.x depends on some new packages, you can prepare a new clean environment and install again according to the [installation tutorial](get_started.md). +MMSegmentation 1.x depends on some new packages, you can prepare a new clean environment and install again according to the [installation tutorial](../get_started.md). + Or install the below packages manually. 1. [MMEngine](https://github.com/open-mmlab/mmengine): MMEngine is the core the OpenMMLab 2.0 architecture, and we splited many compentents unrelated to computer vision from MMCV to MMEngine. 2. [MMCV](https://github.com/open-mmlab/mmcv): The computer vision package of OpenMMLab. This is not a new dependency, but you need to upgrade it to above **2.0.0rc1** version. -3. [MMClassification](https://github.com/open-mmlab/mmclassification)(Optional): The image classification toolbox and benchmark of OpenMMLab. This is not a new dependency, but you need to upgrade it to above **1.0.0rc0** version. +3. [MMClassification](https://github.com/open-mmlab/mmclassification)(Optional): The image classification toolbox and benchmark of OpenMMLab. This is not a new dependency, but you need to upgrade it to above **1.0.0rc0** version. + +4. [MMDetection](https://github.com/open-mmlab/mmdetection)(Optional): The object detection toolbox and benchmark of OpenMMLab. This is not a new dependency, but you need to upgrade it to above **3.0.0rc0** version. ## Train launch @@ -86,7 +89,7 @@ Add `model.data_preprocessor` field to configure the `DataPreProcessor`, includi - `bgr_to_rgb` (bool): whether to convert image from BGR to RGB.Defaults to False. -- `rgb_to_bgr` (bool): whether to convert image from RGB to RGB. Defaults to False. +- `rgb_to_bgr` (bool): whether to convert image from RGB to BGR. Defaults to False. **Note:** Please refer [models documentation](../advanced_guides/models.md) for more details. @@ -260,8 +263,7 @@ tta_pipeline = [ Changes in **`evaluation`**: - The **`evaluation`** field is split to `val_evaluator` and `test_evaluator`. And it won't support `interval` and `save_best` arguments. - The `interval` is moved to `train_cfg.val_interval`, and the `save_best` - is moved to `default_hooks.checkpoint.save_best`. `pre_eval` has been removed. + The `interval` is moved to `train_cfg.val_interval`, and the `save_best` is moved to `default_hooks.checkpoint.save_best`. `pre_eval` has been removed. - `'mIoU'` has been changed to `'IoUMetric'`. @@ -291,8 +293,7 @@ test_evaluator = val_evaluator Changes in **`optimizer`** and **`optimizer_config`**: -- Now we use `optim_wrapper` field to specify all configuration about the optimization process. And the - `optimizer` is a sub field of `optim_wrapper` now. +- Now we use `optim_wrapper` field to specify all configuration about the optimization process. And the `optimizer` is a sub field of `optim_wrapper` now. - `paramwise_cfg` is also a sub field of `optim_wrapper`, instead of `optimizer`. - `optimizer_config` is removed now, and all configurations of it are moved to `optim_wrapper`. - `grad_clip` is renamed to `clip_grad`. @@ -326,11 +327,9 @@ optim_wrapper = dict( Changes in **`lr_config`**: - The `lr_config` field is removed and we use new `param_scheduler` to replace it. -- The `warmup` related arguments are removed, since we use schedulers combination to implement this - functionality. +- The `warmup` related arguments are removed, since we use schedulers combination to implement this functionality. -The new schedulers combination mechanism is very flexible, and you can use it to design many kinds of learning -rate / momentum curves. See [the tutorial](TODO) for more details. +The new schedulers combination mechanism is very flexible, and you can use it to design many kinds of learning rate / momentum curves. See [the tutorial](TODO) for more details.
@@ -374,8 +373,7 @@ param_scheduler = [ Changes in **`runner`**: -Most configuration in the original `runner` field is moved to `train_cfg`, `val_cfg` and `test_cfg`, which -configure the loop in training, validation and test. +Most configuration in the original `runner` field is moved to `train_cfg`, `val_cfg` and `test_cfg`, which configure the loop in training, validation and test.
@@ -402,8 +400,7 @@ test_cfg = dict(type='TestLoop') # Use the default test loop.
-In fact, in OpenMMLab 2.0, we introduced `Loop` to control the behaviors in training, validation and test. The functionalities of `Runner` are also changed. You can find more details of [runner tutorial](https://github.com/open-mmlab/mmengine/blob/main/docs/en/design/runner.md) -in [MMEngine](https://github.com/open-mmlab/mmengine/). +In fact, in OpenMMLab 2.0, we introduced `Loop` to control the behaviors in training, validation and test. The functionalities of `Runner` are also changed. You can find more details of [runner tutorial](https://github.com/open-mmlab/mmengine/blob/main/docs/en/design/runner.md) in [MMEngine](https://github.com/open-mmlab/mmengine/). ### Runtime settings @@ -433,8 +430,7 @@ default_hooks = dict( visualization=dict(type='SegVisualizationHook')) ``` -In addition, we split the original logger to logger and visualizer. The logger is used to record -information and the visualizer is used to show the logger in different backends, like terminal and TensorBoard. +In addition, we split the original logger to logger and visualizer. The logger is used to record information and the visualizer is used to show the logger in different backends, like terminal and TensorBoard. @@ -478,8 +474,7 @@ Changes in **`load_from`** and **`resume_from`**: - If `resume=False` and `load_from` is **not None**, only load the checkpoint, not resume training. - If `resume=False` and `load_from` is **None**, do not load nor resume. -Changes in **`dist_params`**: The `dist_params` field is a sub field of `env_cfg` now. And there are some new -configurations in the `env_cfg`. +Changes in **`dist_params`**: The `dist_params` field is a sub field of `env_cfg` now. And there are some new configurations in the `env_cfg`. ```python env_cfg = dict( @@ -496,8 +491,6 @@ env_cfg = dict( Changes in **`workflow`**: `workflow` related functionalities are removed. -New field **`visualizer`**: The visualizer is a new design in OpenMMLab 2.0 architecture. We use a -visualizer instance in the runner to handle results & log visualization and save to different backends. -See the [visualization tutorial](user_guides/visualization.md) for more details. +New field **`visualizer`**: The visualizer is a new design in OpenMMLab 2.0 architecture. We use a visualizer instance in the runner to handle results & log visualization and save to different backends. See the [visualization tutorial](../user_guides/visualization.md) for more details. -New field **`default_scope`**: The start point to search module for all registries. The `default_scope` in MMSegmentation is `mmseg`. See [the registry tutorial](https://github.com/open-mmlab/mmengine/blob/main/docs/en/tutorials/registry.md) for more details. +New field **`default_scope`**: The start point to search module for all registries. The `default_scope` in MMSegmentation is `mmseg`. See [the registry tutorial](https://github.com/open-mmlab/mmengine/blob/main/docs/en/advanced_tutorials/registry.md) for more details. diff --git a/docs/en/migration/package.md b/docs/en/migration/package.md index c0aa1d6e31..728e9a9bb6 100644 --- a/docs/en/migration/package.md +++ b/docs/en/migration/package.md @@ -74,9 +74,8 @@ We moved registry implementations for all kinds of modules in MMSegmentation in ### `mmseg.apis` -OpenMMLab 2.0 tries to support unified interface for multitasking of Computer Vision, -and releases much stronger [`Runner`](https://github.com/open-mmlab/mmengine/blob/main/docs/en/design/runner.md), -so MMSeg 1.x removed modules in `train.py` and `test.py` renamed `init_segmentor` to `init_model` and `inference_segmentor` to `inference_model` +OpenMMLab 2.0 tries to support unified interface for multitasking of Computer Vision, and releases much stronger [`Runner`](https://github.com/open-mmlab/mmengine/blob/main/docs/en/design/runner.md), so MMSeg 1.x removed modules in `train.py` and `test.py` renamed `init_segmentor` to `init_model` and `inference_segmentor` to `inference_model`. + Here is the changes of `mmseg.apis`: | Function | Changes | @@ -92,7 +91,7 @@ Here is the changes of `mmseg.apis`: ### `mmseg.datasets` -OpenMMLab 2.0 defines the `BaseDataset` to function and interface of dataset, and MMSegmentation 1.x also follow this protocol and defines the `BaseSegDataset` inherited from `BaseDataset`. MMCV 2.x collects general data transforms for multiple tasks e.g. classification, detection, segmentation, so MMSegmentation 1.x uses these data transforms and removes them from mmseg.datasets +OpenMMLab 2.0 defines the `BaseDataset` to function and interface of dataset, and MMSegmentation 1.x also follow this protocol and defines the `BaseSegDataset` inherited from `BaseDataset`. MMCV 2.x collects general data transforms for multiple tasks e.g. classification, detection, segmentation, so MMSegmentation 1.x uses these data transforms and removes them from mmseg.datasets. | Packages/Modules | Changes | | :-------------------: | :------------------------------------------------------------------------------------------ | diff --git a/docs/zh_cn/migration.md b/docs/zh_cn/migration.md deleted file mode 100644 index 3f19b26714..0000000000 --- a/docs/zh_cn/migration.md +++ /dev/null @@ -1,3 +0,0 @@ -# 迁移文档 - -中文迁移文档在支持中,请先阅读[英文版迁移文档](../en/migration/) diff --git a/docs/zh_cn/migration/index.rst b/docs/zh_cn/migration/index.rst new file mode 100644 index 0000000000..854b9e61d0 --- /dev/null +++ b/docs/zh_cn/migration/index.rst @@ -0,0 +1,8 @@ +迁移 +*************** + +.. toctree:: + :maxdepth: 1 + + interface.md + package.md diff --git a/docs/zh_cn/migration/interface.md b/docs/zh_cn/migration/interface.md new file mode 100644 index 0000000000..a329ce38a8 --- /dev/null +++ b/docs/zh_cn/migration/interface.md @@ -0,0 +1,496 @@ +# 从 MMSegmentation 0.x 迁移 + +## 引言 + +本指南介绍了 MMSegmentation 0.x 和 MMSegmentation1.x 在行为和 API 方面的基本区别,以及这些如何都与您的迁移过程相关。 + +## 新的依赖 + +MMSegmentation 1.x 依赖于一些新的软件包,您可以准备一个新的干净环境,然后根据[安装教程](../get_started.md)重新安装。 + +或手动安装以下软件包。 + +1. [MMEngine](https://github.com/open-mmlab/mmengine):MMEngine 是 OpenMMLab 2.0 架构的核心,我们将许多与计算机视觉无关的内容从 MMCV 拆分到 MMEngine 中。 + +2. [MMCV](https://github.com/open-mmlab/mmcv):OpenMMLab 的计算机视觉包。这不是一个新的依赖,但您需要将其升级到 **2.0.0rc1** 以上的版本。 + +3. [MMClassification](https://github.com/open-mmlab/mmclassification)(可选):OpenMMLab 的图像分类工具箱和基准。这不是一个新的依赖,但您需要将其升级到 **1.0.0rc0** 以上的版本。 + +4. [MMDetection](https://github.com/open-mmlab/mmdetection)(可选): OpenMMLab 的目标检测工具箱和基准。这不是一个新的依赖,但您需要将其升级到 **3.0.0rc0** 以上的版本。 + +## 启动训练 + +OpenMMLab 2.0 的主要改进是发布了 MMEngine,它为启动训练任务的统一接口提供了通用且强大的执行器。 + +与 MMSeg 0.x 相比,MMSeg 1.x 在 `tools/train.py` 中提供的命令行参数更少 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
功能原版新版
加载预训练模型--load_from=$CHECKPOINT--cfg-options load_from=$CHECKPOINT
从特定检查点恢复训练--resume-from=$CHECKPOINT--resume=$CHECKPOINT
从最新的检查点恢复训练--auto-resume--resume='auto'
培训练期间是否不评估检查点--no-validate--cfg-options val_cfg=None val_dataloader=None val_evaluator=None
指定训练设备--gpu-id=$DEVICE_ID-
是否为不同进程设置不同的种子--diff-seed--cfg-options randomness.diff_rank_seed=True
是否为 CUDNN 后端设置确定性选项--deterministic--cfg-options randomness.deterministic=True
+ +## 配置文件 + +### 模型设置 + +`model.backend`、`model.neck`、`model.decode_head` 和 `model.loss` 字段没有更改。 + +添加 `model.data_preprocessor` 字段以配置 `DataPreProcessor`,包括: + +- `mean`(Sequence,可选):R、G、B 通道的像素平均值。默认为 None。 + +- `std`(Sequence,可选):R、G、B通道的像素标准差。默认为 None。 + +- `size`(Sequence,可选):固定的填充大小。 + +- `size_divisor`(int,可选):填充大小的除法因子。 + +- `seg_pad_val`(float,可选):分割图的填充值。默认值:255。 + +- `padding_mode`(str):填充类型。默认值:'constant'。 + + - constant:常量值填充,值由 pad_val 指定。 + +- `bgr_to_rgb`(bool):是否将图像从 BGR 转换为 RGB。默认为 False。 + +- `rgb_to_bgr`(bool):是否将图像从 RGB 转换为 BGR。默认为 False。 + +**注:** +有关详细信息,请参阅[模型文档](../advanced_guides/models.md)。 + +### 数据集设置 + +**data** 的更改: + +原版 `data` 字段被拆分为 `train_dataloader`、`val_dataloader` 和 `test_dataloader`。这允许我们以细粒度配置它们。例如,您可以在训练和测试期间指定不同的采样器和批次大小。 +`samples_per_gpu` 重命名为 `batch_size`。 +`workers_per_gpu` 重命名为 `num_workers`。 + + + + + + + + + +
原版 + +```python +data = dict( + samples_per_gpu=4, + workers_per_gpu=4, + train=dict(...), + val=dict(...), + test=dict(...), +) +``` + +
新版 + +```python +train_dataloader = dict( + batch_size=4, + num_workers=4, + dataset=dict(...), + sampler=dict(type='DefaultSampler', shuffle=True) # necessary +) + +val_dataloader = dict( + batch_size=4, + num_workers=4, + dataset=dict(...), + sampler=dict(type='DefaultSampler', shuffle=False) # necessary +) + +test_dataloader = val_dataloader +``` + +
+ +**流程**变更 + +- 原始格式转换 **`ToTensor`**、**`ImageToTensor`**、**`Collect`** 组合为 [`PackSegInputs`](mmseg.datasets.transforms.PackSegInputs) +- 我们不建议在数据集流程中执行 **`Normalize`** 和 **Pad**。请将其从流程中删除,并将其设置在 `data_preprocessor` 字段中。 +- MMSeg 1.x 中原始的 **`Resize`** 已更改为 **`RandomResize `**,输入参数 `img_scale` 重命名为 `scale`,`keep_ratio` 的默认值修改为 False。 +- 原始的 `test_pipeline` 将单尺度和多尺度测试结合在一起,在 MMSeg 1.x 中,我们将其分为 `test_pipeline` 和 `tta_pipeline`。 + +**注:** +我们将一些数据转换工作转移到数据预处理器中,如归一化,请参阅[文档](package.md)了解更多详细信息。 + +训练流程 + + + + + + + + + +
原版 + +```python +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations', reduce_zero_label=True), + dict(type='Resize', img_scale=(2560, 640), ratio_range=(0.5, 2.0)), + dict(type='RandomCrop', crop_size=crop_size, cat_max_ratio=0.75), + dict(type='RandomFlip', prob=0.5), + dict(type='PhotoMetricDistortion'), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size=crop_size, pad_val=0, seg_pad_val=255), + dict(type='DefaultFormatBundle'), + dict(type='Collect', keys=['img', 'gt_semantic_seg']), +] +``` + +
新版 + +```python +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations', reduce_zero_label=True), + dict( + type='RandomResize', + scale=(2560, 640), + ratio_range=(0.5, 2.0), + keep_ratio=True), + dict(type='RandomCrop', crop_size=crop_size, cat_max_ratio=0.75), + dict(type='RandomFlip', prob=0.5), + dict(type='PhotoMetricDistortion'), + dict(type='PackSegInputs') +] +``` + +
+ +测试流程 + + + + + + + + + +
原版 + +```python +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(2560, 640), + # img_ratios=[0.5, 0.75, 1.0, 1.25, 1.5, 1.75], + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']), + ]) +] +``` + +
新版 + +```python +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='Resize', scale=(2560, 640), keep_ratio=True), + dict(type='LoadAnnotations', reduce_zero_label=True), + dict(type='PackSegInputs') +] +img_ratios = [0.5, 0.75, 1.0, 1.25, 1.5, 1.75] +tta_pipeline = [ + dict(type='LoadImageFromFile', backend_args=None), + dict( + type='TestTimeAug', + transforms=[ + [ + dict(type='Resize', scale_factor=r, keep_ratio=True) + for r in img_ratios + ], + [ + dict(type='RandomFlip', prob=0., direction='horizontal'), + dict(type='RandomFlip', prob=1., direction='horizontal') + ], [dict(type='LoadAnnotations')], [dict(type='PackSegInputs')] + ]) +] +``` + +
+ +**`evaluation`** 中的更改: + +- **`evaluation`** 字段被拆分为 `val_evaluator` 和 `test_evaluator `。而且不再支持 `interval` 和 `save_best` 参数。 + `interval` 已移动到 `train_cfg.val_interval`,`save_best` 已移动到 `default_hooks.checkpoint.save_best`。`pre_eval` 已删除。 +- `IoU` 已更改为 `IoUMetric`。 + + + + + + + + + +
原版 + +```python +evaluation = dict(interval=2000, metric='mIoU', pre_eval=True) +``` + +
新版 + +```python +val_evaluator = dict(type='IoUMetric', iou_metrics=['mIoU']) +test_evaluator = val_evaluator +``` + +
+ +### Optimizer 和 Schedule 设置 + +**`optimizer`** 和 **`optimizer_config`** 中的更改: + +- 现在我们使用 `optim_wrapper` 字段来指定优化过程的所有配置。以及 `optimizer` 是 `optim_wrapper` 的一个子字段。 +- `paramwise_cfg` 也是 `optim_wrapper` 的一个子字段,以替代 `optimizer`。 +- `optimizer_config` 现在被删除,它的所有配置都被移动到 `optim_wrapper` 中。 +- `grad_clip` 重命名为 `clip_grad`。 + + + + + + + + + +
原版 + +```python +optimizer = dict(type='AdamW', lr=0.0001, weight_decay=0.0005) +optimizer_config = dict(grad_clip=dict(max_norm=1, norm_type=2)) +``` + +
新版 + +```python +optim_wrapper = dict( + type='OptimWrapper', + optimizer=dict(type='AdamW', lr=0.0001, weight_decay=0.0005), + clip_grad=dict(max_norm=1, norm_type=2)) +``` + +
+ +**`lr_config`** 中的更改: + +- 我们将 `lr_config` 字段删除,并使用新的 `param_scheduler` 替代。 +- 我们删除了与 `warmup` 相关的参数,因为我们使用 scheduler 组合来实现该功能。 + +新的 scheduler 组合机制非常灵活,您可以使用它来设计多种学习率/动量曲线。有关详细信息,请参见[教程](TODO)。 + + + + + + + + + +
原版 + +```python +lr_config = dict( + policy='poly', + warmup='linear', + warmup_iters=1500, + warmup_ratio=1e-6, + power=1.0, + min_lr=0.0, + by_epoch=False) +``` + +
新版 + +```python +param_scheduler = [ + dict( + type='LinearLR', start_factor=1e-6, by_epoch=False, begin=0, end=1500), + dict( + type='PolyLR', + power=1.0, + begin=1500, + end=160000, + eta_min=0.0, + by_epoch=False, + ) +] +``` + +
+ +**`runner`** 中的更改: + +原版 `runner` 字段中的大多数配置被移动到 `train_cfg`、`val_cfg` 和 `test_cfg` 中,以在训练、验证和测试中配置 loop。 + + + + + + + + + +
原版 + +```python +runner = dict(type='IterBasedRunner', max_iters=20000) +``` + +
新版 + +```python +# The `val_interval` is the original `evaluation.interval`. +train_cfg = dict(type='IterBasedTrainLoop', max_iters=20000, val_interval=2000) +val_cfg = dict(type='ValLoop') # Use the default validation loop. +test_cfg = dict(type='TestLoop') # Use the default test loop. +``` + +
+ +事实上,在 OpenMMLab 2.0 中,我们引入了 `Loop` 来控制训练、验证和测试中的行为。`Runner` 的功能也发生了变化。您可以在 [MMMEngine](https://github.com/open-mmlab/mmengine/) 的[执行器教程](https://github.com/open-mmlab/mmengine/blob/main/docs/zh_cn/design/runner.md) 中找到更多的详细信息。 + +### 运行时设置 + +**`checkpoint_config`** 和 **`log_config`** 中的更改: + +`checkpoint_config` 被移动到 `default_hooks.checkpoint` 中,`log_config` 被移动到 `default_hooks.logger` 中。 +并且我们将许多钩子设置从脚本代码移动到运行时配置的 `default_hooks` 字段中。 + +```python +default_hooks = dict( + # record the time of every iterations. + timer=dict(type='IterTimerHook'), + + # print log every 50 iterations. + logger=dict(type='LoggerHook', interval=50, log_metric_by_epoch=False), + + # enable the parameter scheduler. + param_scheduler=dict(type='ParamSchedulerHook'), + + # save checkpoint every 2000 iterations. + checkpoint=dict(type='CheckpointHook', by_epoch=False, interval=2000), + + # set sampler seed in distributed environment. + sampler_seed=dict(type='DistSamplerSeedHook'), + + # validation results visualization. + visualization=dict(type='SegVisualizationHook')) +``` + +此外,我们将原版 logger 拆分为 logger 和 visualizer。logger 用于记录信息,visualizer 用于在不同的后端显示 logger,如 terminal 和 TensorBoard。 + + + + + + + + + +
原版 + +```python +log_config = dict( + interval=100, + hooks=[ + dict(type='TextLoggerHook'), + dict(type='TensorboardLoggerHook'), + ]) +``` + +
新版 + +```python +default_hooks = dict( + ... + logger=dict(type='LoggerHook', interval=100), +) +vis_backends = [dict(type='LocalVisBackend'), + dict(type='TensorboardVisBackend')] +visualizer = dict( + type='SegLocalVisualizer', vis_backends=vis_backends, name='visualizer') +``` + +
+ +**`load_from`** 和 **`resume_from`** 中的更改: + +- 删除 `resume_from`。我们使用 `resume` 和 `load_from` 来替换它。 + - 如果 `resume=True` 且 `load_from` 为 **not None**,则从 `load_from` 中的检查点恢复训练。 + - 如果 `resume=True` 且 `load_from` 为 **None**,则尝试从工作目录中的最新检查点恢复。 + - 如果 `resume=False` 且 `load_from` 为 **not None**,则只加载检查点,而不继续训练。 + - 如果 `resume=False` 且 `load_from` 为 **None**,则不加载或恢复。 + +**`dist_params`** 中的更改:`dist_params` 字段现在是 `env_cfg` 的子字段。并且 `env_cfg` 中还有一些新的配置。 + +```python +env_cfg = dict( + # whether to enable cudnn benchmark + cudnn_benchmark=False, + + # set multi process parameters + mp_cfg=dict(mp_start_method='fork', opencv_num_threads=0), + + # set distributed parameters + dist_cfg=dict(backend='nccl'), +) +``` + +**`workflow`** 的改动:`workflow` 相关功能被删除。 + +新字段 **`visualizer`**:visualizer 是 OpenMMLab 2.0 体系结构中的新设计。我们在 runner 中使用 visualizer 实例来处理结果和日志可视化,并保存到不同的后端。更多详细信息,请参阅[可视化教程](../user_guides/visualization.md)。 + +新字段 **`default_scope`**:搜索所有注册模块的起点。MMSegmentation 中的 `default_scope` 为 `mmseg`。请参见[注册器教程](https://github.com/open-mmlab/mmengine/blob/main/docs/zh_cn/advanced_tutorials/registry.md)了解更多详情。 diff --git a/docs/zh_cn/migration/package.md b/docs/zh_cn/migration/package.md new file mode 100644 index 0000000000..d8d2245bed --- /dev/null +++ b/docs/zh_cn/migration/package.md @@ -0,0 +1,113 @@ +#包结构更改 + +本节包含您对 MMSeg 0.x 和 1.x 之间的变化感到好奇的内容。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MMSegmentation 0.xMMSegmentation 1.x
mmseg.apimmseg.api
- mmseg.core+ mmseg.engine
mmseg.datasetsmmseg.datasets
mmseg.modelsmmseg.models
- mmseg.ops+ mmseg.structure
mmseg.utilsmmseg.utils
+ mmseg.evaluation
+ mmseg.registry
+ +## 已删除的包 + +### `mmseg.core` + +在 OpenMMLab 2.0 中,`core` 包已被删除。`core` 的 `hooks` 和 `optimizers` 被移动到了 `mmseg.engine` 中,而 `core` 中的 `evaluation` 目前是 mmseg.evaluation。 + +## `mmseg.ops` + +`ops` 包包含 `encoding` 和 `wrappers`,它们被移到了 `mmseg.models.utils` 中。 + +## 增加的包 + +### `mmseg.engine` + +OpenMMLab 2.0 增加了一个新的深度学习训练基础库 MMEngine。它是所有 OpenMMLab 代码库的训练引擎。 +mmseg 的 `engine` 包是一些用于语义分割任务的定制模块,如 `SegVisualizationHook` 用于可视化分割掩膜。 + +### `mmseg.structure` + +在 OpenMMLab 2.0 中,我们为计算机视觉任务设计了数据结构,在 mmseg 中,我们在 `structure` 包中实现了 `SegDataSample`。 + +### `mmseg.evaluation` + +我们将所有评估指标都移动到了 `mmseg.evaluation` 中。 + +### `mmseg.registry` + +我们将 MMSegmentation 中所有类型模块的注册实现移动到 `mmseg.registry` 中。 + +## 修改的包 + +### `mmseg.apis` + +OpenMMLab 2.0 尝试支持计算机视觉的多任务统一接口,并发布了更强的 [`Runner`](https://github.com/open-mmlab/mmengine/blob/main/docs/zh_cn/design/runner.md),因此 MMSeg 1.x 删除了 `train.py` 和 `test.py` 中的模块,并将 `init_segmentor` 重命名为 `init_model`,将 `inference_segmentor` 重命名为 `inference_model`。 + +以下是 `mmseg.apis` 的更改: + +| 函数 | 变化 | +| :-------------------: | :--------------------------------------------- | +| `init_segmentor` | 重命名为 `init_model` | +| `inference_segmentor` | 重命名为 `inference_model` | +| `show_result_pyplot` | 基于 `SegLocalVisualizer` 实现 | +| `train_model` | 删除,使用 `runner.train` 训练。 | +| `multi_gpu_test` | 删除,使用 `runner.test` 测试。 | +| `single_gpu_test` | 删除,使用 `runner.test` 测试。 | +| `set_random_seed` | 删除,使用 `mmengine.runner.set_random_seed`。 | +| `init_random_seed` | 删除,使用 `mmengine.dist.sync_random_seed`。 | + +### `mmseg.datasets` + +OpenMMLab 2.0 将 `BaseDataset` 定义为数据集的函数和接口,MMSegmentation 1.x 也遵循此协议,并定义了从 `BaseDataset` 继承的 `BaseSegDataset`。MMCV 2.x 收集多种任务的通用数据转换,例如分类、检测、分割,因此 MMSegmentation 1.x 使用这些数据转换并将其从 mmseg.dataset 中删除。 + +| 包/模块 | 更改 | +| :-------------------: | :----------------------------------------------------------------------------------- | +| `mmseg.pipelines` | 移动到 `mmcv.transforms` 中 | +| `mmseg.sampler` | 移动到 `mmengine.dataset.sampler` 中 | +| `CustomDataset` | 重命名为 `BaseSegDataset` 并从 MMEngine 中的 `BaseDataset` 继承 | +| `DefaultFormatBundle` | 替换为 `PackSegInputs` | +| `LoadImageFromFile` | 移动到 `mmcv.transforms.LoadImageFromFile` 中 | +| `LoadAnnotations` | 移动到 `mmcv.transforms.LoadAnnotations` 中 | +| `Resize` | 移动到 `mmcv.transforms` 中并拆分为 `Resize`,`RandomResize` 和 `RandomChoiceResize` | +| `RandomFlip` | 移动到 `mmcv.transforms.RandomFlip` 中 | +| `Pad` | 移动到 `mmcv.transforms.Pad` 中 | +| `Normalize` | 移动到 `mmcv.transforms.Normalize` 中 | +| `Compose` | 移动到 `mmcv.transforms.Compose` 中 | +| `ImageToTensor` | 移动到 `mmcv.transforms.ImageToTensor` 中 | + +### `mmseg.models` + +`models` 没有太大变化,只是从以前的 `mmseg.ops` 中添加了 `encoding` 和 `wrappers` From 6ba4696648c7bef22ccfcd19eb7031925e982f82 Mon Sep 17 00:00:00 2001 From: Miao Zheng <76149310+MeowZheng@users.noreply.github.com> Date: Tue, 14 Mar 2023 23:14:41 +0800 Subject: [PATCH 11/32] [Enhancement] Support input gt seg map is not 2D (#2739) Thanks for your contribution and we appreciate it a lot. The following instructions would make your pull request more healthy and more easily get feedback. If you do not understand some items, don't worry, just make the pull request and seek help from maintainers. ## Motivation fix #2593 ## Modification 1. Only when gt seg map is 2D, extend its shape to 3D PixelData 2. If seg map is not 2D, we raised warning for users. --------- Co-authored-by: xiexinch --- mmseg/datasets/transforms/formatting.py | 15 ++++++++++++--- tests/test_datasets/test_formatting.py | 5 +++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/mmseg/datasets/transforms/formatting.py b/mmseg/datasets/transforms/formatting.py index 4391161dfd..57cda9b10e 100644 --- a/mmseg/datasets/transforms/formatting.py +++ b/mmseg/datasets/transforms/formatting.py @@ -1,4 +1,6 @@ # Copyright (c) OpenMMLab. All rights reserved. +import warnings + import numpy as np from mmcv.transforms import to_tensor from mmcv.transforms.base import BaseTransform @@ -72,9 +74,16 @@ def transform(self, results: dict) -> dict: data_sample = SegDataSample() if 'gt_seg_map' in results: - gt_sem_seg_data = dict( - data=to_tensor(results['gt_seg_map'][None, - ...].astype(np.int64))) + if results['gt_seg_map'].shape == 2: + data = to_tensor(results['gt_seg_map'][None, + ...].astype(np.int64)) + else: + warnings.warn('Please pay attention your ground truth ' + 'segmentation map, usually the segentation ' + 'map is 2D, but got ' + f'{results["gt_seg_map"].shape}') + data = to_tensor(results['gt_seg_map'].astype(np.int64)) + gt_sem_seg_data = dict(data=data) data_sample.gt_sem_seg = PixelData(**gt_sem_seg_data) if 'gt_edge_map' in results: diff --git a/tests/test_datasets/test_formatting.py b/tests/test_datasets/test_formatting.py index 4babaad269..51fd90d048 100644 --- a/tests/test_datasets/test_formatting.py +++ b/tests/test_datasets/test_formatting.py @@ -45,6 +45,11 @@ def test_transform(self): BaseDataElement) self.assertEqual(results['data_samples'].ori_shape, results['data_samples'].gt_sem_seg.shape) + results = copy.deepcopy(self.results) + results['gt_seg_map'] = np.random.rand(3, 300, 400) + results = transform(results) + self.assertEqual(results['data_samples'].ori_shape, + results['data_samples'].gt_sem_seg.shape) def test_repr(self): transform = PackSegInputs(meta_keys=self.meta_keys) From 447a398c24f76be71b8851183a347ff181e5a1c1 Mon Sep 17 00:00:00 2001 From: Junhwa Song Date: Wed, 15 Mar 2023 00:56:40 +0900 Subject: [PATCH 12/32] [Typo] Change indexes to indices (#2747) ## Modification I just replaced the `indexes` variable name with `indices` for naming consistency. --- mmseg/datasets/dataset_wrappers.py | 8 ++++---- mmseg/datasets/transforms/transforms.py | 8 ++++---- .../tools/dataset_converters/mapillary.py | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/mmseg/datasets/dataset_wrappers.py b/mmseg/datasets/dataset_wrappers.py index 933eb50d99..082c116ff4 100644 --- a/mmseg/datasets/dataset_wrappers.py +++ b/mmseg/datasets/dataset_wrappers.py @@ -106,11 +106,11 @@ def __getitem__(self, idx): continue if hasattr(transform, 'get_indices'): - indexes = transform.get_indices(self.dataset) - if not isinstance(indexes, collections.abc.Sequence): - indexes = [indexes] + indices = transform.get_indices(self.dataset) + if not isinstance(indices, collections.abc.Sequence): + indices = [indices] mix_results = [ - copy.deepcopy(self.dataset[index]) for index in indexes + copy.deepcopy(self.dataset[index]) for index in indices ] results['mix_results'] = mix_results diff --git a/mmseg/datasets/transforms/transforms.py b/mmseg/datasets/transforms/transforms.py index ef4e78dd8c..4f5316026f 100644 --- a/mmseg/datasets/transforms/transforms.py +++ b/mmseg/datasets/transforms/transforms.py @@ -1029,17 +1029,17 @@ def transform(self, results: dict) -> dict: return results def get_indices(self, dataset: MultiImageMixDataset) -> list: - """Call function to collect indexes. + """Call function to collect indices. Args: dataset (:obj:`MultiImageMixDataset`): The dataset. Returns: - list: indexes. + list: indices. """ - indexes = [random.randint(0, len(dataset)) for _ in range(3)] - return indexes + indices = [random.randint(0, len(dataset)) for _ in range(3)] + return indices @cache_randomness def generate_mosaic_center(self): diff --git a/projects/mapillary_dataset/tools/dataset_converters/mapillary.py b/projects/mapillary_dataset/tools/dataset_converters/mapillary.py index 3ccb2d67b3..a881564cab 100644 --- a/projects/mapillary_dataset/tools/dataset_converters/mapillary.py +++ b/projects/mapillary_dataset/tools/dataset_converters/mapillary.py @@ -106,7 +106,7 @@ def mapillary_colormap2label(colormap: np.ndarray) -> list: Returns: list: values are mask labels, - indexes are palette's convert results.、 + indices are palette's convert results. """ colormap2label = np.zeros(256**3, dtype=np.longlong) for i, colormap_ in enumerate(colormap): From 8c89ff3dd1409445858399cc346ff2518ddbe5df Mon Sep 17 00:00:00 2001 From: Tianlong Ai <50650583+AI-Tianlong@users.noreply.github.com> Date: Wed, 15 Mar 2023 14:44:38 +0800 Subject: [PATCH 13/32] [Datasets] Add Mapillary Vistas Datasets to MMSeg Core Package. (#2576) ## [Datasets] Add Mapillary Vistas Datasets to MMSeg Core Package . ## Motivation Add Mapillary Vistas Datasets to core package. Old PR #2484 ## Modification - Add Mapillary Vistas Datasets to core package. - Delete `tools/datasets_convert/mapillary.py` , dataset does't need converting. - Add `schedule_240k.py` config. - Add configs files. ```none deeplabv3plus_r101-d8_4xb2-240k_mapillay_v1-512x1024.py deeplabv3plus_r101-d8_4xb2-240k_mapillay_v2-512x1024.py maskformer_swin-s_4xb2-240k_mapillary_v1-512x1024.py maskformer_swin-s_4xb2-240k_mapillary_v2-512x1024.py maskformer_r101-d8_4xb2-240k_mapillary_v1-512x1024.py maskformer_r101-d8_4xb2-240k_mapillary_v2-512x1024.py pspnet_r101-d8_4xb2-240k_mapillay_v1-512x1024.py pspnet_r101-d8_4xb2-240k_mapillay_v2-512x1024.py ``` - Synchronized changes to `projects/mapillary_datasets` --------- Co-authored-by: Miao Zheng <76149310+MeowZheng@users.noreply.github.com> Co-authored-by: xiexinch --- README.md | 1 + README_zh-CN.md | 1 + .../_base_/datasets/mapillary_v1.py | 7 +- configs/_base_/datasets/mapillary_v1_65.py | 37 +++ .../_base_/datasets/mapillary_v2.py | 7 +- configs/_base_/schedules/schedule_240k.py | 25 ++ configs/deeplabv3plus/README.md | 6 + configs/deeplabv3plus/deeplabv3plus.yml | 22 ++ ...0-d8_4xb2-300k_mapillay_v1_65-1280x1280.py | 58 ++++ docs/en/user_guides/2_dataset_prepare.md | 74 +++++ mmseg/datasets/__init__.py | 4 +- .../datasets/mapillary.py | 66 +++- mmseg/utils/class_names.py | 124 +++++++- projects/mapillary_dataset/README.md | 23 +- .../configs/_base_/datasets/mapillary_v1.py | 68 ++++ .../_base_/datasets/mapillary_v1_65.py | 37 +++ .../configs/_base_/datasets/mapillary_v2.py | 68 ++++ ...lus_r101-d8_4xb2-240k_mapillay-512x1024.py | 103 ------ ..._r101-d8_4xb2-240k_mapillay_v1-512x1024.py | 17 + ..._r101-d8_4xb2-240k_mapillay_v2-512x1024.py | 16 + ..._r101-d8_4xb2-240k_mapillay_v1-512x1024.py | 16 + ..._r101-d8_4xb2-240k_mapillay_v2-512x1024.py | 16 + .../docs/en/user_guides/2_dataset_prepare.md | 300 +++++++++++++----- .../mmseg/datasets/mapillary.py | 177 +++++++++++ .../mmseg/datasets/mapillary_v1_2.py | 65 ---- .../tools/dataset_converters/mapillary.py | 245 -------------- .../images/__CRyFzoDOXn6unQ6a3DnQ.jpg | Bin 0 -> 1227776 bytes .../v1.2/__CRyFzoDOXn6unQ6a3DnQ.png | Bin 0 -> 75488 bytes .../v2.0/__CRyFzoDOXn6unQ6a3DnQ.png | Bin 0 -> 75316 bytes tests/test_datasets/test_dataset.py | 24 +- 30 files changed, 1089 insertions(+), 518 deletions(-) rename projects/mapillary_dataset/configs/_base_/datasets/mapillary_v1_2.py => configs/_base_/datasets/mapillary_v1.py (91%) create mode 100644 configs/_base_/datasets/mapillary_v1_65.py rename projects/mapillary_dataset/configs/_base_/datasets/mapillary_v2_0.py => configs/_base_/datasets/mapillary_v2.py (91%) create mode 100644 configs/_base_/schedules/schedule_240k.py create mode 100644 configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-300k_mapillay_v1_65-1280x1280.py rename projects/mapillary_dataset/mmseg/datasets/mapillary_v2_0.py => mmseg/datasets/mapillary.py (66%) create mode 100644 projects/mapillary_dataset/configs/_base_/datasets/mapillary_v1.py create mode 100644 projects/mapillary_dataset/configs/_base_/datasets/mapillary_v1_65.py create mode 100644 projects/mapillary_dataset/configs/_base_/datasets/mapillary_v2.py delete mode 100644 projects/mapillary_dataset/configs/deeplabv3plus_r101-d8_4xb2-240k_mapillay-512x1024.py create mode 100644 projects/mapillary_dataset/configs/deeplabv3plus_r101-d8_4xb2-240k_mapillay_v1-512x1024.py create mode 100644 projects/mapillary_dataset/configs/deeplabv3plus_r101-d8_4xb2-240k_mapillay_v2-512x1024.py create mode 100644 projects/mapillary_dataset/configs/pspnet_r101-d8_4xb2-240k_mapillay_v1-512x1024.py create mode 100644 projects/mapillary_dataset/configs/pspnet_r101-d8_4xb2-240k_mapillay_v2-512x1024.py create mode 100644 projects/mapillary_dataset/mmseg/datasets/mapillary.py delete mode 100644 projects/mapillary_dataset/mmseg/datasets/mapillary_v1_2.py delete mode 100644 projects/mapillary_dataset/tools/dataset_converters/mapillary.py create mode 100644 tests/data/pseudo_mapillary_dataset/images/__CRyFzoDOXn6unQ6a3DnQ.jpg create mode 100644 tests/data/pseudo_mapillary_dataset/v1.2/__CRyFzoDOXn6unQ6a3DnQ.png create mode 100644 tests/data/pseudo_mapillary_dataset/v2.0/__CRyFzoDOXn6unQ6a3DnQ.png diff --git a/README.md b/README.md index 9b4a580f39..52eda092c8 100644 --- a/README.md +++ b/README.md @@ -181,6 +181,7 @@ Results and models are available in the [model zoo](docs/en/model_zoo.md). - [x] [Potsdam](https://github.com/open-mmlab/mmsegmentation/blob/1.x/docs/en/user_guides/2_dataset_prepare.md#isprs-potsdam) - [x] [Vaihingen](https://github.com/open-mmlab/mmsegmentation/blob/1.x/docs/en/user_guides/2_dataset_prepare.md#isprs-vaihingen) - [x] [iSAID](https://github.com/open-mmlab/mmsegmentation/blob/1.x/docs/en/user_guides/2_dataset_prepare.md#isaid) +- [x] [Mapillary Vistas](https://github.com/open-mmlab/mmsegmentation/blob/1.x/docs/en/user_guides/2_dataset_prepare.md#mapillary-vistas-datasets) diff --git a/README_zh-CN.md b/README_zh-CN.md index f7c3b0b18e..167ecbdc40 100644 --- a/README_zh-CN.md +++ b/README_zh-CN.md @@ -162,6 +162,7 @@ MMSegmentation 是一个基于 PyTorch 的语义分割开源工具箱。它是 O - [x] [Potsdam](https://github.com/open-mmlab/mmsegmentation/blob/1.x/docs/zh_cn/dataset_prepare.md#isprs-potsdam) - [x] [Vaihingen](https://github.com/open-mmlab/mmsegmentation/blob/1.x/docs/zh_cn/dataset_prepare.md#isprs-vaihingen) - [x] [iSAID](https://github.com/open-mmlab/mmsegmentation/blob/1.x/docs/zh_cn/dataset_prepare.md#isaid) +- [x] [Mapillary Vistas](https://github.com/open-mmlab/mmsegmentation/blob/1.x/docs/en/user_guides/2_dataset_prepare.md#mapillary-vistas-datasets) diff --git a/projects/mapillary_dataset/configs/_base_/datasets/mapillary_v1_2.py b/configs/_base_/datasets/mapillary_v1.py similarity index 91% rename from projects/mapillary_dataset/configs/_base_/datasets/mapillary_v1_2.py rename to configs/_base_/datasets/mapillary_v1.py index a0e7d14b52..611aa4741b 100644 --- a/projects/mapillary_dataset/configs/_base_/datasets/mapillary_v1_2.py +++ b/configs/_base_/datasets/mapillary_v1.py @@ -1,5 +1,5 @@ # dataset settings -dataset_type = 'MapillaryDataset_v1_2' +dataset_type = 'MapillaryDataset_v1' data_root = 'data/mapillary/' crop_size = (512, 1024) train_pipeline = [ @@ -48,8 +48,7 @@ type=dataset_type, data_root=data_root, data_prefix=dict( - img_path='training/images', - seg_map_path='training/v1.2/labels_mask'), + img_path='training/images', seg_map_path='training/v1.2/labels'), pipeline=train_pipeline)) val_dataloader = dict( batch_size=1, @@ -61,7 +60,7 @@ data_root=data_root, data_prefix=dict( img_path='validation/images', - seg_map_path='validation/v1.2/labels_mask'), + seg_map_path='validation/v1.2/labels'), pipeline=test_pipeline)) test_dataloader = val_dataloader diff --git a/configs/_base_/datasets/mapillary_v1_65.py b/configs/_base_/datasets/mapillary_v1_65.py new file mode 100644 index 0000000000..f594f37333 --- /dev/null +++ b/configs/_base_/datasets/mapillary_v1_65.py @@ -0,0 +1,37 @@ +# dataset settings +_base_ = './mapillary_v1.py' +metainfo = dict( + classes=('Bird', 'Ground Animal', 'Curb', 'Fence', 'Guard Rail', 'Barrier', + 'Wall', 'Bike Lane', 'Crosswalk - Plain', 'Curb Cut', 'Parking', + 'Pedestrian Area', 'Rail Track', 'Road', 'Service Lane', + 'Sidewalk', 'Bridge', 'Building', 'Tunnel', 'Person', 'Bicyclist', + 'Motorcyclist', 'Other Rider', 'Lane Marking - Crosswalk', + 'Lane Marking - General', 'Mountain', 'Sand', 'Sky', 'Snow', + 'Terrain', 'Vegetation', 'Water', 'Banner', 'Bench', 'Bike Rack', + 'Billboard', 'Catch Basin', 'CCTV Camera', 'Fire Hydrant', + 'Junction Box', 'Mailbox', 'Manhole', 'Phone Booth', 'Pothole', + 'Street Light', 'Pole', 'Traffic Sign Frame', 'Utility Pole', + 'Traffic Light', 'Traffic Sign (Back)', 'Traffic Sign (Front)', + 'Trash Can', 'Bicycle', 'Boat', 'Bus', 'Car', 'Caravan', + 'Motorcycle', 'On Rails', 'Other Vehicle', 'Trailer', 'Truck', + 'Wheeled Slow', 'Car Mount', 'Ego Vehicle'), + palette=[[165, 42, 42], [0, 192, 0], [196, 196, 196], [190, 153, 153], + [180, 165, 180], [90, 120, 150], [102, 102, 156], [128, 64, 255], + [140, 140, 200], [170, 170, 170], [250, 170, 160], [96, 96, 96], + [230, 150, 140], [128, 64, 128], [110, 110, 110], [244, 35, 232], + [150, 100, 100], [70, 70, 70], [150, 120, 90], [220, 20, 60], + [255, 0, 0], [255, 0, 100], [255, 0, 200], [200, 128, 128], + [255, 255, 255], [64, 170, 64], [230, 160, 50], [70, 130, 180], + [190, 255, 255], [152, 251, 152], [107, 142, 35], [0, 170, 30], + [255, 255, 128], [250, 0, 30], [100, 140, 180], [220, 220, 220], + [220, 128, 128], [222, 40, 40], [100, 170, 30], [40, 40, 40], + [33, 33, 33], [100, 128, 160], [142, 0, 0], [70, 100, 150], + [210, 170, 100], [153, 153, 153], [128, 128, 128], [0, 0, 80], + [250, 170, 30], [192, 192, 192], [220, 220, 0], [140, 140, 20], + [119, 11, 32], [150, 0, 255], [0, 60, 100], [0, 0, 142], + [0, 0, 90], [0, 0, 230], [0, 80, 100], [128, 64, 64], [0, 0, 110], + [0, 0, 70], [0, 0, 192], [32, 32, 32], [120, 10, 10]]) + +train_dataloader = dict(dataset=dict(metainfo=metainfo)) +val_dataloader = dict(dataset=dict(metainfo=metainfo)) +test_dataloader = val_dataloader diff --git a/projects/mapillary_dataset/configs/_base_/datasets/mapillary_v2_0.py b/configs/_base_/datasets/mapillary_v2.py similarity index 91% rename from projects/mapillary_dataset/configs/_base_/datasets/mapillary_v2_0.py rename to configs/_base_/datasets/mapillary_v2.py index 7332d43fad..7cb7a958e5 100644 --- a/projects/mapillary_dataset/configs/_base_/datasets/mapillary_v2_0.py +++ b/configs/_base_/datasets/mapillary_v2.py @@ -1,5 +1,5 @@ # dataset settings -dataset_type = 'MapillaryDataset_v2_0' +dataset_type = 'MapillaryDataset_v2' data_root = 'data/mapillary/' crop_size = (512, 1024) train_pipeline = [ @@ -48,8 +48,7 @@ type=dataset_type, data_root=data_root, data_prefix=dict( - img_path='training/images', - seg_map_path='training/v2.0/labels_mask'), + img_path='training/images', seg_map_path='training/v2.0/labels'), pipeline=train_pipeline)) val_dataloader = dict( batch_size=1, @@ -61,7 +60,7 @@ data_root=data_root, data_prefix=dict( img_path='validation/images', - seg_map_path='validation/v2.0/labels_mask'), + seg_map_path='validation/v2.0/labels'), pipeline=test_pipeline)) test_dataloader = val_dataloader diff --git a/configs/_base_/schedules/schedule_240k.py b/configs/_base_/schedules/schedule_240k.py new file mode 100644 index 0000000000..feb2ce9637 --- /dev/null +++ b/configs/_base_/schedules/schedule_240k.py @@ -0,0 +1,25 @@ +# optimizer +optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0005) +optim_wrapper = dict(type='OptimWrapper', optimizer=optimizer, clip_grad=None) +# learning policy +param_scheduler = [ + dict( + type='PolyLR', + eta_min=1e-4, + power=0.9, + begin=0, + end=240000, + by_epoch=False) +] +# training schedule for 240k +train_cfg = dict( + type='IterBasedTrainLoop', max_iters=240000, val_interval=24000) +val_cfg = dict(type='ValLoop') +test_cfg = dict(type='TestLoop') +default_hooks = dict( + timer=dict(type='IterTimerHook'), + logger=dict(type='LoggerHook', interval=50, log_metric_by_epoch=False), + param_scheduler=dict(type='ParamSchedulerHook'), + checkpoint=dict(type='CheckpointHook', by_epoch=False, interval=24000), + sampler_seed=dict(type='DistSamplerSeedHook'), + visualization=dict(type='SegVisualizationHook')) diff --git a/configs/deeplabv3plus/README.md b/configs/deeplabv3plus/README.md index b3d3ce7678..f60f547391 100644 --- a/configs/deeplabv3plus/README.md +++ b/configs/deeplabv3plus/README.md @@ -124,6 +124,12 @@ Spatial pyramid pooling module or encode-decoder structure are used in deep neur | DeepLabV3+ | R-18-D8 | 896x896 | 80000 | 6.19 | 24.81 | 61.35 | 62.61 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r18-d8_4xb4-80k_isaid-896x896.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_4x4_896x896_80k_isaid/deeplabv3plus_r18-d8_4x4_896x896_80k_isaid_20220110_180526-7059991d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_4x4_896x896_80k_isaid/deeplabv3plus_r18-d8_4x4_896x896_80k_isaid_20220110_180526.log.json) | | DeepLabV3+ | R-50-D8 | 896x896 | 80000 | 21.45 | 8.42 | 67.06 | 68.02 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_isaid-896x896.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_4x4_896x896_80k_isaid/deeplabv3plus_r50-d8_4x4_896x896_80k_isaid_20220110_180526-598be439.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_4x4_896x896_80k_isaid/deeplabv3plus_r50-d8_4x4_896x896_80k_isaid_20220110_180526.log.json) | +### Mapillary Vistas v1.2 + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DeepLabV3+ | R-50-D8 | 1280x1280 | 300000 | 24.04 | 17.92 | A100 | 47.35 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-300k_mapillay_v1_65-1280x1280.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-300k_mapillay_v1_65-1280x1280/deeplabv3plus_r50-d8_4xb2-300k_mapillay_v1_65-1280x1280_20230301_110504-655f8e43.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-300k_mapillay_v1_65-1280x1280/deeplabv3plus_r50-d8_4xb2-300k_mapillay_v1_65-1280x1280_20230301_110504.json) | + Note: - `D-8`/`D-16` here corresponding to the output stride 8/16 setting for DeepLab series. diff --git a/configs/deeplabv3plus/deeplabv3plus.yml b/configs/deeplabv3plus/deeplabv3plus.yml index 755c1fd4be..949cbcecc0 100644 --- a/configs/deeplabv3plus/deeplabv3plus.yml +++ b/configs/deeplabv3plus/deeplabv3plus.yml @@ -11,6 +11,7 @@ Collections: - Potsdam - Vaihingen - iSAID + - Mapillary Vistas v1.2 Paper: URL: https://arxiv.org/abs/1802.02611 Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation @@ -848,3 +849,24 @@ Models: mIoU(ms+flip): 68.02 Config: configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_isaid-896x896.py Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_4x4_896x896_80k_isaid/deeplabv3plus_r50-d8_4x4_896x896_80k_isaid_20220110_180526-598be439.pth +- Name: deeplabv3plus_r50-d8_4xb2-300k_mapillay_v1_65-1280x1280 + In Collection: DeepLabV3+ + Metadata: + backbone: R-50-D8 + crop size: (1280,1280) + lr schd: 300000 + inference time (ms/im): + - value: 55.8 + hardware: V100 + backend: PyTorch + batch size: 1 + mode: FP32 + resolution: (1280,1280) + Training Memory (GB): 24.04 + Results: + - Task: Semantic Segmentation + Dataset: Mapillary Vistas v1.2 + Metrics: + mIoU: 47.35 + Config: configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-300k_mapillay_v1_65-1280x1280.py + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-300k_mapillay_v1_65-1280x1280/deeplabv3plus_r50-d8_4xb2-300k_mapillay_v1_65-1280x1280_20230301_110504-655f8e43.pth diff --git a/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-300k_mapillay_v1_65-1280x1280.py b/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-300k_mapillay_v1_65-1280x1280.py new file mode 100644 index 0000000000..133c45ae1d --- /dev/null +++ b/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-300k_mapillay_v1_65-1280x1280.py @@ -0,0 +1,58 @@ +_base_ = [ + '../_base_/models/deeplabv3plus_r50-d8.py', + '../_base_/datasets/mapillary_v1_65.py', + '../_base_/default_runtime.py', +] + +crop_size = (1280, 1280) +data_preprocessor = dict(size=crop_size) +model = dict( + data_preprocessor=data_preprocessor, + pretrained='open-mmlab://resnet50_v1c', + backbone=dict(depth=50), + decode_head=dict(num_classes=65), + auxiliary_head=dict(num_classes=65)) + +iters = 300000 +# optimizer +optimizer = dict( + type='AdamW', lr=0.0001, betas=(0.9, 0.999), weight_decay=0.0001) +# optimizer +optim_wrapper = dict( + type='OptimWrapper', + optimizer=optimizer, + clip_grad=dict(max_norm=0.01, norm_type=2), + paramwise_cfg=dict( + custom_keys={'backbone': dict(lr_mult=0.1, decay_mult=1.0)})) +param_scheduler = [ + dict( + type='PolyLR', + eta_min=0, + power=0.9, + begin=0, + end=iters, + by_epoch=False) +] + +# training schedule for 300k +train_cfg = dict( + type='IterBasedTrainLoop', max_iters=iters, val_interval=iters // 10) +val_cfg = dict(type='ValLoop') +test_cfg = dict(type='TestLoop') + +default_hooks = dict( + timer=dict(type='IterTimerHook'), + logger=dict(type='LoggerHook', interval=50, log_metric_by_epoch=False), + param_scheduler=dict(type='ParamSchedulerHook'), + checkpoint=dict( + type='CheckpointHook', by_epoch=False, interval=iters // 10), + sampler_seed=dict(type='DistSamplerSeedHook'), + visualization=dict(type='SegVisualizationHook')) + +train_dataloader = dict(batch_size=2) + +# Default setting for scaling LR automatically +# - `enable` means enable scaling LR automatically +# or not by default. +# - `base_batch_size` = (4 GPUs) x (2 samples per GPU). +auto_scale_lr = dict(enable=False, base_batch_size=8) diff --git a/docs/en/user_guides/2_dataset_prepare.md b/docs/en/user_guides/2_dataset_prepare.md index 5d36061d89..6c81d60f41 100644 --- a/docs/en/user_guides/2_dataset_prepare.md +++ b/docs/en/user_guides/2_dataset_prepare.md @@ -154,6 +154,29 @@ mmsegmentation │ │ │ ├── training │ │ │ ├── validation │ │ │ ├── test +│ ├── mapillary +│ │ ├── training +│ │ │ ├── images +│ │ │ ├── v1.2 +| │ │ │ ├── instances +| │ │ │ ├── labels +| │   │   │ └── panoptic +│ │ │ ├── v2.0 +| │ │ │ ├── instances +| │ │ │ ├── labels +| │ │ │ ├── panoptic +| │   │   │ └── polygons +│ │ ├── validation +│ │ │ ├── images +| │ │ ├── v1.2 +| │ │ │ ├── instances +| │ │ │ ├── labels +| │   │   │ └── panoptic +│ │ │ ├── v2.0 +| │ │ │ ├── instances +| │ │ │ ├── labels +| │ │ │ ├── panoptic +| │   │   │ └── polygons ``` ### Cityscapes @@ -551,3 +574,54 @@ The script will make directory structure below: ``` It includes 400 images for training, 400 images for validation and 400 images for testing which is the same as REFUGE 2018 dataset. + +## Mapillary Vistas Datasets + +- The dataset could be download [here](https://www.mapillary.com/dataset/vistas) after registration. + +- Mapillary Vistas Dataset use 8-bit with color-palette to store labels. No conversion operation is required. + +- Assumption you have put the dataset zip file in `mmsegmentation/data/mapillary` + +- Please run the following commands to unzip dataset. + + ```bash + cd data/mapillary + unzip An-ZjB1Zm61yAZG0ozTymz8I8NqI4x0MrYrh26dq7kPgfu8vf9ImrdaOAVOFYbJ2pNAgUnVGBmbue9lTgdBOb5BbKXIpFs0fpYWqACbrQDChAA2fdX0zS9PcHu7fY8c-FOvyBVxPNYNFQuM.zip + ``` + +- After unzip, you will get Mapillary Vistas Dataset like this structure. Semantic segmentation mask labels in `labels` folder. + + ```none + mmsegmentation + ├── mmseg + ├── tools + ├── configs + ├── data + │ ├── mapillary + │ │ ├── training + │ │ │ ├── images + │ │ │ ├── v1.2 + | │ │ │ ├── instances + | │ │ │ ├── labels + | │   │   │ └── panoptic + │ │ │ ├── v2.0 + | │ │ │ ├── instances + | │ │ │ ├── labels + | │ │ │ ├── panoptic + | │   │   │ └── polygons + │ │ ├── validation + │ │ │ ├── images + | │ │ ├── v1.2 + | │ │ │ ├── instances + | │ │ │ ├── labels + | │   │   │ └── panoptic + │ │ │ ├── v2.0 + | │ │ │ ├── instances + | │ │ │ ├── labels + | │ │ │ ├── panoptic + | │   │   │ └── polygons + ``` + +- You could set Datasets version with `MapillaryDataset_v1` and `MapillaryDataset_v2` in your configs. + View the Mapillary Vistas Datasets config file here [V1.2](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/_base_/datasets/mapillary_v1.py) and [V2.0](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/_base_/datasets/mapillary_v2.py) diff --git a/mmseg/datasets/__init__.py b/mmseg/datasets/__init__.py index 0dd19ee312..a90d53c88e 100644 --- a/mmseg/datasets/__init__.py +++ b/mmseg/datasets/__init__.py @@ -14,6 +14,7 @@ from .isprs import ISPRSDataset from .lip import LIPDataset from .loveda import LoveDADataset +from .mapillary import MapillaryDataset_v1, MapillaryDataset_v2 from .night_driving import NightDrivingDataset from .pascal_context import PascalContextDataset, PascalContextDataset59 from .potsdam import PotsdamDataset @@ -49,5 +50,6 @@ 'DecathlonDataset', 'LIPDataset', 'ResizeShortestEdge', 'BioMedicalGaussianNoise', 'BioMedicalGaussianBlur', 'BioMedicalRandomGamma', 'BioMedical3DPad', 'RandomRotFlip', - 'SynapseDataset', 'REFUGEDataset' + 'SynapseDataset', 'REFUGEDataset', 'MapillaryDataset_v1', + 'MapillaryDataset_v2' ] diff --git a/projects/mapillary_dataset/mmseg/datasets/mapillary_v2_0.py b/mmseg/datasets/mapillary.py similarity index 66% rename from projects/mapillary_dataset/mmseg/datasets/mapillary_v2_0.py rename to mmseg/datasets/mapillary.py index 9c67a8b212..6c2947338e 100644 --- a/projects/mapillary_dataset/mmseg/datasets/mapillary_v2_0.py +++ b/mmseg/datasets/mapillary.py @@ -1,10 +1,72 @@ # Copyright (c) OpenMMLab. All rights reserved. -from mmseg.datasets.basesegdataset import BaseSegDataset from mmseg.registry import DATASETS +from .basesegdataset import BaseSegDataset @DATASETS.register_module() -class MapillaryDataset_v2_0(BaseSegDataset): +class MapillaryDataset_v1(BaseSegDataset): + """Mapillary Vistas Dataset. + + Dataset paper link: + http://ieeexplore.ieee.org/document/8237796/ + + v1.2 contain 66 object classes. + (37 instance-specific) + + v2.0 contain 124 object classes. + (70 instance-specific, 46 stuff, 8 void or crowd). + + The ``img_suffix`` is fixed to '.jpg' and ``seg_map_suffix`` is + fixed to '.png' for Mapillary Vistas Dataset. + """ + METAINFO = dict( + classes=('Bird', 'Ground Animal', 'Curb', 'Fence', 'Guard Rail', + 'Barrier', 'Wall', 'Bike Lane', 'Crosswalk - Plain', + 'Curb Cut', 'Parking', 'Pedestrian Area', 'Rail Track', + 'Road', 'Service Lane', 'Sidewalk', 'Bridge', 'Building', + 'Tunnel', 'Person', 'Bicyclist', 'Motorcyclist', + 'Other Rider', 'Lane Marking - Crosswalk', + 'Lane Marking - General', 'Mountain', 'Sand', 'Sky', 'Snow', + 'Terrain', 'Vegetation', 'Water', 'Banner', 'Bench', + 'Bike Rack', 'Billboard', 'Catch Basin', 'CCTV Camera', + 'Fire Hydrant', 'Junction Box', 'Mailbox', 'Manhole', + 'Phone Booth', 'Pothole', 'Street Light', 'Pole', + 'Traffic Sign Frame', 'Utility Pole', 'Traffic Light', + 'Traffic Sign (Back)', 'Traffic Sign (Front)', 'Trash Can', + 'Bicycle', 'Boat', 'Bus', 'Car', 'Caravan', 'Motorcycle', + 'On Rails', 'Other Vehicle', 'Trailer', 'Truck', + 'Wheeled Slow', 'Car Mount', 'Ego Vehicle', 'Unlabeled'), + palette=[[165, 42, 42], [0, 192, 0], [196, 196, 196], [190, 153, 153], + [180, 165, 180], [90, 120, 150], [102, 102, 156], + [128, 64, 255], [140, 140, 200], [170, 170, 170], + [250, 170, 160], [96, 96, 96], + [230, 150, 140], [128, 64, 128], [110, 110, 110], + [244, 35, 232], [150, 100, 100], [70, 70, 70], [150, 120, 90], + [220, 20, 60], [255, 0, 0], [255, 0, 100], [255, 0, 200], + [200, 128, 128], [255, 255, 255], [64, 170, + 64], [230, 160, 50], + [70, 130, 180], [190, 255, 255], [152, 251, 152], + [107, 142, 35], [0, 170, 30], [255, 255, 128], [250, 0, 30], + [100, 140, 180], [220, 220, 220], [220, 128, 128], + [222, 40, 40], [100, 170, 30], [40, 40, 40], [33, 33, 33], + [100, 128, 160], [142, 0, 0], [70, 100, 150], [210, 170, 100], + [153, 153, 153], [128, 128, 128], [0, 0, 80], [250, 170, 30], + [192, 192, 192], [220, 220, 0], [140, 140, 20], [119, 11, 32], + [150, 0, 255], [0, 60, 100], [0, 0, 142], [0, 0, 90], + [0, 0, 230], [0, 80, 100], [128, 64, 64], [0, 0, 110], + [0, 0, 70], [0, 0, 192], [32, 32, 32], [120, 10, + 10], [0, 0, 0]]) + + def __init__(self, + img_suffix='.jpg', + seg_map_suffix='.png', + **kwargs) -> None: + super().__init__( + img_suffix=img_suffix, seg_map_suffix=seg_map_suffix, **kwargs) + + +@DATASETS.register_module() +class MapillaryDataset_v2(BaseSegDataset): """Mapillary Vistas Dataset. Dataset paper link: diff --git a/mmseg/utils/class_names.py b/mmseg/utils/class_names.py index 662199f21e..961a08520d 100644 --- a/mmseg/utils/class_names.py +++ b/mmseg/utils/class_names.py @@ -126,6 +126,126 @@ def stare_classes(): return ['background', 'vessel'] +def mapillary_v1_classes(): + """mapillary_v1 class names for external use.""" + return [ + 'Bird', 'Ground Animal', 'Curb', 'Fence', 'Guard Rail', 'Barrier', + 'Wall', 'Bike Lane', 'Crosswalk - Plain', 'Curb Cut', 'Parking', + 'Pedestrian Area', 'Rail Track', 'Road', 'Service Lane', 'Sidewalk', + 'Bridge', 'Building', 'Tunnel', 'Person', 'Bicyclist', 'Motorcyclist', + 'Other Rider', 'Lane Marking - Crosswalk', 'Lane Marking - General', + 'Mountain', 'Sand', 'Sky', 'Snow', 'Terrain', 'Vegetation', 'Water', + 'Banner', 'Bench', 'Bike Rack', 'Billboard', 'Catch Basin', + 'CCTV Camera', 'Fire Hydrant', 'Junction Box', 'Mailbox', 'Manhole', + 'Phone Booth', 'Pothole', 'Street Light', 'Pole', 'Traffic Sign Frame', + 'Utility Pole', 'Traffic Light', 'Traffic Sign (Back)', + 'Traffic Sign (Front)', 'Trash Can', 'Bicycle', 'Boat', 'Bus', 'Car', + 'Caravan', 'Motorcycle', 'On Rails', 'Other Vehicle', 'Trailer', + 'Truck', 'Wheeled Slow', 'Car Mount', 'Ego Vehicle', 'Unlabeled' + ] + + +def mapillary_v1_palette(): + """mapillary_v1_ palette for external use.""" + return [[165, 42, 42], [0, 192, 0], [196, 196, 196], [190, 153, 153], + [180, 165, 180], [90, 120, 150], [102, 102, 156], [128, 64, 255], + [140, 140, 200], [170, 170, 170], [250, 170, 160], [96, 96, 96], + [230, 150, 140], [128, 64, 128], [110, 110, 110], [244, 35, 232], + [150, 100, 100], [70, 70, 70], [150, 120, 90], [220, 20, 60], + [255, 0, 0], [255, 0, 100], [255, 0, 200], [200, 128, 128], + [255, 255, 255], [64, 170, 64], [230, 160, 50], [70, 130, 180], + [190, 255, 255], [152, 251, 152], [107, 142, 35], [0, 170, 30], + [255, 255, 128], [250, 0, 30], [100, 140, 180], [220, 220, 220], + [220, 128, 128], [222, 40, 40], [100, 170, 30], [40, 40, 40], + [33, 33, 33], [100, 128, 160], [142, 0, 0], [70, 100, 150], + [210, 170, 100], [153, 153, 153], [128, 128, 128], [0, 0, 80], + [250, 170, 30], [192, 192, 192], [220, 220, 0], [140, 140, 20], + [119, 11, 32], [150, 0, 255], [0, 60, 100], [0, 0, 142], + [0, 0, 90], [0, 0, 230], [0, 80, 100], [128, 64, 64], [0, 0, 110], + [0, 0, 70], [0, 0, 192], [32, 32, 32], [120, 10, 10], [0, 0, 0]] + + +def mapillary_v2_classes(): + """mapillary_v2 class names for external use.""" + return [ + 'Bird', 'Ground Animal', 'Ambiguous Barrier', 'Concrete Block', 'Curb', + 'Fence', 'Guard Rail', 'Barrier', 'Road Median', 'Road Side', + 'Lane Separator', 'Temporary Barrier', 'Wall', 'Bike Lane', + 'Crosswalk - Plain', 'Curb Cut', 'Driveway', 'Parking', + 'Parking Aisle', 'Pedestrian Area', 'Rail Track', 'Road', + 'Road Shoulder', 'Service Lane', 'Sidewalk', 'Traffic Island', + 'Bridge', 'Building', 'Garage', 'Tunnel', 'Person', 'Person Group', + 'Bicyclist', 'Motorcyclist', 'Other Rider', + 'Lane Marking - Dashed Line', 'Lane Marking - Straight Line', + 'Lane Marking - Zigzag Line', 'Lane Marking - Ambiguous', + 'Lane Marking - Arrow (Left)', 'Lane Marking - Arrow (Other)', + 'Lane Marking - Arrow (Right)', + 'Lane Marking - Arrow (Split Left or Straight)', + 'Lane Marking - Arrow (Split Right or Straight)', + 'Lane Marking - Arrow (Straight)', 'Lane Marking - Crosswalk', + 'Lane Marking - Give Way (Row)', 'Lane Marking - Give Way (Single)', + 'Lane Marking - Hatched (Chevron)', + 'Lane Marking - Hatched (Diagonal)', 'Lane Marking - Other', + 'Lane Marking - Stop Line', 'Lane Marking - Symbol (Bicycle)', + 'Lane Marking - Symbol (Other)', 'Lane Marking - Text', + 'Lane Marking (only) - Dashed Line', 'Lane Marking (only) - Crosswalk', + 'Lane Marking (only) - Other', 'Lane Marking (only) - Test', + 'Mountain', 'Sand', 'Sky', 'Snow', 'Terrain', 'Vegetation', 'Water', + 'Banner', 'Bench', 'Bike Rack', 'Catch Basin', 'CCTV Camera', + 'Fire Hydrant', 'Junction Box', 'Mailbox', 'Manhole', 'Parking Meter', + 'Phone Booth', 'Pothole', 'Signage - Advertisement', + 'Signage - Ambiguous', 'Signage - Back', 'Signage - Information', + 'Signage - Other', 'Signage - Store', 'Street Light', 'Pole', + 'Pole Group', 'Traffic Sign Frame', 'Utility Pole', 'Traffic Cone', + 'Traffic Light - General (Single)', 'Traffic Light - Pedestrians', + 'Traffic Light - General (Upright)', + 'Traffic Light - General (Horizontal)', 'Traffic Light - Cyclists', + 'Traffic Light - Other', 'Traffic Sign - Ambiguous', + 'Traffic Sign (Back)', 'Traffic Sign - Direction (Back)', + 'Traffic Sign - Direction (Front)', 'Traffic Sign (Front)', + 'Traffic Sign - Parking', 'Traffic Sign - Temporary (Back)', + 'Traffic Sign - Temporary (Front)', 'Trash Can', 'Bicycle', 'Boat', + 'Bus', 'Car', 'Caravan', 'Motorcycle', 'On Rails', 'Other Vehicle', + 'Trailer', 'Truck', 'Vehicle Group', 'Wheeled Slow', 'Water Valve', + 'Car Mount', 'Dynamic', 'Ego Vehicle', 'Ground', 'Static', 'Unlabeled' + ] + + +def mapillary_v2_palette(): + """mapillary_v2_ palette for external use.""" + return [[165, 42, 42], [0, 192, 0], [250, 170, 31], [250, 170, 32], + [196, 196, 196], [190, 153, 153], [180, 165, 180], [90, 120, 150], + [250, 170, 33], [250, 170, 34], [128, 128, 128], [250, 170, 35], + [102, 102, 156], [128, 64, 255], [140, 140, 200], [170, 170, 170], + [250, 170, 36], [250, 170, 160], [250, 170, 37], [96, 96, 96], + [230, 150, 140], [128, 64, 128], [110, 110, 110], [110, 110, 110], + [244, 35, 232], [128, 196, 128], [150, 100, 100], [70, 70, 70], + [150, 150, 150], [150, 120, 90], [220, 20, 60], [220, 20, 60], + [255, 0, 0], [255, 0, 100], [255, 0, 200], [255, 255, 255], + [255, 255, 255], [250, 170, 29], [250, 170, 28], [250, 170, 26], + [250, 170, 25], [250, 170, 24], [250, 170, 22], [250, 170, 21], + [250, 170, 20], [255, 255, 255], [250, 170, 19], [250, 170, 18], + [250, 170, 12], [250, 170, 11], [255, 255, 255], [255, 255, 255], + [250, 170, 16], [250, 170, 15], [250, 170, 15], [255, 255, 255], + [255, 255, 255], [255, 255, 255], [255, 255, 255], [64, 170, 64], + [230, 160, 50], [70, 130, 180], [190, 255, 255], [152, 251, 152], + [107, 142, 35], [0, 170, 30], [255, 255, 128], [250, 0, 30], + [100, 140, 180], [220, 128, 128], [222, 40, 40], [100, 170, 30], + [40, 40, 40], [33, 33, 33], [100, 128, 160], [20, 20, 255], + [142, 0, 0], [70, 100, 150], [250, 171, 30], [250, 172, 30], + [250, 173, 30], [250, 174, 30], [250, 175, 30], [250, 176, 30], + [210, 170, 100], [153, 153, 153], [153, 153, 153], [128, 128, 128], + [0, 0, 80], [210, 60, 60], [250, 170, 30], [250, 170, 30], + [250, 170, 30], [250, 170, 30], [250, 170, 30], [250, 170, 30], + [192, 192, 192], [192, 192, 192], [192, 192, 192], [220, 220, 0], + [220, 220, 0], [0, 0, 196], [192, 192, 192], [220, 220, 0], + [140, 140, 20], [119, 11, 32], [150, 0, 255], [0, 60, 100], + [0, 0, 142], [0, 0, 90], [0, 0, 230], [0, 80, 100], [128, 64, 64], + [0, 0, 110], [0, 0, 70], [0, 0, 142], [0, 0, 192], [170, 170, 170], + [32, 32, 32], [111, 74, 0], [120, 10, 10], [81, 0, 81], + [111, 111, 0], [0, 0, 0]] + + def cityscapes_palette(): """Cityscapes palette for external use.""" return [[128, 64, 128], [244, 35, 232], [70, 70, 70], [102, 102, 156], @@ -313,7 +433,9 @@ def lip_palette(): ], 'isaid': ['isaid', 'iSAID'], 'stare': ['stare', 'STARE'], - 'lip': ['LIP', 'lip'] + 'lip': ['LIP', 'lip'], + 'mapillary_v1': ['mapillary_v1'], + 'mapillary_v2': ['mapillary_v2'] } diff --git a/projects/mapillary_dataset/README.md b/projects/mapillary_dataset/README.md index 2b3099522e..cdc61d53a9 100644 --- a/projects/mapillary_dataset/README.md +++ b/projects/mapillary_dataset/README.md @@ -34,6 +34,7 @@ Preparing `Mapillary Vistas Dataset` dataset following [Mapillary Vistas Dataset | │   │   │ └── polygons │ │ ├── validation │ │ │ ├── images + │ │ │ ├── v1.2 | │ │ │ ├── instances | │ │ │ ├── labels | │ │ │ ├── labels_mask @@ -46,12 +47,12 @@ Preparing `Mapillary Vistas Dataset` dataset following [Mapillary Vistas Dataset | │   │   │ └── polygons ``` -### Training commands with `deeplabv3plus_r101-d8_4xb2-240k_mapillay-512x1024.py` +### Training commands ```bash # Dataset train commands # at `mmsegmentation` folder -bash tools/dist_train.sh projects/mapillary_dataset/configs/deeplabv3plus_r101-d8_4xb2-240k_mapillay-512x1024.py 4 +bash tools/dist_train.sh projects/mapillary_dataset/configs/deeplabv3plus_r101-d8_4xb2-240k_mapillay_v1-512x1024.py 4 ``` ## Checklist @@ -66,20 +67,20 @@ bash tools/dist_train.sh projects/mapillary_dataset/configs/deeplabv3plus_r101-d - [x] A full README -- [ ] Milestone 2: Indicates a successful model implementation. +- [x] Milestone 2: Indicates a successful model implementation. - - [ ] Training-time correctness + - [x] Training-time correctness -- [ ] Milestone 3: Good to be a part of our core package! +- [x] Milestone 3: Good to be a part of our core package! - - [ ] Type hints and docstrings + - [x] Type hints and docstrings - - [ ] Unit tests + - [x] Unit tests - - [ ] Code polishing + - [x] Code polishing - - [ ] Metafile.yml + - [x] Metafile.yml -- [ ] Move your modules into the core package following the codebase's file hierarchy structure. +- [x] Move your modules into the core package following the codebase's file hierarchy structure. -- [ ] Refactor your modules into the core package following the codebase's file hierarchy structure. +- [x] Refactor your modules into the core package following the codebase's file hierarchy structure. diff --git a/projects/mapillary_dataset/configs/_base_/datasets/mapillary_v1.py b/projects/mapillary_dataset/configs/_base_/datasets/mapillary_v1.py new file mode 100644 index 0000000000..611aa4741b --- /dev/null +++ b/projects/mapillary_dataset/configs/_base_/datasets/mapillary_v1.py @@ -0,0 +1,68 @@ +# dataset settings +dataset_type = 'MapillaryDataset_v1' +data_root = 'data/mapillary/' +crop_size = (512, 1024) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations'), + dict( + type='RandomResize', + scale=(2048, 1024), + ratio_range=(0.5, 2.0), + keep_ratio=True), + dict(type='RandomCrop', crop_size=crop_size, cat_max_ratio=0.75), + dict(type='RandomFlip', prob=0.5), + dict(type='PhotoMetricDistortion'), + dict(type='PackSegInputs') +] +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='Resize', scale=(2048, 1024), keep_ratio=True), + # add loading annotation after ``Resize`` because ground truth + # does not need to do resize data transform + dict(type='LoadAnnotations'), + dict(type='PackSegInputs') +] +img_ratios = [0.5, 0.75, 1.0, 1.25, 1.5, 1.75] +tta_pipeline = [ + dict(type='LoadImageFromFile', file_client_args=dict(backend='disk')), + dict( + type='TestTimeAug', + transforms=[ + [ + dict(type='Resize', scale_factor=r, keep_ratio=True) + for r in img_ratios + ], + [ + dict(type='RandomFlip', prob=0., direction='horizontal'), + dict(type='RandomFlip', prob=1., direction='horizontal') + ], [dict(type='LoadAnnotations')], [dict(type='PackSegInputs')] + ]) +] +train_dataloader = dict( + batch_size=2, + num_workers=4, + persistent_workers=True, + sampler=dict(type='InfiniteSampler', shuffle=True), + dataset=dict( + type=dataset_type, + data_root=data_root, + data_prefix=dict( + img_path='training/images', seg_map_path='training/v1.2/labels'), + pipeline=train_pipeline)) +val_dataloader = dict( + batch_size=1, + num_workers=4, + persistent_workers=True, + sampler=dict(type='DefaultSampler', shuffle=False), + dataset=dict( + type=dataset_type, + data_root=data_root, + data_prefix=dict( + img_path='validation/images', + seg_map_path='validation/v1.2/labels'), + pipeline=test_pipeline)) +test_dataloader = val_dataloader + +val_evaluator = dict(type='IoUMetric', iou_metrics=['mIoU']) +test_evaluator = val_evaluator diff --git a/projects/mapillary_dataset/configs/_base_/datasets/mapillary_v1_65.py b/projects/mapillary_dataset/configs/_base_/datasets/mapillary_v1_65.py new file mode 100644 index 0000000000..f594f37333 --- /dev/null +++ b/projects/mapillary_dataset/configs/_base_/datasets/mapillary_v1_65.py @@ -0,0 +1,37 @@ +# dataset settings +_base_ = './mapillary_v1.py' +metainfo = dict( + classes=('Bird', 'Ground Animal', 'Curb', 'Fence', 'Guard Rail', 'Barrier', + 'Wall', 'Bike Lane', 'Crosswalk - Plain', 'Curb Cut', 'Parking', + 'Pedestrian Area', 'Rail Track', 'Road', 'Service Lane', + 'Sidewalk', 'Bridge', 'Building', 'Tunnel', 'Person', 'Bicyclist', + 'Motorcyclist', 'Other Rider', 'Lane Marking - Crosswalk', + 'Lane Marking - General', 'Mountain', 'Sand', 'Sky', 'Snow', + 'Terrain', 'Vegetation', 'Water', 'Banner', 'Bench', 'Bike Rack', + 'Billboard', 'Catch Basin', 'CCTV Camera', 'Fire Hydrant', + 'Junction Box', 'Mailbox', 'Manhole', 'Phone Booth', 'Pothole', + 'Street Light', 'Pole', 'Traffic Sign Frame', 'Utility Pole', + 'Traffic Light', 'Traffic Sign (Back)', 'Traffic Sign (Front)', + 'Trash Can', 'Bicycle', 'Boat', 'Bus', 'Car', 'Caravan', + 'Motorcycle', 'On Rails', 'Other Vehicle', 'Trailer', 'Truck', + 'Wheeled Slow', 'Car Mount', 'Ego Vehicle'), + palette=[[165, 42, 42], [0, 192, 0], [196, 196, 196], [190, 153, 153], + [180, 165, 180], [90, 120, 150], [102, 102, 156], [128, 64, 255], + [140, 140, 200], [170, 170, 170], [250, 170, 160], [96, 96, 96], + [230, 150, 140], [128, 64, 128], [110, 110, 110], [244, 35, 232], + [150, 100, 100], [70, 70, 70], [150, 120, 90], [220, 20, 60], + [255, 0, 0], [255, 0, 100], [255, 0, 200], [200, 128, 128], + [255, 255, 255], [64, 170, 64], [230, 160, 50], [70, 130, 180], + [190, 255, 255], [152, 251, 152], [107, 142, 35], [0, 170, 30], + [255, 255, 128], [250, 0, 30], [100, 140, 180], [220, 220, 220], + [220, 128, 128], [222, 40, 40], [100, 170, 30], [40, 40, 40], + [33, 33, 33], [100, 128, 160], [142, 0, 0], [70, 100, 150], + [210, 170, 100], [153, 153, 153], [128, 128, 128], [0, 0, 80], + [250, 170, 30], [192, 192, 192], [220, 220, 0], [140, 140, 20], + [119, 11, 32], [150, 0, 255], [0, 60, 100], [0, 0, 142], + [0, 0, 90], [0, 0, 230], [0, 80, 100], [128, 64, 64], [0, 0, 110], + [0, 0, 70], [0, 0, 192], [32, 32, 32], [120, 10, 10]]) + +train_dataloader = dict(dataset=dict(metainfo=metainfo)) +val_dataloader = dict(dataset=dict(metainfo=metainfo)) +test_dataloader = val_dataloader diff --git a/projects/mapillary_dataset/configs/_base_/datasets/mapillary_v2.py b/projects/mapillary_dataset/configs/_base_/datasets/mapillary_v2.py new file mode 100644 index 0000000000..7cb7a958e5 --- /dev/null +++ b/projects/mapillary_dataset/configs/_base_/datasets/mapillary_v2.py @@ -0,0 +1,68 @@ +# dataset settings +dataset_type = 'MapillaryDataset_v2' +data_root = 'data/mapillary/' +crop_size = (512, 1024) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations'), + dict( + type='RandomResize', + scale=(2048, 1024), + ratio_range=(0.5, 2.0), + keep_ratio=True), + dict(type='RandomCrop', crop_size=crop_size, cat_max_ratio=0.75), + dict(type='RandomFlip', prob=0.5), + dict(type='PhotoMetricDistortion'), + dict(type='PackSegInputs') +] +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='Resize', scale=(2048, 1024), keep_ratio=True), + # add loading annotation after ``Resize`` because ground truth + # does not need to do resize data transform + dict(type='LoadAnnotations'), + dict(type='PackSegInputs') +] +img_ratios = [0.5, 0.75, 1.0, 1.25, 1.5, 1.75] +tta_pipeline = [ + dict(type='LoadImageFromFile', file_client_args=dict(backend='disk')), + dict( + type='TestTimeAug', + transforms=[ + [ + dict(type='Resize', scale_factor=r, keep_ratio=True) + for r in img_ratios + ], + [ + dict(type='RandomFlip', prob=0., direction='horizontal'), + dict(type='RandomFlip', prob=1., direction='horizontal') + ], [dict(type='LoadAnnotations')], [dict(type='PackSegInputs')] + ]) +] +train_dataloader = dict( + batch_size=2, + num_workers=4, + persistent_workers=True, + sampler=dict(type='InfiniteSampler', shuffle=True), + dataset=dict( + type=dataset_type, + data_root=data_root, + data_prefix=dict( + img_path='training/images', seg_map_path='training/v2.0/labels'), + pipeline=train_pipeline)) +val_dataloader = dict( + batch_size=1, + num_workers=4, + persistent_workers=True, + sampler=dict(type='DefaultSampler', shuffle=False), + dataset=dict( + type=dataset_type, + data_root=data_root, + data_prefix=dict( + img_path='validation/images', + seg_map_path='validation/v2.0/labels'), + pipeline=test_pipeline)) +test_dataloader = val_dataloader + +val_evaluator = dict(type='IoUMetric', iou_metrics=['mIoU']) +test_evaluator = val_evaluator diff --git a/projects/mapillary_dataset/configs/deeplabv3plus_r101-d8_4xb2-240k_mapillay-512x1024.py b/projects/mapillary_dataset/configs/deeplabv3plus_r101-d8_4xb2-240k_mapillay-512x1024.py deleted file mode 100644 index 6f7ad65ed8..0000000000 --- a/projects/mapillary_dataset/configs/deeplabv3plus_r101-d8_4xb2-240k_mapillay-512x1024.py +++ /dev/null @@ -1,103 +0,0 @@ -_base_ = ['./_base_/datasets/mapillary_v1_2.py'] # v 1.2 labels -# _base_ = ['./_base_/datasets/mapillary_v2_0.py'] # v2.0 labels -custom_imports = dict(imports=[ - 'projects.mapillary_dataset.mmseg.datasets.mapillary_v1_2', - 'projects.mapillary_dataset.mmseg.datasets.mapillary_v2_0', -]) - -norm_cfg = dict(type='SyncBN', requires_grad=True) -data_preprocessor = dict( - type='SegDataPreProcessor', - mean=[123.675, 116.28, 103.53], - std=[58.395, 57.12, 57.375], - bgr_to_rgb=True, - pad_val=0, - seg_pad_val=255, - size=(512, 1024)) - -model = dict( - type='EncoderDecoder', - data_preprocessor=data_preprocessor, - pretrained=None, - backbone=dict( - type='ResNet', - depth=101, - num_stages=4, - out_indices=(0, 1, 2, 3), - dilations=(1, 1, 2, 4), - strides=(1, 2, 1, 1), - norm_cfg=norm_cfg, - norm_eval=False, - style='pytorch', - contract_dilation=True), - decode_head=dict( - type='DepthwiseSeparableASPPHead', - in_channels=2048, - in_index=3, - channels=512, - dilations=(1, 12, 24, 36), - c1_in_channels=256, - c1_channels=48, - dropout_ratio=0.1, - num_classes=66, # v1.2 - # num_classes=124, # v2.0 - norm_cfg=norm_cfg, - align_corners=False, - loss_decode=dict( - type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), - auxiliary_head=dict( - type='FCNHead', - in_channels=1024, - in_index=2, - channels=256, - num_convs=1, - concat_input=False, - dropout_ratio=0.1, - num_classes=66, # v1.2 - # num_classes=124, # v2.0 - norm_cfg=norm_cfg, - align_corners=False, - loss_decode=dict( - type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4)), - train_cfg=dict(), - test_cfg=dict(mode='whole')) -default_scope = 'mmseg' -env_cfg = dict( - cudnn_benchmark=True, - mp_cfg=dict(mp_start_method='fork', opencv_num_threads=0), - dist_cfg=dict(backend='nccl')) -vis_backends = [dict(type='LocalVisBackend')] -visualizer = dict( - type='SegLocalVisualizer', - vis_backends=[dict(type='LocalVisBackend')], - name='visualizer') -log_processor = dict(by_epoch=False) -log_level = 'INFO' -load_from = None -resume = False -tta_model = dict(type='SegTTAModel') -optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) -optim_wrapper = dict( - type='OptimWrapper', - optimizer=dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001), - clip_grad=None) -param_scheduler = [ - dict( - type='PolyLR', - eta_min=0.0001, - power=0.9, - begin=0, - end=240000, - by_epoch=False) -] -train_cfg = dict( - type='IterBasedTrainLoop', max_iters=240000, val_interval=24000) -val_cfg = dict(type='ValLoop') -test_cfg = dict(type='TestLoop') -default_hooks = dict( - timer=dict(type='IterTimerHook'), - logger=dict(type='LoggerHook', interval=50, log_metric_by_epoch=False), - param_scheduler=dict(type='ParamSchedulerHook'), - checkpoint=dict(type='CheckpointHook', by_epoch=False, interval=24000), - sampler_seed=dict(type='DistSamplerSeedHook'), - visualization=dict(type='SegVisualizationHook')) diff --git a/projects/mapillary_dataset/configs/deeplabv3plus_r101-d8_4xb2-240k_mapillay_v1-512x1024.py b/projects/mapillary_dataset/configs/deeplabv3plus_r101-d8_4xb2-240k_mapillay_v1-512x1024.py new file mode 100644 index 0000000000..b559e0d6aa --- /dev/null +++ b/projects/mapillary_dataset/configs/deeplabv3plus_r101-d8_4xb2-240k_mapillay_v1-512x1024.py @@ -0,0 +1,17 @@ +_base_ = [ + '../../../configs/_base_/models/deeplabv3plus_r50-d8.py', + './_base_/datasets/mapillary_v1.py', + '../../../configs/_base_/default_runtime.py', + '../../../configs/_base_/schedules/schedule_240k.py' +] +custom_imports = dict( + imports=['projects.mapillary_dataset.mmseg.datasets.mapillary']) + +crop_size = (512, 1024) +data_preprocessor = dict(size=crop_size) +model = dict( + data_preprocessor=data_preprocessor, + pretrained='open-mmlab://resnet101_v1c', + backbone=dict(depth=101), + decode_head=dict(num_classes=66), + auxiliary_head=dict(num_classes=66)) diff --git a/projects/mapillary_dataset/configs/deeplabv3plus_r101-d8_4xb2-240k_mapillay_v2-512x1024.py b/projects/mapillary_dataset/configs/deeplabv3plus_r101-d8_4xb2-240k_mapillay_v2-512x1024.py new file mode 100644 index 0000000000..cfe31a2c12 --- /dev/null +++ b/projects/mapillary_dataset/configs/deeplabv3plus_r101-d8_4xb2-240k_mapillay_v2-512x1024.py @@ -0,0 +1,16 @@ +_base_ = [ + '../../../configs/_base_/models/deeplabv3plus_r50-d8.py', + './_base_/datasets/mapillary_v2.py', + '../../../configs/_base_/default_runtime.py', + '../../../configs/_base_/schedules/schedule_240k.py' +] +custom_imports = dict( + imports=['projects.mapillary_dataset.mmseg.datasets.mapillary']) +crop_size = (512, 1024) +data_preprocessor = dict(size=crop_size) +model = dict( + data_preprocessor=data_preprocessor, + pretrained='open-mmlab://resnet101_v1c', + backbone=dict(depth=101), + decode_head=dict(num_classes=124), + auxiliary_head=dict(num_classes=124)) diff --git a/projects/mapillary_dataset/configs/pspnet_r101-d8_4xb2-240k_mapillay_v1-512x1024.py b/projects/mapillary_dataset/configs/pspnet_r101-d8_4xb2-240k_mapillay_v1-512x1024.py new file mode 100644 index 0000000000..1ca2b57f73 --- /dev/null +++ b/projects/mapillary_dataset/configs/pspnet_r101-d8_4xb2-240k_mapillay_v1-512x1024.py @@ -0,0 +1,16 @@ +_base_ = [ + '../../../configs/_base_/models/pspnet_r50-d8.py', + './_base_/datasets/mapillary_v1.py', + '../../../configs/_base_/default_runtime.py', + '../../../configs/_base_/schedules/schedule_240k.py' +] +custom_imports = dict( + imports=['projects.mapillary_dataset.mmseg.datasets.mapillary']) +crop_size = (512, 1024) +data_preprocessor = dict(size=crop_size) +model = dict( + data_preprocessor=data_preprocessor, + pretrained='open-mmlab://resnet101_v1c', + backbone=dict(depth=101), + decode_head=dict(num_classes=66), + auxiliary_head=dict(num_classes=66)) diff --git a/projects/mapillary_dataset/configs/pspnet_r101-d8_4xb2-240k_mapillay_v2-512x1024.py b/projects/mapillary_dataset/configs/pspnet_r101-d8_4xb2-240k_mapillay_v2-512x1024.py new file mode 100644 index 0000000000..c04746a3dc --- /dev/null +++ b/projects/mapillary_dataset/configs/pspnet_r101-d8_4xb2-240k_mapillay_v2-512x1024.py @@ -0,0 +1,16 @@ +_base_ = [ + '../../../configs/_base_/models/pspnet_r50-d8.py', + './_base_/datasets/mapillary_v2.py', + '../../../configs/_base_/default_runtime.py', + '../../../configs/_base_/schedules/schedule_240k.py' +] +custom_imports = dict( + imports=['projects.mapillary_dataset.mmseg.datasets.mapillary']) +crop_size = (512, 1024) +data_preprocessor = dict(size=crop_size) +model = dict( + data_preprocessor=data_preprocessor, + pretrained='open-mmlab://resnet101_v1c', + backbone=dict(depth=101), + decode_head=dict(num_classes=124), + auxiliary_head=dict(num_classes=124)) diff --git a/projects/mapillary_dataset/docs/en/user_guides/2_dataset_prepare.md b/projects/mapillary_dataset/docs/en/user_guides/2_dataset_prepare.md index 405e533156..fa07454330 100644 --- a/projects/mapillary_dataset/docs/en/user_guides/2_dataset_prepare.md +++ b/projects/mapillary_dataset/docs/en/user_guides/2_dataset_prepare.md @@ -1,87 +1,20 @@ -## Prepare datasets +## Mapillary Vistas Datasets -It is recommended to symlink the dataset root to `$MMSEGMENTATION/data`. -If your folder structure is different, you may need to change the corresponding paths in config files. +- The dataset could be download [here](https://www.mapillary.com/dataset/vistas) after registration. -```none -mmsegmentation -├── mmseg -├── tools -├── configs -├── data -│ ├── mapillary -│ │ ├── training -│ │ │ ├── images -│ │ │ ├── v1.2 -| │ │ │ ├── instances -| │ │ │ ├── labels -| │ │ │ ├── labels_mask -| │   │   │ └── panoptic -│ │ │ ├── v2.0 -| │ │ │ ├── instances -| │ │ │ ├── labels -| │ │ │ ├── labels_mask -| │ │ │ ├── panoptic -| │   │   │ └── polygons -│ │ ├── validation -│ │ │ ├── images -| │ │ │ ├── instances -| │ │ │ ├── labels -| │ │ │ ├── labels_mask -| │   │   │ └── panoptic -│ │ │ ├── v2.0 -| │ │ │ ├── instances -| │ │ │ ├── labels -| │ │ │ ├── labels_mask -| │ │ │ ├── panoptic -| │   │   │ └── polygons -``` +- Mapillary Vistas Dataset use 8-bit with color-palette to store labels. No conversion operation is required. -## Mapillary Vistas Datasets +- Assumption you have put the dataset zip file in `mmsegmentation/data/mapillary` -- The dataset could be download [here](https://www.mapillary.com/dataset/vistas) after registration. -- Assumption you have put the dataset zip file in `mmsegmentation/data` - Please run the following commands to unzip dataset. + ```bash - cd data - mkdir mapillary - unzip -d mapillary An-ZjB1Zm61yAZG0ozTymz8I8NqI4x0MrYrh26dq7kPgfu8vf9ImrdaOAVOFYbJ2pNAgUnVGBmbue9lTgdBOb5BbKXIpFs0fpYWqACbrQDChAA2fdX0zS9PcHu7fY8c-FOvyBVxPNYNFQuM.zip - ``` -- After unzip, you will get Mapillary Vistas Dataset like this structure. - ```none - ├── data - │ ├── mapillary - │ │ ├── training - │ │ │ ├── images - │ │ │ ├── v1.2 - | │ │ │ ├── instances - | │ │ │ ├── labels - | │   │   │ └── panoptic - │ │ │ ├── v2.0 - | │ │ │ ├── instances - | │ │ │ ├── labels - | │ │ │ ├── panoptic - | │   │   │ └── polygons - │ │ ├── validation - │ │ │ ├── images - | │ │ │ ├── instances - | │ │ │ ├── labels - | │   │   │ └── panoptic - │ │ │ ├── v2.0 - | │ │ │ ├── instances - | │ │ │ ├── labels - | │ │ │ ├── panoptic - | │   │   │ └── polygons - ``` -- run following commands to convert RGB labels to mask labels - ```bash - # --nproc optional, default 1, whether use multi-progress - # --version optional, 'v1.2', 'v2.0','all', default 'all', choose convert which version labels - # run this command at 'mmsegmentation/projects/Mapillary_dataset' folder - cd mmsegmentation/projects/mapillary_dataset - python tools/dataset_converters/mapillary.py ../../data/mapillary --nproc 8 --version all + cd data/mapillary + unzip An-ZjB1Zm61yAZG0ozTymz8I8NqI4x0MrYrh26dq7kPgfu8vf9ImrdaOAVOFYbJ2pNAgUnVGBmbue9lTgdBOb5BbKXIpFs0fpYWqACbrQDChAA2fdX0zS9PcHu7fY8c-FOvyBVxPNYNFQuM.zip ``` - After then, you will get this structure + +- After unzip, you will get Mapillary Vistas Dataset like this structure. Semantic segmentation mask labels in `labels` folder. + ```none mmsegmentation ├── mmseg @@ -94,24 +27,229 @@ mmsegmentation │ │ │ ├── v1.2 | │ │ │ ├── instances | │ │ │ ├── labels - | │ │ │ ├── labels_mask | │   │   │ └── panoptic │ │ │ ├── v2.0 | │ │ │ ├── instances | │ │ │ ├── labels - | │ │ │ ├── labels_mask | │ │ │ ├── panoptic | │   │   │ └── polygons │ │ ├── validation │ │ │ ├── images + | │ │ ├── v1.2 | │ │ │ ├── instances | │ │ │ ├── labels - | │ │ │ ├── labels_mask | │   │   │ └── panoptic │ │ │ ├── v2.0 | │ │ │ ├── instances | │ │ │ ├── labels - | │ │ │ ├── labels_mask | │ │ │ ├── panoptic | │   │   │ └── polygons ``` + +- You could set Datasets version with `MapillaryDataset_v1` and `MapillaryDataset_v2` in your configs. + View the Mapillary Vistas Datasets config file here [V1.2](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/_base_/datasets/mapillary_v1.py) and [V2.0](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/_base_/datasets/mapillary_v2.py) + +- **View datasets labels index and palette** + +- **Mapillary Vistas Datasets labels information** + **v1.2 information** + + ```none + There are 66 labels classes in v1.2 + 0--Bird--[165, 42, 42], + 1--Ground Animal--[0, 192, 0], + 2--Curb--[196, 196, 196], + 3--Fence--[190, 153, 153], + 4--Guard Rail--[180, 165, 180], + 5--Barrier--[90, 120, 150], + 6--Wall--[102, 102, 156], + 7--Bike Lane--[128, 64, 255], + 8--Crosswalk - Plain--[140, 140, 200], + 9--Curb Cut--[170, 170, 170], + 10--Parking--[250, 170, 160], + 11--Pedestrian Area--[96, 96, 96], + 12--Rail Track--[230, 150, 140], + 13--Road--[128, 64, 128], + 14--Service Lane--[110, 110, 110], + 15--Sidewalk--[244, 35, 232], + 16--Bridge--[150, 100, 100], + 17--Building--[70, 70, 70], + 18--Tunnel--[150, 120, 90], + 19--Person--[220, 20, 60], + 20--Bicyclist--[255, 0, 0], + 21--Motorcyclist--[255, 0, 100], + 22--Other Rider--[255, 0, 200], + 23--Lane Marking - Crosswalk--[200, 128, 128], + 24--Lane Marking - General--[255, 255, 255], + 25--Mountain--[64, 170, 64], + 26--Sand--[230, 160, 50], + 27--Sky--[70, 130, 180], + 28--Snow--[190, 255, 255], + 29--Terrain--[152, 251, 152], + 30--Vegetation--[107, 142, 35], + 31--Water--[0, 170, 30], + 32--Banner--[255, 255, 128], + 33--Bench--[250, 0, 30], + 34--Bike Rack--[100, 140, 180], + 35--Billboard--[220, 220, 220], + 36--Catch Basin--[220, 128, 128], + 37--CCTV Camera--[222, 40, 40], + 38--Fire Hydrant--[100, 170, 30], + 39--Junction Box--[40, 40, 40], + 40--Mailbox--[33, 33, 33], + 41--Manhole--[100, 128, 160], + 42--Phone Booth--[142, 0, 0], + 43--Pothole--[70, 100, 150], + 44--Street Light--[210, 170, 100], + 45--Pole--[153, 153, 153], + 46--Traffic Sign Frame--[128, 128, 128], + 47--Utility Pole--[0, 0, 80], + 48--Traffic Light--[250, 170, 30], + 49--Traffic Sign (Back)--[192, 192, 192], + 50--Traffic Sign (Front)--[220, 220, 0], + 51--Trash Can--[140, 140, 20], + 52--Bicycle--[119, 11, 32], + 53--Boat--[150, 0, 255], + 54--Bus--[0, 60, 100], + 55--Car--[0, 0, 142], + 56--Caravan--[0, 0, 90], + 57--Motorcycle--[0, 0, 230], + 58--On Rails--[0, 80, 100], + 59--Other Vehicle--[128, 64, 64], + 60--Trailer--[0, 0, 110], + 61--Truck--[0, 0, 70], + 62--Wheeled Slow--[0, 0, 192], + 63--Car Mount--[32, 32, 32], + 64--Ego Vehicle--[120, 10, 10], + 65--Unlabeled--[0, 0, 0] + ``` + + **v2.0 information** + + ```none + There are 124 labels classes in v2.0 + 0--Bird--[165, 42, 42], + 1--Ground Animal--[0, 192, 0], + 2--Ambiguous Barrier--[250, 170, 31], + 3--Concrete Block--[250, 170, 32], + 4--Curb--[196, 196, 196], + 5--Fence--[190, 153, 153], + 6--Guard Rail--[180, 165, 180], + 7--Barrier--[90, 120, 150], + 8--Road Median--[250, 170, 33], + 9--Road Side--[250, 170, 34], + 10--Lane Separator--[128, 128, 128], + 11--Temporary Barrier--[250, 170, 35], + 12--Wall--[102, 102, 156], + 13--Bike Lane--[128, 64, 255], + 14--Crosswalk - Plain--[140, 140, 200], + 15--Curb Cut--[170, 170, 170], + 16--Driveway--[250, 170, 36], + 17--Parking--[250, 170, 160], + 18--Parking Aisle--[250, 170, 37], + 19--Pedestrian Area--[96, 96, 96], + 20--Rail Track--[230, 150, 140], + 21--Road--[128, 64, 128], + 22--Road Shoulder--[110, 110, 110], + 23--Service Lane--[110, 110, 110], + 24--Sidewalk--[244, 35, 232], + 25--Traffic Island--[128, 196, 128], + 26--Bridge--[150, 100, 100], + 27--Building--[70, 70, 70], + 28--Garage--[150, 150, 150], + 29--Tunnel--[150, 120, 90], + 30--Person--[220, 20, 60], + 31--Person Group--[220, 20, 60], + 32--Bicyclist--[255, 0, 0], + 33--Motorcyclist--[255, 0, 100], + 34--Other Rider--[255, 0, 200], + 35--Lane Marking - Dashed Line--[255, 255, 255], + 36--Lane Marking - Straight Line--[255, 255, 255], + 37--Lane Marking - Zigzag Line--[250, 170, 29], + 38--Lane Marking - Ambiguous--[250, 170, 28], + 39--Lane Marking - Arrow (Left)--[250, 170, 26], + 40--Lane Marking - Arrow (Other)--[250, 170, 25], + 41--Lane Marking - Arrow (Right)--[250, 170, 24], + 42--Lane Marking - Arrow (Split Left or Straight)--[250, 170, 22], + 43--Lane Marking - Arrow (Split Right or Straight)--[250, 170, 21], + 44--Lane Marking - Arrow (Straight)--[250, 170, 20], + 45--Lane Marking - Crosswalk--[255, 255, 255], + 46--Lane Marking - Give Way (Row)--[250, 170, 19], + 47--Lane Marking - Give Way (Single)--[250, 170, 18], + 48--Lane Marking - Hatched (Chevron)--[250, 170, 12], + 49--Lane Marking - Hatched (Diagonal)--[250, 170, 11], + 50--Lane Marking - Other--[255, 255, 255], + 51--Lane Marking - Stop Line--[255, 255, 255], + 52--Lane Marking - Symbol (Bicycle)--[250, 170, 16], + 53--Lane Marking - Symbol (Other)--[250, 170, 15], + 54--Lane Marking - Text--[250, 170, 15], + 55--Lane Marking (only) - Dashed Line--[255, 255, 255], + 56--Lane Marking (only) - Crosswalk--[255, 255, 255], + 57--Lane Marking (only) - Other--[255, 255, 255], + 58--Lane Marking (only) - Test--[255, 255, 255], + 59--Mountain--[64, 170, 64], + 60--Sand--[230, 160, 50], + 61--Sky--[70, 130, 180], + 62--Snow--[190, 255, 255], + 63--Terrain--[152, 251, 152], + 64--Vegetation--[107, 142, 35], + 65--Water--[0, 170, 30], + 66--Banner--[255, 255, 128], + 67--Bench--[250, 0, 30], + 68--Bike Rack--[100, 140, 180], + 69--Catch Basin--[220, 128, 128], + 70--CCTV Camera--[222, 40, 40], + 71--Fire Hydrant--[100, 170, 30], + 72--Junction Box--[40, 40, 40], + 73--Mailbox--[33, 33, 33], + 74--Manhole--[100, 128, 160], + 75--Parking Meter--[20, 20, 255], + 76--Phone Booth--[142, 0, 0], + 77--Pothole--[70, 100, 150], + 78--Signage - Advertisement--[250, 171, 30], + 79--Signage - Ambiguous--[250, 172, 30], + 80--Signage - Back--[250, 173, 30], + 81--Signage - Information--[250, 174, 30], + 82--Signage - Other--[250, 175, 30], + 83--Signage - Store--[250, 176, 30], + 84--Street Light--[210, 170, 100], + 85--Pole--[153, 153, 153], + 86--Pole Group--[153, 153, 153], + 87--Traffic Sign Frame--[128, 128, 128], + 88--Utility Pole--[0, 0, 80], + 89--Traffic Cone--[210, 60, 60], + 90--Traffic Light - General (Single)--[250, 170, 30], + 91--Traffic Light - Pedestrians--[250, 170, 30], + 92--Traffic Light - General (Upright)--[250, 170, 30], + 93--Traffic Light - General (Horizontal)--[250, 170, 30], + 94--Traffic Light - Cyclists--[250, 170, 30], + 95--Traffic Light - Other--[250, 170, 30], + 96--Traffic Sign - Ambiguous--[192, 192, 192], + 97--Traffic Sign (Back)--[192, 192, 192], + 98--Traffic Sign - Direction (Back)--[192, 192, 192], + 99--Traffic Sign - Direction (Front)--[220, 220, 0], + 100--Traffic Sign (Front)--[220, 220, 0], + 101--Traffic Sign - Parking--[0, 0, 196], + 102--Traffic Sign - Temporary (Back)--[192, 192, 192], + 103--Traffic Sign - Temporary (Front)--[220, 220, 0], + 104--Trash Can--[140, 140, 20], + 105--Bicycle--[119, 11, 32], + 106--Boat--[150, 0, 255], + 107--Bus--[0, 60, 100], + 108--Car--[0, 0, 142], + 109--Caravan--[0, 0, 90], + 110--Motorcycle--[0, 0, 230], + 111--On Rails--[0, 80, 100], + 112--Other Vehicle--[128, 64, 64], + 113--Trailer--[0, 0, 110], + 114--Truck--[0, 0, 70], + 115--Vehicle Group--[0, 0, 142], + 116--Wheeled Slow--[0, 0, 192], + 117--Water Valve--[170, 170, 170], + 118--Car Mount--[32, 32, 32], + 119--Dynamic--[111, 74, 0], + 120--Ego Vehicle--[120, 10, 10], + 121--Ground--[81, 0, 81], + 122--Static--[111, 111, 0], + 123--Unlabeled--[0, 0, 0] + ``` diff --git a/projects/mapillary_dataset/mmseg/datasets/mapillary.py b/projects/mapillary_dataset/mmseg/datasets/mapillary.py new file mode 100644 index 0000000000..f49bd54451 --- /dev/null +++ b/projects/mapillary_dataset/mmseg/datasets/mapillary.py @@ -0,0 +1,177 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from mmseg.datasets.basesegdataset import BaseSegDataset + +# from mmseg.registry import DATASETS + + +# @DATASETS.register_module() +class MapillaryDataset_v1(BaseSegDataset): + """Mapillary Vistas Dataset. + + Dataset paper link: + http://ieeexplore.ieee.org/document/8237796/ + + v1.2 contain 66 object classes. + (37 instance-specific) + + v2.0 contain 124 object classes. + (70 instance-specific, 46 stuff, 8 void or crowd). + + The ``img_suffix`` is fixed to '.jpg' and ``seg_map_suffix`` is + fixed to '.png' for Mapillary Vistas Dataset. + """ + METAINFO = dict( + classes=('Bird', 'Ground Animal', 'Curb', 'Fence', 'Guard Rail', + 'Barrier', 'Wall', 'Bike Lane', 'Crosswalk - Plain', + 'Curb Cut', 'Parking', 'Pedestrian Area', 'Rail Track', + 'Road', 'Service Lane', 'Sidewalk', 'Bridge', 'Building', + 'Tunnel', 'Person', 'Bicyclist', 'Motorcyclist', + 'Other Rider', 'Lane Marking - Crosswalk', + 'Lane Marking - General', 'Mountain', 'Sand', 'Sky', 'Snow', + 'Terrain', 'Vegetation', 'Water', 'Banner', 'Bench', + 'Bike Rack', 'Billboard', 'Catch Basin', 'CCTV Camera', + 'Fire Hydrant', 'Junction Box', 'Mailbox', 'Manhole', + 'Phone Booth', 'Pothole', 'Street Light', 'Pole', + 'Traffic Sign Frame', 'Utility Pole', 'Traffic Light', + 'Traffic Sign (Back)', 'Traffic Sign (Front)', 'Trash Can', + 'Bicycle', 'Boat', 'Bus', 'Car', 'Caravan', 'Motorcycle', + 'On Rails', 'Other Vehicle', 'Trailer', 'Truck', + 'Wheeled Slow', 'Car Mount', 'Ego Vehicle', 'Unlabeled'), + palette=[[165, 42, 42], [0, 192, 0], [196, 196, 196], [190, 153, 153], + [180, 165, 180], [90, 120, 150], [102, 102, 156], + [128, 64, 255], [140, 140, 200], [170, 170, 170], + [250, 170, 160], [96, 96, 96], + [230, 150, 140], [128, 64, 128], [110, 110, 110], + [244, 35, 232], [150, 100, 100], [70, 70, 70], [150, 120, 90], + [220, 20, 60], [255, 0, 0], [255, 0, 100], [255, 0, 200], + [200, 128, 128], [255, 255, 255], [64, 170, + 64], [230, 160, 50], + [70, 130, 180], [190, 255, 255], [152, 251, 152], + [107, 142, 35], [0, 170, 30], [255, 255, 128], [250, 0, 30], + [100, 140, 180], [220, 220, 220], [220, 128, 128], + [222, 40, 40], [100, 170, 30], [40, 40, 40], [33, 33, 33], + [100, 128, 160], [142, 0, 0], [70, 100, 150], [210, 170, 100], + [153, 153, 153], [128, 128, 128], [0, 0, 80], [250, 170, 30], + [192, 192, 192], [220, 220, 0], [140, 140, 20], [119, 11, 32], + [150, 0, 255], [0, 60, 100], [0, 0, 142], [0, 0, 90], + [0, 0, 230], [0, 80, 100], [128, 64, 64], [0, 0, 110], + [0, 0, 70], [0, 0, 192], [32, 32, 32], [120, 10, + 10], [0, 0, 0]]) + + def __init__(self, + img_suffix='.jpg', + seg_map_suffix='.png', + **kwargs) -> None: + super().__init__( + img_suffix=img_suffix, seg_map_suffix=seg_map_suffix, **kwargs) + + +# @DATASETS.register_module() +class MapillaryDataset_v2(BaseSegDataset): + """Mapillary Vistas Dataset. + + Dataset paper link: + http://ieeexplore.ieee.org/document/8237796/ + + v1.2 contain 66 object classes. + (37 instance-specific) + + v2.0 contain 124 object classes. + (70 instance-specific, 46 stuff, 8 void or crowd). + + The ``img_suffix`` is fixed to '.jpg' and ``seg_map_suffix`` is + fixed to '.png' for Mapillary Vistas Dataset. + """ + METAINFO = dict( + classes=( + 'Bird', 'Ground Animal', 'Ambiguous Barrier', 'Concrete Block', + 'Curb', 'Fence', 'Guard Rail', 'Barrier', 'Road Median', + 'Road Side', 'Lane Separator', 'Temporary Barrier', 'Wall', + 'Bike Lane', 'Crosswalk - Plain', 'Curb Cut', 'Driveway', + 'Parking', 'Parking Aisle', 'Pedestrian Area', 'Rail Track', + 'Road', 'Road Shoulder', 'Service Lane', 'Sidewalk', + 'Traffic Island', 'Bridge', 'Building', 'Garage', 'Tunnel', + 'Person', 'Person Group', 'Bicyclist', 'Motorcyclist', + 'Other Rider', 'Lane Marking - Dashed Line', + 'Lane Marking - Straight Line', 'Lane Marking - Zigzag Line', + 'Lane Marking - Ambiguous', 'Lane Marking - Arrow (Left)', + 'Lane Marking - Arrow (Other)', 'Lane Marking - Arrow (Right)', + 'Lane Marking - Arrow (Split Left or Straight)', + 'Lane Marking - Arrow (Split Right or Straight)', + 'Lane Marking - Arrow (Straight)', 'Lane Marking - Crosswalk', + 'Lane Marking - Give Way (Row)', + 'Lane Marking - Give Way (Single)', + 'Lane Marking - Hatched (Chevron)', + 'Lane Marking - Hatched (Diagonal)', 'Lane Marking - Other', + 'Lane Marking - Stop Line', 'Lane Marking - Symbol (Bicycle)', + 'Lane Marking - Symbol (Other)', 'Lane Marking - Text', + 'Lane Marking (only) - Dashed Line', + 'Lane Marking (only) - Crosswalk', 'Lane Marking (only) - Other', + 'Lane Marking (only) - Test', 'Mountain', 'Sand', 'Sky', 'Snow', + 'Terrain', 'Vegetation', 'Water', 'Banner', 'Bench', 'Bike Rack', + 'Catch Basin', 'CCTV Camera', 'Fire Hydrant', 'Junction Box', + 'Mailbox', 'Manhole', 'Parking Meter', 'Phone Booth', 'Pothole', + 'Signage - Advertisement', 'Signage - Ambiguous', 'Signage - Back', + 'Signage - Information', 'Signage - Other', 'Signage - Store', + 'Street Light', 'Pole', 'Pole Group', 'Traffic Sign Frame', + 'Utility Pole', 'Traffic Cone', 'Traffic Light - General (Single)', + 'Traffic Light - Pedestrians', 'Traffic Light - General (Upright)', + 'Traffic Light - General (Horizontal)', 'Traffic Light - Cyclists', + 'Traffic Light - Other', 'Traffic Sign - Ambiguous', + 'Traffic Sign (Back)', 'Traffic Sign - Direction (Back)', + 'Traffic Sign - Direction (Front)', 'Traffic Sign (Front)', + 'Traffic Sign - Parking', 'Traffic Sign - Temporary (Back)', + 'Traffic Sign - Temporary (Front)', 'Trash Can', 'Bicycle', 'Boat', + 'Bus', 'Car', 'Caravan', 'Motorcycle', 'On Rails', 'Other Vehicle', + 'Trailer', 'Truck', 'Vehicle Group', 'Wheeled Slow', 'Water Valve', + 'Car Mount', 'Dynamic', 'Ego Vehicle', 'Ground', 'Static', + 'Unlabeled'), + palette=[[165, 42, 42], [0, 192, 0], [250, 170, 31], [250, 170, 32], + [196, 196, 196], [190, 153, 153], [180, 165, 180], + [90, 120, 150], [250, 170, 33], [250, 170, 34], + [128, 128, 128], [250, 170, 35], [102, 102, 156], + [128, 64, 255], [140, 140, 200], [170, 170, 170], + [250, 170, 36], [250, 170, 160], [250, 170, 37], [96, 96, 96], + [230, 150, 140], [128, 64, 128], [110, 110, 110], + [110, 110, 110], [244, 35, 232], [128, 196, + 128], [150, 100, 100], + [70, 70, 70], [150, 150, 150], [150, 120, 90], [220, 20, 60], + [220, 20, 60], [255, 0, 0], [255, 0, 100], [255, 0, 200], + [255, 255, 255], [255, 255, 255], [250, 170, 29], + [250, 170, 28], [250, 170, 26], [250, 170, + 25], [250, 170, 24], + [250, 170, 22], [250, 170, 21], [250, 170, + 20], [255, 255, 255], + [250, 170, 19], [250, 170, 18], [250, 170, + 12], [250, 170, 11], + [255, 255, 255], [255, 255, 255], [250, 170, 16], + [250, 170, 15], [250, 170, 15], [255, 255, 255], + [255, 255, 255], [255, 255, 255], [255, 255, 255], + [64, 170, 64], [230, 160, 50], + [70, 130, 180], [190, 255, 255], [152, 251, 152], + [107, 142, 35], [0, 170, 30], [255, 255, 128], [250, 0, 30], + [100, 140, 180], [220, 128, 128], [222, 40, + 40], [100, 170, 30], + [40, 40, 40], [33, 33, 33], [100, 128, 160], [20, 20, 255], + [142, 0, 0], [70, 100, 150], [250, 171, 30], [250, 172, 30], + [250, 173, 30], [250, 174, 30], [250, 175, + 30], [250, 176, 30], + [210, 170, 100], [153, 153, 153], [153, 153, 153], + [128, 128, 128], [0, 0, 80], [210, 60, 60], [250, 170, 30], + [250, 170, 30], [250, 170, 30], [250, 170, + 30], [250, 170, 30], + [250, 170, 30], [192, 192, 192], [192, 192, 192], + [192, 192, 192], [220, 220, 0], [220, 220, 0], [0, 0, 196], + [192, 192, 192], [220, 220, 0], [140, 140, 20], [119, 11, 32], + [150, 0, 255], [0, 60, 100], [0, 0, 142], [0, 0, 90], + [0, 0, 230], [0, 80, 100], [128, 64, 64], [0, 0, 110], + [0, 0, 70], [0, 0, 142], [0, 0, 192], [170, 170, 170], + [32, 32, 32], [111, 74, 0], [120, 10, 10], [81, 0, 81], + [111, 111, 0], [0, 0, 0]]) + + def __init__(self, + img_suffix='.jpg', + seg_map_suffix='.png', + **kwargs) -> None: + super().__init__( + img_suffix=img_suffix, seg_map_suffix=seg_map_suffix, **kwargs) diff --git a/projects/mapillary_dataset/mmseg/datasets/mapillary_v1_2.py b/projects/mapillary_dataset/mmseg/datasets/mapillary_v1_2.py deleted file mode 100644 index 975d07b24e..0000000000 --- a/projects/mapillary_dataset/mmseg/datasets/mapillary_v1_2.py +++ /dev/null @@ -1,65 +0,0 @@ -# Copyright (c) OpenMMLab. All rights reserved. -from mmseg.datasets.basesegdataset import BaseSegDataset -from mmseg.registry import DATASETS - - -@DATASETS.register_module() -class MapillaryDataset_v1_2(BaseSegDataset): - """Mapillary Vistas Dataset. - - Dataset paper link: - http://ieeexplore.ieee.org/document/8237796/ - - v1.2 contain 66 object classes. - (37 instance-specific) - - v2.0 contain 124 object classes. - (70 instance-specific, 46 stuff, 8 void or crowd). - - The ``img_suffix`` is fixed to '.jpg' and ``seg_map_suffix`` is - fixed to '.png' for Mapillary Vistas Dataset. - """ - METAINFO = dict( - classes=('Bird', 'Ground Animal', 'Curb', 'Fence', 'Guard Rail', - 'Barrier', 'Wall', 'Bike Lane', 'Crosswalk - Plain', - 'Curb Cut', 'Parking', 'Pedestrian Area', 'Rail Track', - 'Road', 'Service Lane', 'Sidewalk', 'Bridge', 'Building', - 'Tunnel', 'Person', 'Bicyclist', 'Motorcyclist', - 'Other Rider', 'Lane Marking - Crosswalk', - 'Lane Marking - General', 'Mountain', 'Sand', 'Sky', 'Snow', - 'Terrain', 'Vegetation', 'Water', 'Banner', 'Bench', - 'Bike Rack', 'Billboard', 'Catch Basin', 'CCTV Camera', - 'Fire Hydrant', 'Junction Box', 'Mailbox', 'Manhole', - 'Phone Booth', 'Pothole', 'Street Light', 'Pole', - 'Traffic Sign Frame', 'Utility Pole', 'Traffic Light', - 'Traffic Sign (Back)', 'Traffic Sign (Front)', 'Trash Can', - 'Bicycle', 'Boat', 'Bus', 'Car', 'Caravan', 'Motorcycle', - 'On Rails', 'Other Vehicle', 'Trailer', 'Truck', - 'Wheeled Slow', 'Car Mount', 'Ego Vehicle', 'Unlabeled'), - palette=[[165, 42, 42], [0, 192, 0], [196, 196, 196], [190, 153, 153], - [180, 165, 180], [90, 120, 150], [102, 102, 156], - [128, 64, 255], [140, 140, 200], [170, 170, 170], - [250, 170, 160], [96, 96, 96], - [230, 150, 140], [128, 64, 128], [110, 110, 110], - [244, 35, 232], [150, 100, 100], [70, 70, 70], [150, 120, 90], - [220, 20, 60], [255, 0, 0], [255, 0, 100], [255, 0, 200], - [200, 128, 128], [255, 255, 255], [64, 170, - 64], [230, 160, 50], - [70, 130, 180], [190, 255, 255], [152, 251, 152], - [107, 142, 35], [0, 170, 30], [255, 255, 128], [250, 0, 30], - [100, 140, 180], [220, 220, 220], [220, 128, 128], - [222, 40, 40], [100, 170, 30], [40, 40, 40], [33, 33, 33], - [100, 128, 160], [142, 0, 0], [70, 100, 150], [210, 170, 100], - [153, 153, 153], [128, 128, 128], [0, 0, 80], [250, 170, 30], - [192, 192, 192], [220, 220, 0], [140, 140, 20], [119, 11, 32], - [150, 0, 255], [0, 60, 100], [0, 0, 142], [0, 0, 90], - [0, 0, 230], [0, 80, 100], [128, 64, 64], [0, 0, 110], - [0, 0, 70], [0, 0, 192], [32, 32, 32], [120, 10, - 10], [0, 0, 0]]) - - def __init__(self, - img_suffix='.jpg', - seg_map_suffix='.png', - **kwargs) -> None: - super().__init__( - img_suffix=img_suffix, seg_map_suffix=seg_map_suffix, **kwargs) diff --git a/projects/mapillary_dataset/tools/dataset_converters/mapillary.py b/projects/mapillary_dataset/tools/dataset_converters/mapillary.py deleted file mode 100644 index a881564cab..0000000000 --- a/projects/mapillary_dataset/tools/dataset_converters/mapillary.py +++ /dev/null @@ -1,245 +0,0 @@ -# Copyright (c) OpenMMLab. All rights reserved. -import argparse -import os.path as osp -from functools import partial - -import mmcv -import numpy as np -from mmengine.utils import (mkdir_or_exist, scandir, track_parallel_progress, - track_progress) - -colormap_v1_2 = np.array([[165, 42, 42], [0, 192, 0], [196, 196, 196], - [190, 153, 153], [180, 165, 180], [90, 120, 150], - [102, 102, 156], [128, 64, 255], [140, 140, 200], - [170, 170, 170], [250, 170, 160], [96, 96, 96], - [230, 150, 140], [128, 64, 128], [110, 110, 110], - [244, 35, 232], [150, 100, 100], [70, 70, 70], - [150, 120, 90], [220, 20, 60], [255, 0, 0], - [255, 0, 100], [255, 0, 200], [200, 128, 128], - [255, 255, 255], [64, 170, 64], [230, 160, 50], - [70, 130, 180], [190, 255, 255], [152, 251, 152], - [107, 142, 35], [0, 170, 30], [255, 255, 128], - [250, 0, 30], [100, 140, 180], [220, 220, 220], - [220, 128, 128], [222, 40, 40], [100, 170, 30], - [40, 40, 40], [33, 33, 33], [100, 128, 160], - [142, 0, 0], [70, 100, 150], [210, 170, 100], - [153, 153, 153], [128, 128, 128], [0, 0, 80], - [250, 170, 30], [192, 192, 192], [220, 220, 0], - [140, 140, 20], [119, 11, 32], [150, 0, 255], - [0, 60, 100], [0, 0, 142], [0, 0, 90], [0, 0, 230], - [0, 80, 100], [128, 64, 64], [0, 0, 110], [0, 0, 70], - [0, 0, 192], [32, 32, 32], [120, 10, 10], [0, 0, 0]]) - -colormap_v2_0 = np.array([[165, 42, 42], [0, 192, 0], [250, 170, 31], - [250, 170, 32], [196, 196, 196], [190, 153, 153], - [180, 165, 180], [90, 120, 150], [250, 170, 33], - [250, 170, 34], [128, 128, 128], [250, 170, 35], - [102, 102, 156], [128, 64, 255], [140, 140, 200], - [170, 170, 170], [250, 170, 36], [250, 170, 160], - [250, 170, 37], [96, 96, 96], [230, 150, 140], - [128, 64, 128], [110, 110, 110], [110, 110, 110], - [244, 35, 232], [128, 196, 128], [150, 100, 100], - [70, 70, 70], [150, 150, 150], [150, 120, 90], - [220, 20, 60], [220, 20, 60], [255, 0, 0], - [255, 0, 100], [255, 0, 200], [255, 255, 255], - [255, 255, 255], [250, 170, 29], [250, 170, 28], - [250, 170, 26], [250, 170, 25], [250, 170, 24], - [250, 170, 22], [250, 170, 21], [250, 170, 20], - [255, 255, 255], [250, 170, 19], [250, 170, 18], - [250, 170, 12], [250, 170, 11], [255, 255, 255], - [255, 255, 255], [250, 170, 16], [250, 170, 15], - [250, 170, 15], [255, 255, 255], [255, 255, 255], - [255, 255, 255], [255, 255, 255], [64, 170, 64], - [230, 160, 50], [70, 130, 180], [190, 255, 255], - [152, 251, 152], [107, 142, 35], [0, 170, 30], - [255, 255, 128], [250, 0, 30], [100, 140, 180], - [220, 128, 128], [222, 40, 40], [100, 170, 30], - [40, 40, 40], [33, 33, 33], [100, 128, 160], - [20, 20, 255], [142, 0, 0], [70, 100, 150], - [250, 171, 30], [250, 172, 30], [250, 173, 30], - [250, 174, 30], [250, 175, 30], [250, 176, 30], - [210, 170, 100], [153, 153, 153], [153, 153, 153], - [128, 128, 128], [0, 0, 80], [210, 60, 60], - [250, 170, 30], [250, 170, 30], [250, 170, 30], - [250, 170, 30], [250, 170, 30], [250, 170, 30], - [192, 192, 192], [192, 192, 192], [192, 192, 192], - [220, 220, 0], [220, 220, 0], [0, 0, 196], - [192, 192, 192], [220, 220, 0], [140, 140, 20], - [119, 11, 32], [150, 0, 255], [0, 60, 100], - [0, 0, 142], [0, 0, 90], [0, 0, 230], [0, 80, 100], - [128, 64, 64], [0, 0, 110], [0, 0, 70], [0, 0, 142], - [0, 0, 192], [170, 170, 170], [32, 32, 32], - [111, 74, 0], [120, 10, 10], [81, 0, 81], - [111, 111, 0], [0, 0, 0]]) - - -def parse_args(): - parser = argparse.ArgumentParser( - description='Convert Mapillary dataset to mmsegmentation format') - parser.add_argument('dataset_path', help='Mapillary folder path') - parser.add_argument( - '--version', - default='all', - help="Mapillary labels version, 'v1.2','v2.0','all'") - parser.add_argument('-o', '--out_dir', help='output path') - parser.add_argument( - '--nproc', default=1, type=int, help='number of process') - args = parser.parse_args() - return args - - -def mapillary_colormap2label(colormap: np.ndarray) -> list: - """Create a `list` shaped (256^3, 1), convert each color palette to a - number, which can use to find the correct label value. - - For example labels 0--Bird--[165, 42, 42] - (165*256 + 42) * 256 + 42 = 10824234 (This is list's index]) - `colormap2label[10824234] = 0` - - In converting, if a RGB pixel value is [165, 42, 42], - through colormap2label[10824234]-->can quickly find - this labels value is 0. - Through matrix multiply to compute a img is very fast. - - Args: - colormap (np.ndarray): Mapillary Vistas Dataset palette - - Returns: - list: values are mask labels, - indices are palette's convert results. - """ - colormap2label = np.zeros(256**3, dtype=np.longlong) - for i, colormap_ in enumerate(colormap): - colormap2label[(colormap_[0] * 256 + colormap_[1]) * 256 + - colormap_[2]] = i - return colormap2label - - -def mapillary_masklabel(rgb_label: np.ndarray, - colormap2label: list) -> np.ndarray: - """Computing a img mask label through `colormap2label` get in - `mapillary_colormap2label(COLORMAP: np.ndarray)` - - Args: - rgb_label (np.array): a RGB labels img. - colormap2label (list): get in mapillary_colormap2label(colormap) - - Returns: - np.ndarray: mask labels array. - """ - colormap_ = rgb_label.astype('uint32') - idx = np.array((colormap_[:, :, 0] * 256 + colormap_[:, :, 1]) * 256 + - colormap_[:, :, 2]).astype('uint32') - return colormap2label[idx] - - -def RGB2Mask(rgb_label_path: str, colormap2label: list) -> None: - """Mapillary Vistas Dataset provide 8-bit with color-palette class-specific - labels for semantic segmentation. However, semantic segmentation needs - single channel mask labels. - - This code is about converting mapillary RGB labels - {traing,validation/v1.2,v2.0/labels} to mask labels - {{traing,validation/v1.2,v2.0/labels_mask} - - Args: - rgb_label_path (str): image absolute path. - dataset_version (str): v1.2 or v2.0 to choose color_map . - """ - rgb_label = mmcv.imread(rgb_label_path, channel_order='rgb') - - masks_label = mapillary_masklabel(rgb_label, colormap2label) - - mmcv.imwrite( - masks_label.astype(np.uint8), - rgb_label_path.replace('labels', 'labels_mask')) - - -def main(): - colormap2label_v1_2 = mapillary_colormap2label(colormap_v1_2) - colormap2label_v2_0 = mapillary_colormap2label(colormap_v2_0) - - dataset_path = args.dataset_path - if args.out_dir is None: - out_dir = dataset_path - else: - out_dir = args.out_dir - - RGB_labels_path = [] - RGB_labels_v1_2_path = [] - RGB_labels_v2_0_path = [] - print('Scanning labels path....') - for label_path in scandir(dataset_path, suffix='.png', recursive=True): - if 'labels' in label_path: - rgb_label_path = osp.join(dataset_path, label_path) - RGB_labels_path.append(rgb_label_path) - if 'v1.2' in label_path: - RGB_labels_v1_2_path.append(rgb_label_path) - elif 'v2.0' in label_path: - RGB_labels_v2_0_path.append(rgb_label_path) - - if args.version == 'all': - print(f'Totaly found {len(RGB_labels_path)} {args.version} RGB labels') - elif args.version == 'v1.2': - print(f'Found {len(RGB_labels_v1_2_path)} {args.version} RGB labels') - elif args.version == 'v2.0': - print(f'Found {len(RGB_labels_v2_0_path)} {args.version} RGB labels') - print('Making directories...') - mkdir_or_exist(osp.join(out_dir, 'training', 'v1.2', 'labels_mask')) - mkdir_or_exist(osp.join(out_dir, 'validation', 'v1.2', 'labels_mask')) - mkdir_or_exist(osp.join(out_dir, 'training', 'v2.0', 'labels_mask')) - mkdir_or_exist(osp.join(out_dir, 'validation', 'v2.0', 'labels_mask')) - print('Directories Have Made...') - - if args.nproc > 1: - if args.version == 'all': - print('Converting v1.2 ....') - track_parallel_progress( - partial(RGB2Mask, colormap2label=colormap2label_v1_2), - RGB_labels_v1_2_path, - nproc=args.nproc) - print('Converting v2.0 ....') - track_parallel_progress( - partial(RGB2Mask, colormap2label=colormap2label_v2_0), - RGB_labels_v2_0_path, - nproc=args.nproc) - elif args.version == 'v1.2': - print('Converting v1.2 ....') - track_parallel_progress( - partial(RGB2Mask, colormap2label=colormap2label_v1_2), - RGB_labels_v1_2_path, - nproc=args.nproc) - elif args.version == 'v2.0': - print('Converting v2.0 ....') - track_parallel_progress( - partial(RGB2Mask, colormap2label=colormap2label_v2_0), - RGB_labels_v2_0_path, - nproc=args.nproc) - - else: - if args.version == 'all': - print('Converting v1.2 ....') - track_progress( - partial(RGB2Mask, colormap2label=colormap2label_v1_2), - RGB_labels_v1_2_path) - print('Converting v2.0 ....') - track_progress( - partial(RGB2Mask, colormap2label=colormap2label_v2_0), - RGB_labels_v2_0_path) - elif args.version == 'v1.2': - print('Converting v1.2 ....') - track_progress( - partial(RGB2Mask, colormap2label=colormap2label_v1_2), - RGB_labels_v1_2_path) - elif args.version == 'v2.0': - print('Converting v2.0 ....') - track_progress( - partial(RGB2Mask, colormap2label=colormap2label_v2_0), - RGB_labels_v2_0_path) - - print('Have convert Mapillary Vistas Datasets RGB labels to Mask labels!') - - -if __name__ == '__main__': - args = parse_args() - main() diff --git a/tests/data/pseudo_mapillary_dataset/images/__CRyFzoDOXn6unQ6a3DnQ.jpg b/tests/data/pseudo_mapillary_dataset/images/__CRyFzoDOXn6unQ6a3DnQ.jpg new file mode 100644 index 0000000000000000000000000000000000000000..deed3177806e443cee9b00e0fb0e80315488742e GIT binary patch literal 1227776 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�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�i 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%0AtX?)jOu>rn&F1Q-GUyF5Ly7+X@XR>5w4i_=0g zJ1!_ab+#IsIDr#wm={Gjc~>QwWgm>!Iy!!ym|T6#K?^^Xn4(|PEE?!t2l=z5VTF%e z>z3<=_2*Cl|^G9OrK;Ey%mIJl(efHs66wJ6VPqwrn5hKceQ zeKUW(+l=#UCD87Bc1`%#*TrSp!o$8ip2_U2y6_*!P&d_+`Int^uJk8}Hq}cir$*W_ zpS6gH!{Zg3c~mtYdQN;E@Sl{3HR1_K&LQ2t`CzB)ZarncxR8 zhO5P@1A|=H(Jmm zs%u!6;>CwG77$};)pEl3Cx_?vN9V0YXH}IRsT`HqUBG{T`L>xSW56Y#cZm7Kanqg#SPkok=yCztpvJXGcwrzqq1$2;6(PW8Wj|6D6O6-p_w`FaLuK{=X3Z z1WSw>>{6W&DJ{KTrdpq_N*O`?X(_LWFCDSLb2$>%9%~iHX1N91+Cou~Af|j%-3+#T z9SJ=csL{iz>A|l1!&1!zi7mcgT!Sp2y>#JMU-YNXs^3N4Z1er)XSjX4#$6^E)ouvB zzvfhPQv1DBNET}w8@Jyh`ZL9fO7j9S^(gdX|51%-=C}PSH2b&HE>k>g8k=y0vEj5g zRq*jVf>^5Oq#ZP>*kKoZG#cK)+1z?ytF$s!RpRIHn5BD<{04nvizcB|mJ!Xf%}mrq zYo)g<(&RCeK?F@4mWEcPfRiYR-Jcz8R)YU02PNK=_oST#1DEr%$UHv7BUHea8X}^3 z9oR(56lYR1liPR5(u5Jv&S_ILWdYy;3y@F=f>;4YvF9N-(@DH604NyZfWDJ0rV~~V z>?zDdCo9gI0zKqyV0n!`)du-{1@Gh*eHsk*27vFC*fopztiALHU=H%sS> zp(oHGz`GR4gV7dpV+Q;&MSVpSTNr7Z+#nnbPz!*Xt!|kxggP>OVD-mySx+R26LJM% zJVr=Q=elv%lA&)Z0FKr~lgRq|9MTmc+5s@kM|Q{)fZ5XK359e@NT-W>f~nau&T`$r z&r2ONhL)((7_7clJ;Vbq+bO6*Vj&g2O9v4mam}&-)QT}Z`q)p|WiTBA#;08>44mVw z!6P7r2>>GD@&^Nf8mLkkK&{JM)G1Qh{l)6n+!;2pGgS^gQwWi0pMYT9tpcesBZz>nq}-vS{qw5H$*(DNMz81MkfXpyq!gIr-UFsj)vNYCp{VqCXqeY-hTwS~mWmT^tUb7>}PEL!Xh z0shWxT234YCQ&EiyH%+?VZEigCj!jakJPi`#s& zSDAqKWi#k88Sk1*ge>_EY}@hzjGK<4zq*yAE`*SOfYI1a`79?cXpekzVEfrTe4m9Y zn4)0&t{|3tZX*A^?Pm0L@eBDGm~FfZ$6WS@6nZwEP>^4KDW}u%wjlDIa*PRQmlmd2 z8=XghH;d+3A7`85NvF4kmF4DHb0boo7ta-hGfeu`t)MDEb$um_`aSFqhWdZ7^9n z(1pQ!Nd&@~wQpDXDM22-T8sNSK*7QQ;PdqX?7)P$a^5EbVG_Jj`%JNQ7bF>I zy|v_?@8pzotW$shcY!=mr#nZ3q#?}8SJQexyNYx}lN2_{0XtR%D2sB;0Q3Zp@8AP{GThp<~HhM@VdZ?n*4&7SZ}p$x*My_a6h$IL0sJg-mGVus$hp;i;<4DlW%32sLvA*P%_RRJTd(3*@`*Q zBkrZCpBIcueo#65U}_LYEo;4qpQy{{FGgKad(flN!iJsPN;g*Q0I6>?h(&W~OTbz{V%=F&g_2kkmcc_ zP0I>hmK*e3>iQtA8b?Z>a#4}6<#5IqXL)I;%FE-VBWQFC=A8`C_^ zOg4qeAQ^W6!QETF;W*^OZ!0#$K9#|Cbp%xXUJU^TAJl#4lvX1 zE8R^uzvf9vHlvqZwx;13hV3>UT1ygIRfJ#Gjju{*z>R>y0<~p|S$c$jNYyu8_iSB#7f1Z( z(s|ael7fG{gmt5GG2<{5UVWC0VSV?nb*&HHl7pZB$t>dz;Og2J+C8$nr+m`L{sfmT zv8r2B)w*)BzfrEU>Jh}mSjoTHbRdF|LfW*}A(@m|g_LuBZTMLXcQRWEsaLRK56I=S zu<~v`CA6%ITmG8@=?3Eg|A7<=Ro|J}&Ch^va*GvvVLF&E&>^0?BC->y&D~$hY_||N``^EO zR(NJQR}x|F@4;fx>Nvz$c+8Fs-&=;1p(pM=zxgLKugpX?Bc5(enW_iJ`jFvJ_*ZwF z-s*^H$FoL+PyeGE=s#xmnCBT$u;`C;uR1o23*;_vn7gQVis_T6S<29nFbT8_Wxvv+ zUk>Tj+O>?H!gd&NCM_tU*KvsbK+5y(X?4EB=<_;Ur!_5q5sT)n!_GwDC+c}Kb02Zk z4$c}Y%FQUX*_E33#kt;$l<2(Tf-L_N9d|?%-L!+mq?iBiFZiiH zKXq2s2b~_iFNJaIlKrmYBdyeIx%ke&jjDBE$h+HU6KxvDO@vcOaWpU%WbY|0dpbQj zM+g%$rEpC4SGTtfWibRl)#9iRIyzI>jGzho2`eK~meCqgu8(gu%{OWUK`x-^7?I2y51Ktef zTd|u$sURp;Y>_SJl{xf$;g7ip^&)Ch;;(i61B&kv0@79;rSS**Bh0EpzXC{_l2*uJ z{)RnyFUz0x`h{aV-`@v-Vd`sPjdECmB=teF^d_O?Gicwm+`S_`)oVBUsHfj}SreFZ zn|*XZ=6piMVN8Cexs`rMIPT{l2b%_2$AJ;?*k3nd*%;QEuPyt4a^wyq3KyH0IczYZ8&+B`GsT8s+1U<1zf{K^pIr*|1@GKdAe?Lwe?*V{>y_1Hjw=;4Xl4qPjBrA;E%? zeY2LT9WTtRQRqkPJTU!Epv6f|+3;cS#Mf~M^$z#njqcW`H$ytG9G~k{-WHUfC76zl z>!;8C(zM67^IY{WW%FV1Z%!Mj5@Q3F=6CJJZRZc9@+ot7l0G_l{B`FS{eGFcVPv^N z?48dCaVzY*5at^Y@@Z1-b9v9(^=wyqt>b1fUI`=df%tV-Y#3@L)oRX*`_9|UxIV9h z?&{4hF@O=O`1`}%WKe@t(Vo~_QWkdW?==O0sbpQNaonZ4|q|Lisa%kLUX$yizo z1KymKrtW9Z*1tv!`2@=3U~Y_mFcP`_eylhwhN}J2or3M<`&#jkaQ)V_2XCgb^wunX z7WY=&>F4_jJ}Fr=;%VEQ=F$!tk=B`i`Q-*;mZNChYp%tp<7LA)BAOZ=Rs4v52!#pU6fPgT=3&HOEF!r=}i+c3mrDe0_Qj1$f4|vXp z?^-(*#-ja3*7ws(`)gDlweu6@H`9h~cpNrxdVKw!BloIx7S4>Gc$LQaxnrHyVz=_G z?+h_=SUKZF=*6RYGp;AkfWnoL-t3XEL^V~j`o-`=0&l!Eth{Cz^dn{4-&C%J{fp)3 zsat?i&3b`ulvxXWAW~P6R2X^wvq<`x1pj!%QDtj*(a3RZ8S41co0{4xAF@NC2I5;~ zit`5uHNqdE%>q3DczZ|#T6kmDg%lH;b3vI@0HEqhj4WA{w}Z|6?=hW!50b+OLv9uk zfkp)`t>Jv1@k-O*SBezwSxFsjps-iSKflYF&_vU;Bt1sx(avM}RJe44dkGIIG5o@Y z6WdDus@5GH{O{0xN{%HMIm6ZeN?yR>jQ@o=)o&-KfDXxv=_l-rfEHCQ|zKMSZBD%u}!c*T;9+ zlHbP?%LE#VUzvc~7Y^w|uDi@Cqw|B4rcBKH`lsBaCj?lcQXYn>O5VxfX9Bu8B%zEY zDj4X&94C)|SNkhdFb{RK`gwiW^yURk=c+Yd(vYXEtvFCl9l{_Hj$NK;fy$)YnF1FQ zRM+b#I!(H?|i)0=Ygek47v!ID^9pslT%>`Im zC9eM`!xb2to4wf(zY04iHM-}(t~u{aAuTmUuWaFolK3`t+wA>Q$4k3S-oCrY@llm3 zLnXEe?Wc8@fUniv<|#g(byCOSD?!>{S59`N+XvFWT}N2dRl+!SBU^W(i0fak(Z9PR z_H)elY%t6g?HXSSWIdk|;u;;{z_Lqc1*XE8ZdU!5pWw_`$L9@!^iJl1pb}R!kL`eu zA{3D2ApeBZ3$>(L_)Yk7%F>guj+Rgw8;4spJReZ7Y}DIphEg%_E_{Gyl* zm~Q}mae%?8D7(>%uy+j?vZ1_41u=-@%|hk7&dK@PYQX>gY^K zQp1z$Q-%11Ugg!+AFq&uUjd7u>Z_*({OlH+fI~)SbupieNOS2Dhgklt>v_JN#Bk|E zHdU@&k1S`@6h;SE>i23@t!I4Yhy=%_TR4i@bjX)Bw=z|v8a5h}jyrq)2g0`QAx+;H z-Zy&pPVGXfnpwgwfr%}lP=%1o(pCQ_mx}y*H*E?Fegay;PQ5olwZ7~7!-7m3hWMgk zq9`Nlmk#D@0*O<KYb);Urm>YVO6xp5BY_7EcpA) z9}TQK#Pj;3MO}EonyjJ1hQ6nQ^KB zhB6Y;TK%RlUIbbk&%b|O0r7+As~=l-H21OUrlM{KflaXTwe z_5m6^!wbp&xnRd5zE)1wcOp z#KMGtb72bN$Oh1Bdv`%xC{pOBLJ`2U2iTum1t76$pmh|frh#gdAQ7O2+=3V~+cItf z!itD$(gt8_XP_}R0~iR2kCe)ep}7z$gDDF!fLaPn3Ge3Y1G4tpUC@!@K8jzyN1sy$ z_0o-4L`e~tYbiqX2?I(32L`9QIP@KoIuNFssanw||mx`eo_1i--nuMYp88gdZi!w))A^Hn4PI6Q>n z*jNG%>?N>0#V}3?Fsdh;v%spL5+xOOO)D3? zBKbK9@)Iz%1o*Wm*_kUK)FjY~h7)kbhL+ePEs_oGvsm;&B(xS{8Vd!aEYpM(HlH-9 z8B3l4P^W|(NERqE;8Q$%%0m!Iv=1$y!~@opdYkL|QjiX*GSc4_gaPHiH&c%01of37 z0nZ?nI07VxE!cwQ-5hI!S>fL!y0C#4B}GzbF}Rp&=uVE@G^Z;LT8xx$q0s>WaV9&4 z0|*A=hRZpC6)GTSf0|k@%0_;J4KoV1ohf!Bk}Ci}Nzh_o;2X$vfo2s~(*^cUsw$5U z1+r*9o`Fu*&Z19sSSWn95Fj6*h`D;8*uQR=M$G}zk=B@k&ZJscts4=H$$RV+kS?HT zHN#p#{8q;|vvdC1q%nF_Vn^!a^r3r#DlC!ojM8!e)pw?e-uS3!ck8t((x_RaNj6~A z?-6K9$%&JP4P#F>|-3oLLl9m%4BY^g(Y6u!|y97W%n{eqN0UA&l6!fu$SsS4br;^d9 zf%8vBRDtlSK1*eC1R9e%VAdmzA{akQAeuLtK?(;+WW)g%AT$(Iwg`aRe1Ev2!ywPw_Q27MZ|9iQJM^FiIe_1)WQa9`MdcaODxu#4208a+! z_Hc4sFROalwLYgmLOVvy2(M<-k|1IsW9Wd*VhNw-fWBs%%c=zCpHdK)-Vp#D5E?se1lgBFNGLuI z%AiqkRl3(q5Hl4P{z6k7w3Egh$#l%xT8pVDiKe@BwClg9#~$wMp`iSu?JJu-U7jMo z^1ESWSRb-maZEtGJ{Btg-QMF8~9($zrEg;{KG*GGX$Bz)N>xc1$C49K#B3f+j zX-`V$Ty41V?~xpJyPOQ^(K_P-n}myx$>+lCmTe2drsj?W$ESSdaJo!n>t@<$M5#5? zuWdo`OEqQdp!}^Fzv)4r{d@m`?(eNh+>_ojYOC5i3K;OSk^2wSB}8$^Sj5e;f4ykr z9qJu?C;g#vhok?X{~FKWfb)ZAL~AWL-OWnF??t|~=DCkqzN>179xRu%s+XJGrOlr< zv#adqdF0TYOt?BlpI#5=T~LNKR|6JBe+kb?%vdx0qgD9yf1o}$*^mnMlaaq}o`S!6 zYFW1&NK?b`>347-w(CJc>57=2wyZj;7q#HH%b1J$40j3N&M3MUC(n%pznoS#sZY_V zJ=q|6u&>`+p+S9fUQ5gVZAr#4+Fv&#Fr7w`TD=tI%$~*4fGtY;sB%`dl)NQ3Tbe)a zS%Ib=_jyYIqB^fJTYeRsE)Vg#nd3d52^pytt{n5zm=J>GTQW_DIPbWuLMnf*-wiWe z$lS12wJg_IS*N19XY@^vYm88gslI5L@@mE<>0hM3-n)l?fIm0%*1u&aWH}ZUoYmpw zBm#<0M$%x+-Hfe5XKiLD%EuYB26{Rno?jOZl7pDgc$KUs69%K`9JLOmOePbSQYiWq;l1tV9W^hMZT0gq%qrpIRII6o$O<8K01d24j0=UQ)jp z5q|)Rm@p{rHy8;XI!-v}`VbO4y)3nRu2!6UNBR~&z;a&S6-8`?1o5o|)a@5jt_>`y zC>V;r=(?*q&Y*KH+BwLcNFREZ-*M$A+Y72|cYZ(Xx-4OP;mA}OSPqK0 zRA<}F^!A=JUi#?Bfj%nw*RuIPm|b59(K@yaYDoG_nZi3VtFymG_d8glR{VX_BEvY@ z=m<;0mC2`rrON~U0h+6NHNJ%+zHA!fe}S_sY8ou`qG4;if6vlZlWTsaO2iA&XENdq zhpR^tNyJj!950{w(U1)ryfFP4R_37~7xC>*8tv6wnhp$Is?O`gUG?vBA(s@m1;XhL zTLQ0G{b4?;g@bI^W2*+S3q8;ulB?Dm-?#C2f@Eb)&nc+JycN1Sq|Nc=9hP(aE!37B z=^dn&_vW+ZS`2<>B%|JVr$EQA&Fsh-y1O=zT2r-e|32%rS2lJJ^Dhe$V|Dnc0yf8gEKO4>XULfP>X^`GJ$}zG z+_1mq3HuYF;@qGqk`9dF@&%N$!uvAjuTVkyIhiiep^wbWS6Q}h&#m#9h>PG9Cf`MA z4ENT4h_iY~2&dlgVkr`W1u!!oBn$)#kQ0hRJ+%B6f7in>U zeI2)Ju!C5SZF|I016`(-r0ARNXXAgj23=pc-x+jnV*L-q|9P}KT}}EiY14lohwqx* zr5(6$AGAHWoQQa0YR3Y4oz-o$e`qUocaAb*EcF=NDMOktbKYby_3hamzN`bUNA>Bt zyTMfcF~%DxYx!pu;w=|ImE&}4KOatHw45__EW*{0$_%eBJJ8R)3>Fy1>2BD!UN?Pw zA$bh6p_$Iect#Vp(?UUu`XW$aB`t2X3DquY^tHQXM#;@nx6Y)WQk`ev9e$Cf1}i4E zUUzvD?ZAw9>z;qCJ;{-WN`ili+-0nv+<{5+B zC51-Pys=01k4nqe_i9R0IODVL6UH{ggu;3g>h0x{C=vi&ozbE}>>D zJG~}ApGF^rCbu^3ZSsg}Z z`QI{LuV{!}^_OcSvRs!|dwR4;MUTbCWfiZBx}W0T4yCG&OTHtJO#jiaO#V#xAipq0 z)aOa@1~+Wv@(G~j58&Cr)T!%G5fNM z0K{P&k2s&Y_pQHbw>eex?<5ng#QJh_q;AQs@5$wPosiW#;|{j)dsmyK3EzSpA|qQH zy!~zMPqry&G5Y$i3oDb4&0%*S{ULlmgBx032sR|x9qG~Cm+rTP$r>B##g-8fELZw) zXE-JK#7Q3*3eoJu<8wS(cu3FUpa3UMVn1?$IniA;3S2vkki_-Xwb*fQgUosux3T zo$p_@(wl3CQur5J?09@#j2|$Q^$}I{61e#DtKsR`H_Gp=f#EA{cJ?O&@9K~>_f@WA z&M*%e?pj+dU(=))_@=KlwYm@FmAQ6s#}Ye1+aD&(A|_S?NdkhpdMA>8c-4u9#Y^4p zSNy(A@p|lSI{E7-qfdl;?yN*A?;xh4)pTS?@3gwEG~QwD>2)%^avU=d5ca9CVo!Bv z(Jp3K;Ar21jrsU_Sn@r~AJkQ!0*cOut#yJgd2`dk{Fh7G9camsdc3LLn7&^k4bX~r z=5HU%x|I6_n>{^wIpR4Cp7u3*$t~`fGQ3dH(yHZTnW(?NNN-qEQAaEm)E5`M2$Elqv@^09_x8c_h)WF|KB~K7(E}!LZlfwS#E0yhC~qBo+_4E&j{`kNB(@dkrZK=>hGoO`&BDRu zfFYLAw$-P*?HxB_=as+g%AQW%MhkmR3tgSFx|n zvvh24SV*pF(GCj|r@TJmnE2&)T^y0fd3`c-0+}J%0+i8&kr3S==#A3Jf6wEgiu;>s zL$F2qBJlc$oc9oQcu?=FcQVG4x2&zFJMaB3^7DB6ALJIW^}1un*U!_ZUSut;v*lK7 zhxuzpR7>HI?sK9bI02dz(n36n$!8E_iJ}i=sqLKNx4&^|5n95t_2ODaX zmNxXqDQEIL_rA*Yb5g7}er#QzEPeYyQf(Uc0A(>|9oCO|=bQ(jE4XLWUt_Uic|GGi2TP^kr<2IM@ z#w4^<-vR3JV~4hxTN8M_8!d6hhv!L|oQybZ`+n|k93Ut^OOJO3mflk3+Vqeif*DOV_6Bk=NH#d?ypm>YsY>%U#rlqV0yqm%3xaQ9Vjr z33XqMVE*f9zqeYw8N~WOf?3S!t1{VT1>`^X#I3)64fLl~{fE{*rCyme(Nv_@sU9f& zaI@}YtTa$kmTSV_U=P@03spe8%T|C3OXZQ!BPaF!wHlT3IuCNxGnmjb1gKUxzGZ2Z zjkZckLe95N?6p#~z?nY5{|~)X{}I@6prx)$AfH9BEzgtl%c7vj@0aPeq{EA4@1%Qr za~mCr9x;B50bBbvg*E2pdrx^SYXgH4cdWl)RM=7~p1yndRx^g&dTEK@w{u>%&c1HO zf|db~N=oV(G6NrG!Q875djfRo4p)dVtq@OP&XBrI^2Ky)TMjV+$bo4y!}Lk**gv{6 z0~K+O{|%jCg6}HX3(Hs476Y^uG`sb`c4M|*nm|>)z1MQs_B0?|lj0`*7+KN$@~4NH z%4Wz{i{7suAR(bGe8<+!qO8ao@5fkLV?GT?b-jP9U^JrjEUvg~+57{tL6T$TI?BB@M+(AaCouF?0m$qJjD(e_1;eRFPkxuOqMr)czP*1*8X=Hlrbc zKn(dgvl60DFv+i=34{~&(GXu%sj|!o)~Y)+EeTowOLjo`|KZs90WH@KG8TY+-3qJ_ zL&LGbQ&0*JwJ@a6l^|?pwv_{z^%kx2mk+Y0fFAPiYb;@ZO9AU)HyH%~Il#j`FYDab zDlTV9S0o1*nn!ltE=T9iQwuTkW$raKp~2edHZfVXT2$XodcvjWN>4z~b4eqU8g&4LJwVQo@V z_!~w82xJ#BE8xC^j{yugRt>{14RwI%i=cHw$**Z?#R3hF$s zjDVMHCjaIqSnVi5w&dY%`KN6B7323cQZ2+|G=Nyo=B(tlWo0`6xB&?Mv*Ik$Ib$$7L0OMc79! zU?&F(2&zlsKT7ehkEFEImpt;Uy_|TV9l*Mu|8K_bR&6cwkEx1+0F-9f_`%O@!^3NT)b?a+KnQJWRmD?G zn2+41d@MRhW?chve$GcfDDihTut@ulg!sYTcHu{fdvnCd<7`dbSI}QKlI%NM9Ge{j zdBe{_&!NC%_nG`313OmBwV~(}!P-5cJ)xpgM%o^K)zigZS%L=P-#qg!-6DA7V5csu zSAT`j{fT~Q)>JpUtl~<|xIj*i*^bek&v3cVQv3RcKom)wr1cN7dUc=;n6Okne`(KD zw`A9}<3a+^`{8XmKycn!8qEL=gyxlTy^Y>e1{^p5qVch4Ib=2lI5COi<-mB2f(!JX zd||cp@XN_)Hh+}zY=ea|76GzaM^J_v`6Fbol$1p+_cApKX0W*=5xb`0MV624D9hy+SqB)DV#>S5;x-@U)W>9 z8w#sgH86$=SaAm%X-wm=`6#RD`wW46URhCOzW`BQ-%eJBK$&z202WXhgv0?QVWKS* z$mkcq!NjH=t1EX0?yEpEsQLLIphE%R*&T`0lqQH=PG7nN8vyAuP}9`?p=tFGl270Z z>_}BO!Msay_}3Ne!u~m0mB0( zw+Pprw810b4qgqK5DiA2Q8_S`Rk*US$znmUUHmzkCjt)m9ax#uE?Ep?l}cRZupvRb z|3HzY)e{?4#@_wJ;ea{P<=F4{0Tn>7UgJ(SZM>>`sFOmzvYPVhbKYLdqb{PHb_|6# zr)8^a!)t9p28RgWg%4+`Zx+N>WUV-qibC+#Che&$LZzh32Id!hkn2%tyquV5RQEL^ zzJ+NHH@n>Z=9OBR)t1woi`+TAuk-97>FA^9%&+=F>$;$Qj`ieq__I7aoE=XX#rYRI zIB$q5`;jqi>9a3CS>~-=QhKB!&|;T_B~B;Be3c%H4LTdSFFCUxz-ncp$oj@(DExm3 zSgGYsJn3M4x{0z|E>)@T`qN+Q?em@h4Ab&)E&gI-(#aQ-+Wq~s(wAkC7WC+SV!6GQ za8p|S3OmM4qkQ$@))&f7nCjlx$3_(SlKN|yP!j6?BE!P(!`5ymaGSp#b5T7u@stSJ z+w1;R)>-`vb-(4uu=xXdMf2gwz4{HxJ?IO~7RG4yoUb+iSG!{B;YT5Z$1fOIBePPdBoY0Y zRH3BU*VGISsHcj`;G%PuWAf%GL?_-uf>D>FgGWSBMYSDO*lo9zc~+9o{G`t~%X^{9 z%0l#d9_c%BUeVSbpmro2E%mc|KKJq9qzqW&U9uss>Gqunc>O>l4^qf}Q{qwN%duuJ zd%-K#u({+;Hb;Fm3EnN{)9ZzZy5?tMg!4Iqi#rpTik8CjI(Kl|6 zR53Oh#HDih^deOf_xUq=%JNdSlE4b8h4%QTclW5(JxlDB$Y9mNACDwPuL>O{|Je1Q z*g&7z1Tq4e;rA!WmtLdFB@^xVwjWh4cks@g=RX~gNzFC>`&psTV>eQGey3NSpYt#dO4kP?r^t6-2*!v+Kw zQRqbm*V#D5Qb00QhrxMG1939$Xkb8}*mwb|^^Oz8v3eq?+KjEA8rh9ZF&KaULi3X# zzx=%FOUl7+{u6<7(-L@#o=E(!ZR*Aoy^R+iuAua?kbA$}Uj9mXw)(+4T=JIc5N$a{ zXX)D|pc;~oOFe5*PJf1@-gk?F%RJ7pCN3>~iLFceVeU$fD`g!N3O^?Q>-m93rXCVa8_ zyCLhxR?;>RZi9vU-y~OmF#Q?*N5A+#S;F9(&(+~GFj>91jC0k6?c>z2Y10OUwrti{ ze z<7!3E)3w<7BeMmUzHknKE(U{z(J$Ts2R4`QPb)Yi?Cz69((f3Z1Yhrp0T?ysOhLT~ z&B7K}*S8jkx7ApvDvAP7;wgcI3= zN&cA)|6xeqPs5Azs6~c8DSCTrQ#hA7`g*v!J{LbNX^?y)ta!sCeCc~$`BjLCZeMJe z>`fg)?U*JzN^^m@x&6iwFd0(KL)KWIfD?HB`o6&Kn$exfB8ta~MLTu7^^OxtFGZLN zpEf9dDV}V_^!V&-_e*q3vkr;bI6W+1Q6|Vu$1lVe?eUHuje^NTc+50zjA54)vx_QDp5xI7D}y5_VxXgL2_h^YhSB3#^OyVP=e$O zNb}YusAkumt@r#o&0({}x+jrH=fO(q_6}UsM_&w0aJ>w!;5ulyX);_%T{RAhyL>hGq22*4p0;>qT)^|5 zq6ucaS+gtSzqCTtlOI9pXl5Mps%CGZwA>fy4~C&tHz(PEm1OHR>$Zf;x?>#xr^%bO|~{eD)@#dm@}W#DM1pVkPKZc73G z3_4M-3;p$cBhX(@wL4+f^hG6c*`#scvU}rvD-2NGSVD8F{eiaT$xe@`0JQyGGMBn_*;94^VTnL8ZY&fg%FE~}G*w@(cp`1;T-izDBnl3KFEKadxX zoBZRIZZP=Wb3X`0$5UzY4U)THSrCPO|9)V)dP-p+etKFE5gL>B+Tgwtg>^Z+u0)?h$(VXTN+r{T#Z&5#PqJIt<9h3$c|CG9uh}p z6g7@F7;WML_v+^%s8=K6HO-c&RSK09sw$d!w&T~CN00~qfjWkN*G{j{Ur#}L3(Bg* zTU+KH<*48P8iSPDtiT?5+@IKZw{(BoQN&`?@ItOQD|Hz0Z6;9a{X3Q16wEXVU;YLa zl=jw0xcm7nzx@w>?pCv7SL$-*6#{*$uNfmP{ z)IWKfUDdXgB5x*5%#_`SA|L$A&3f*$0ecNHyL{t_8h)cqyFKvWtLI=oYTe-q*=*tYikz0nz7DQH$204>WK(8E z;!!dAxjQ?A(50p>{cx$Slf^;eVQ73R(zbU#IfMHV^~e-s{jByeeNojEYhA1|`x?ht ztqC`u;{;@)OHe@^jPkMl5@%-LnP{N>gkztBJw?i8UnSAk_5WLh(?hnNVregQvWNtPSOuhiV$<>WOO~{nEyBq?g=wu9 zboS2O*^)J@Y;#|Z0$_&gAL1A4%eHn>gZFKI-kR`E18e1y#{Z><|F@5-9iq=0k;g`e zj5HMJG{1qt?S7I({7)o{lc}~XojK(e%<6@PBlf)^MQuz1VOJFU_avtl4A0Jo#-}U-_+mbatPN0-7`#j+?|V3 zWR?*KhL3DnQ?el48Z8+O%P@wbQ7XMvNL!Tfa_Bv@e%MJE@#!V&~^lB z$gvvx8pCenCCBPusRJ#PZVN!+Ck3PwtW`Jqfbv2h+&=m)!fHm5R6$dkFI^FRr2PzV zKXl?C?Dc?b9burc76*tPSzTH2)Q?p_j62EGVTKNb(F}MEEhKP-1CA)lV2~H6ECM-a zme>9uQ6vPA!SlnE1{nt*1LguUF(73VSL4wqEO3BC|1-9an*cEZd`Add7O3zqUayzs zuWJQJ4;XNV0c&3J36U_e|GD4ym)~XH0$z7e#{@VIiy#)I;D?|M2}psFEQ>)~Ch!_l zVL*;4Yq%LrGndCSNXqJ~_6i71EcAx53V@#`j345%7EPrug&u{8EB>z-$MC;ZK5uAA zz)oSGEEb`S5XYvOzr>JYGh2bmMY$M(bVN~*;_+NXgC8@B^$;>3O9EMe;&XQg%kkUuY!dQH7}f+fncd@AydwfjTpp_*TQB(!I_FQfFzDjQyf8T z_l-5GkT+ycT%$MtY8qO<%a#o@z2-dmQ73UMPX=Unrg2o4WA#9L^02m1a) z8Z{RClv`uV5B&hablBd2R|>);wOKZ`rE^~H(;Tg$n6<-EEuJm@4mMpt^vEfeKdj6M2|n)W_eIE)^FL7ZX4lpwXqos~I14+*FCy?l@`7wfe%Lp;<#F*#&6pV0 z6B#oD->)J_N}BVp+P>W2xVYu6syUq5lLBc~U@U*LyMHz7r)HxA+H4bNEtn~ojml<1 zgOdh91%VYfsf#k0>@0!5(t6+~ike9puShc`jXnULdfZzB-k{A)Y2a;T0#4jCN)!Pk zuS|{^WVDv4kisE%ilDUhRiq)^SCSWDCJhiU)e1ilmCvypb)zTNqZD0B~*8du8ZS za#?;hvJ=fv;ICAH>wWA$1h)c91OH(a8d{mQZh#Y2&hVb9E4!xcW4H{nZq~=b-40R% z1UX4s(JJuxh=Jfs#t5DW4Luv!7<2K5+P$SU6hL^ymz2= z3rUDMQXCweAT74gv^k^FJ?nLa6a%6Wo2QOB0O_c>`KW+hO%)rXlvFFpD6;5Tc`%2HB ziLo=6VB|qZoxiKbX4z9TO=0*>&Ic8L)|5}F66OU@)|$X2n0$q#n-)dz6Tr;o9d~1v z2c?q12qYy+17G=zwAJF3buN{T`=`Il%WYSf$}xto?OwW4Lc{wn<&(T1ubTe_{OryH ztpVqXg)~p}%~Nky*Bsw?pn-&QR+R8lpxbR48 zJIfa4ep+hKr?=YTD!x>EwDlnpV<8{;=}O-{CB0cJrnYxBRZYJrTKg1Jt5q}Q&y3Fe zP;<7r@DBX}`>W;64z|q4xWFZ5p>--=A71-}V>S8DVy^ksyPF|)F3GW=(R$>UO{brj z#@NFT(|SXnqJ&8d^^9N$nj@E<5ZWZf<6Bl|Or2k@93!*9_`bde;rErjA}C1#~l8zuYE zDd+T=!5c0FxsCt_^-7<*zzjw8+JR4M(74zXx#o*UKw%quQlott2NJ(bw z+*Yo8679q`GLf&Lx_(Nh#YD8zif)wqQ?I)fT;A63H&yx~y}6~8lAygp8Ve43$X)%~ zUKB?B|Il@oVNL#z+a4W~3QBhk6iKBSD&5_PfH0adKtf7HWRC8hj3G5bS|p{Lk*KKJkc{&~US8xI-m-tBgMuIoIt=SwXY@4xqE^44l#G9Y6thyMB)CU0d!T0_*Kz+cIqmBEe(Ip2=g@e5k;EL19 zie1t0S$2{4;}uRHh|W?CxlT?h&oy<^%f~|~LG6umCcde0+R96e(yG2K*u@Y7QmO3T zcw4mVgl#Yqm@5=gi(ab4p#%DCj&0(riaHb)VpLMjV=F{Ln1_e>^QNjd3Q~_QjfloK z|Fow3Elu#3DeL=Tqz0!R{&dAMJI>-Vx$!_EC^>TIYNlaAhvo&4oe#e)?}hyg*u3@I zDBJtPrf^4y?7C^=xDs<~D$u+)#^{=!Qg=76$bUV8H=&nALbSpb*2x7kTRozQ3qVy< z6dYnyys^K|cO3NZZ%pVBl;4G>zkyW0P$`PDmIqo>b4Kp zAg=fgcG{y*kupzSy*&NoiJRpQwO((9FpV91tTZN9rq6QMs>{s3n7Y*q^CYjxts(-d zidoC0|2m7O%MLaO_g7ExLXr!c*}M&B3hV2dB_;Hpa4U-jVfo^q9I&i<0mb&YM1J+H5&2P7Ip_&4rgR%e}%>H0`^U-1hw`iV758eIPf zUh`l65$%$VM9N|#L&Rc;cgDfdzNy^^Q!WxQCh2A%M&4z(oUVQSYfAFj%U|F~kDsD) zVg5uvUA{0f1nH|1|KJ{Hh-i~e1hai|6$BFOj!Qm8KM%gBm_ zi`qDewkhFr&MnU|m15#S$uoy@D|7(544WBf?5-%t}t>)t)RTK&520NU13b*;lk z8Lz*_&lPUgS=J!cU24oJ0(IaoD>i5eaa14;KRCS+rB>crLfEcPfhMi z@*)ZTZ89s=(BJFnU$NqiUW#s|L}XIkmJQ4*#yUz`Rc?X3!a)fKznJxo@;u)Nl1UqW z?O{4CpG-b;DJd%azd*G0 z9) z&yBKtb5`_>IqclfmOZX*f#G?Cb(M5h+2g~HMA1y^*$xt`&Vi)Asasu#JKnYabDOTO zxqcYq#gx1Hrpy=3#mqKcXmx*n#}!&|knP_|Ie0PFR2H@E5LnuHfE1xxFG(@A2+d-n z(KUJ15PGqCR!%qg$)kK_CR0TgMLK_bu*0_2T>eIg-Ir|m`?P?wnL05Qn?wCQ_sB6r z$b?~vpQxg{uz15Wf)3I~@ed1gN7;kPVi{h|%zGCGnY60?J4jr#&?1|2QQVuymBP<* z(DJHcQoo(u|oawALNpGd`umHb-PY9>hNOQA84lf^Y?3+`=zi%R# z#r-@H8zGXPbB+w$gqg8y6~4^fEU=1xZO)g*Hmg*+NZHS#BpD$L79ZHv6CNtz%H3qC z#N2(}{u%qg2mD=6&(vZ&$@6s>qQfj#;%|UMarC*eASmF=J`2%ZZTI)PaS6uSgth$- zE@y7$prepic$8(tbFzhfhR(+|P`STFl|0=mYiD#edDHn(COZQrD zH$){fty_IHbz7dGr>Nun zo719e&BQIG12^Q1QOAmGzhaN3>pg7&`gS>fT`sA(A3dCz-#7A#zlC~s=d-K-21)mS zrI3hGS~WK>;ZkBURTLwW{+Z!wGFsfn^dD$2Cjl!$l(Ha|c3LB=dH~meO)_v0-25u$ z{((5WWmJ-my(W}Q=;OpS(QLOQME?!%zFiG2n|<>5LI+pS9b&PkJyENnKO9y^Kl1i+ zCMc#y<6P4N*5swQH|zv&u1!fAklqbv*jTJiE;{Z!k&)h#2t8iG+a1taX>64I+m>oj zSHRs3OO4@4%$idRDPUb+%VUGR25K5l8A=(2uK7QzM}>SDID1%ZjXOZ z()v|O2hYBOY6k*X*_P!dSoxwfra2lje2=>Z`B%hBb1ekE1)_oVz>}U#cWquxU%Q_D zsOdkeO72x({w7B{!1G}(URT%C?~xO0|7%56RVn($krshc8(uVFM3T*sIXxy+!JONQ zzpvG{*1_}s)367q3hSVN2+k<0C#6ABUGjmSLJ-9{69h%C($^SyJzP+gdmRld>FLay zunz~aH+zvyll9ht=V{QI-cXT-KQ^<4b2&NK&Op$WS*qi}<3Jb3kn+~#x|E^!r#-%Q zTt}X}R_R|`K>5BRM(ff?^*PEGNNZ{8eMDl zv8tW7PES_kSt1Vj6`2)bSK;gC<^|%S^!K|Dn7)W89ev|2Ch@IsNY-)8r%CUR-uKuZ z4#O|Q<9y+v2O?jOx=4U%@8xOxFy)3zzlW(loZKUrwzH9_$M~`S;>M+U>wh4|x7U9{ z&n^aH&I=X8Y5!EA+7TF*ZY!a}cU?fTN%;TyqA|A<;f$?o=3@rP#*)_RhT&2?^BNo1 zgKEOX^@O^iPA`%7qRck}M9at6oHG}`iTlepbH1ERvQHK;^Jp*W1heo(?c2FQ^uQrUPO`wmKN!iBb#(l83*GFW&?Fr<5h~?R7 zY^1W*k*gZh4q5hD_2|jO&WM!`LcBLTPiFESR(`n!UGs?wp6#>&)*n-#^!OpZUHbcu zFGh)XL|qSg^P?VqD((Jkj?MU+5zSQnSFu;wLZh^9;0TW3iG;2QMJNgcAik}SBb2LvV&Hn5o##b1Z& zYYKkOe~o1!q!EQ71szj~y&C!nq^mkV*20pS=a>Bg53h zzyzllsR((T;}K?WCWUz)LP^HJ(N;&G7S>cupi;CQ1$6t6Ax4f2A-JnIDB^X5VvRcR zxB~F1?4eMgmZ_qh?@ECI(hcPdtbh4BNwSwp$)*h452u|a0bK|SW)zdQ9hr^5I}Ak5Fm}NCgFWr zcCD911Sde;+$skHJUY%PfZ35`Oo}59Uzk@g8gY*Yx$0L0gm(FLpor~^b}4^gtxn1i zg8_;OV1;omMWMa;se-{&e-tr$$hh(VT9%;|;0)Gt0h>-a$@nQsQf7guPRu|rScuLL zAS(5cMmzxWmp(UrEYS_n1T{LwrA#8^fLt&S1iUxSq|jbYNl}yC*8nWaBkUtYRLAP! zN9fZc;8)LPbZtbV%W(p7jt3B=iX|JZgb#qMO(5fP0w}ZXFaSQ8)k(VV=X=>&GQf4B z2(ZsCjNw|!qX7DH`JJoWKj<0olX0B5OlCjt5!6ei0(=TGKzs|dMpYjNdr>G*3f-Y0 z6U2bFb0z`PCW`E?xCZpr#Bcpmg#V#-|5?$VMz8@<^9jnYcsuIC(1(4pm7jQZ(pSF~ z@EVN}Pr@~mG#<)Jy+57@(k%f^AXZ1{;JgS^WY19#<&~q^fhs75cmftrCJ?2=4px0| zhhPtf+)m-tbCn1z+^GJ2jSGb;y3&NzRo;If(?g7N$xZ4JkUhh|<^p_!CvNa9U*(PN z-Kv6=6~VN@kRY@VmjU4pPr{zsA?B$}5n!mHbY(Mgj!=C-pzj9S(-mZ+v|R=s`+uOd zKF+wuIP|ij&`OVdbgasHhH~CBj?`u;8#DgV!0n6xH?|Zlg1#9b9ewi_=bT9<^&M%z z{d1$9wO!a#NcNn8BzlB-3?mR&G#X6f3i^#ZQ^dbNMN8Q@#%`x5x>BH(>MDskd9!ho zFYiU45+7OSdg0Aaw!7Ouh!ouWlZ{)%k6l%(s^s2FF{&D&1hw5Dh0nvfX~SDYjeAmjjv92x3CSaUd1rcL%iOiL!y9tbBg}FuSWa7 z+&6zct}h>$HmP*rHT2}i30EEB|6QPOwi62mKSg{=z!G7ld;5LyBNSyNN^i zh!KYj>iIV~WDl2e%m7%CIA3YWo)+~|69EJJ7>2CNIA+WuV7&s$o|5ws@OglUfjpYU zYpxWNkVQgBh(pGq8_H`CQe`Xh0l-szI)JiQ<_H1qUlE}&6=tB03|yItFbz%K?3Zs1 z2mlDj|H{`u7Rmbug$$(@YzMfy;gqDnKSQPmmWzj}?A*8#OxD-1D_fLenR zvdYa2`HZNVxad185z8SCC$r@u+({sG*ewNi$ts#VNcCDK}f6Bya&qoq-2Ut^Wl7WA#1UmfBRpx!6; zq2NEAn%}>KP~eRh6lhL;I^3NQoakm$NvZ*m0kI5h z;;#-3S~L0fc}WX|AErNY(}=YF4PQ~1NvryFxWBSF_1g4=uzDnEp@XR;dp!PWn29g< z;^FUGez$5m>X}pag(&N@@cUIJ1P`IN6)%Y{%@aPEEhYMdMw2de4vhURISX@aK1^S^ zU$Mz$vmm$gxuX+n(Z=;_R->PZxBAzj`N*x`Q5BiOIV0EiJO;3VS}?)Y#Nar4<0olw zl|NcKaoDAl?WCfq>Tq^DaP#%~deNVK{CE3gw6~oY3>iG@NrHrYV7vA#^@To!O)M_8 zjq~s)IEaaS`_uTry9yLiK|Ur_ej`mX@|8Su;}2t=>qhw!{p4YFz@TGDQxF^@T0mX0ku}5v(9UY;C3$DLZK;c&Hv~f~k3(~>-O&Vo6Q8Kqb z6=g848)}nK(Pxwu5ml|PRm$;_35zz71qYK`)7%XS!AmtauF=s=6P3MI(l5Vg)fOv` zlzC)JUIbKzg>!^v4W=$j4uIIg>ZKdItts?oVK|+eaxZW))duLy2Z|KoTqtDqo_S3-R;R_gq#h0yj<+)ub z7QZu^y~@S^?P&hnm+7P^ZlfZ90iZK`eD3*n6Fx#HLw>T;QZO9lcQ<|`%I@=8i5>dQ;@lQ`*JwmR_A_zueE@Q%WNyJ zt53nV?qKH#*=BRoNZ+y6U{8kW>79>h=_7MAtL8d>c-UW{?^GB9PHHw7!mGa9eqps# zF2EvayuwrQXg{y(H6JKsa(l9IEB~hkdjO)hd2*Hb)sufRDC)EivgSg+!dV=DzS8z2 zt-;nEx12wqJA9YoJkQd_(q#ipX);YzEG#Wm@X+a zw^KDK(0}pphd^d5R<_)z(y=VP;4$YYw%@0Yz)p3frVJtW>7QHBP9Q4aP7?vHZNG;&w714)2d0lI9PlKSc*uip|=}^wm1TUaE;2;U#T%!K5*2EN=Rr!D2~O z$|e_jgfm~;h;8ibTd1k|iV~nQV$g3W9Ey$H-rQ==!gLoJ-*K- z$OI2u3SX&YZR1NXH;oTlT>ixa#|`RXuKhh0gtV)|AhooPg$U{w&-)$Y*=xI^H?^O2f1yvl=l<0Z5(RNRLOZMhPrZpHNC#c zU!Gc=B)q}(mJyY_##=gT2k~8+2<=h&MF-{Zq z_HXH>4|yL$^Y4x>XZi*v`|HW|EY>Y)KKkx+c^Be?19{V*b={5c`)iu*`bw}~9~?CW z*!G!7Go6HGnM+yan~C2r5+~p1sn;NuNS?ZpW%DbPCZ62%kuhN^mQdiBR(LG<%-S2H zOJp5wd$BZ=Cu{pNA+5w-ld8=Iv3ToW1Fv`<dOxe*DB#4|@`8gQ)BJO&?NaeipH)}$jnSeE$BxmMH(b$^a+p80X zvEZwc-@cSVBTPkjEm@f|IyB;U7>j0O_i)xNO+gy0c`wpdKSDs`yH3tW)A>HZS;UXK zRhk+4@D*h(ihZ4Xyk!li_&xO;I<|iFQB_{8+<}iW&>tFB!yi8iy#BN4+#0^FJ4O3N zxG1T{jEpS%=u9wZ%<9}n`&^x0|DzXNmx1H^ZE8#ku7&);U(6Us-TVJh073rynpczG z5Z;CwL<)v0K#2(e*Lk zQs2CJ)N)xrO2Y>Lkr9r5A*dGF7N={GqlOwh9cnB5Mtz68Q!xA8V$j?4k(VF--tBbK znWe7izCS}h%FwSqGB+E#7Du|=EB!6r4EAqyx>MUHx>trh+7lnf^~B7XeK@cy$;vn& z82R(a3?rDI_~X9e?PbND{8n_p17)qxN@%#0$6qZ{IimUI%k5;#;g1XPurbD>`Z-#| zKVu)0RJ{_A*wX-G9DGt?q24%RT^=s^KrT! zlru{VutJU`Vs313KWw_!Tu_7W z#tM<2pX>fEjV-B3{%?CxnSD=N!Tb|m>FJc8Ekq@d4zd|Kkti~Q z^_SOPaLNZKmQ($857d=1dc7-L{k=|6)Zsr+TaVyEMNL8d^Mvyriy@P!Dqw!lmi>h~ zgj^|SS8(2Wpdcy!04aq7GN!-f@~ z__lVf^#kjzf8bUfqni1*{5dXhpEqL67*AdvQC@0y$yIz)j;%P@U~QbrLQI-a)kV&f(FqU<=tFcl!KpOE zBPfyhjkZI(pT>%cYSqVmuLIn&RHD4!LvfqBeJKB%dtO5vp!KZRr9Um)=!bZ#4Z@@0 z8nmi~wfp{Yawm}_i#j7W^37N(W1wV40{Xu!5*W7s?@#*+1hZgz4-cIASh6WpMB}*> zta1-MSv+CjHnR=)tVeupQ&UQN%U<$1Mh34#12<_7tY@Wbdz{3 zz!z`nXxraW+Slq9|1Qb*!l2GjmH7X>LEO7wS87m@cdt84Ak9@^aV-ltw7z9rH3m`i zgz_GFvESZ17Sm6^+-PJxe!o}$6NbFk6MXUXy7og=?_hbS($qoSxZZA9xZDYMO%&aB ztSoX|SA?o}MXQD<7Gr!&N#4UHQwKK@PKxVA@J&bZvkVH^!uYS_Uat+eD$(0dS4 zXkjGKy#&~B30S5x6bp#VN)8Z1k1<3@_AsNd{2(x16M~2A>AX^R1N~Ts(>+F z?rNMH1}RJi%1j}KE0L-|i1r1;FRBNY8PkJ;&{x09W%7x&%dp zurcgg(~NJQiJ3nYI(}026Pa zy#y`s9{G<}D!9aPYS3d0*NxDqq`DNy5NJp?qljjZ<1}D`8^C)VrBbvj=ZC^EHTTVA z@XBoG&ajP zeJ?11W{&_IubHA2E=MZAoS2Jq$^PGi%$A?@4S%d9xzfs2{Tt_;QqNqt`WT12@+%rE zDU6`S0xZYks6AXN&=Vz4BM|`5i`NDkC#Z*_PVlbEQrEgS{lH%eB2B5@*OJ-SM1TMV)rg=mL{aDtC6L~SQxc#+xdt@K|4ba2PSBiI z&uO4UKrRg^nIHoHyH@8I9G5fS_d#%Q`1 z@cvr{TjZ|pNN+UwCpJ7w8HFu3=N#q4EgnxwPt#H0`&!}O2BWiN?o7d!TYQpddZi6B z0|$x}D8-{x@P~E?*$$8^`Np1hS3+2wQ~nQ*I-7@Fs2#S6c(Ax?w~W6co*Xl9Bg8B4 zDf&Gdr5$w&N5!uu z;@{(FT0v6pA2CF1hGn9eQA7-WeZh({!0RZ%yElRX1pg&;Qq&9kC&b2LF9h&Q64kZz z#}IZ)1OT&^TTl`FBOCNg6Lp5JGE@P|)Q-zQcYHvR`hP8D$-d{>1zm{=S}(gI2s%!I z`Y788W{jx^M0~WTCKk-{jI5psIQn5~;>-0fj66YK01SkyiB1Mb(s*CsbcWc;AW$l+ zQ!xm`0Lnc_MFBTEG%{QKVxyiL@pIs`h=}OmmNY{A5I{uC9YZ*xsxI`6CySh8M<;(a z0iZd)1jE>m!aGYayRG%PjG>M@Q4yMzBEM_Eohp~+!|>WkjkOtD2wRY^eZWS+Oy$o` zfARSVS+aDlS(|j&;BL+XvUlW_L%M$!X`PEoj6w)>bpjMJe;v`MM?~!zXcm2zF%`ty z4Jk)|cH;I0-WWZ8ud<8gD6Gn)<&}HBIbO~PV9=UQ z6{FQ?@%Q*+pZ_WD^`pF@6*t2Zn_VO2xHEWHtJZPlIJ_2ep1 z!ZkhE=N;aXh9)EzF*!>VniR5wEB{QjWwlg9yoJoch~w4Dct zivIkVY~_oTWLWT4h}Tt{3Cjyh3$r-%%zT*sQ?UM-=)1rD5d2B8q0YR_7-!nEKa8Bd z^(2Fi38To~e}AAvY+d>uMojYX1dKb=bIw$RYn}JOU014pG11^-!}^Bs4|T5_6P1TJ z?M?~_6;)0OI|QO{ChiPC_4s~De6h=2?0oY#W4(h|QF@%I!`^vxi@&?0WOD$jN}r zft!1f#9}hoqE=_uT%vJIax;X=qIE9 z=|fD`Poc74;8%Ny?fv4+7oUg3M_!tJFx`CBw<_#qi6d#q^i*3^q`-Pg+D=P}DSRrB z0MPFbH!o{Wq<4z9H7u*UAJ>}9WPktD@7t61?E?lTm35Hq5_=#mG+k(s)e>dpVwx#- z{D^F=CorwDp1&?ux~__OG|afOGFl-htb{h5ug~U*+Z6Kk9gc#37#HsDLx*wD zKMo`Gs~C6aZl3+1t+R5RA{lv^(3`E$9aLI#bpxERSL((OdfpwxhiO(zCaN$RaZpq_Fx3w?nK&3EDzF-c&Jyp zvYbss9&>e`TYF)CjX<3ov9Eij2H5tybwWvnyE>V!lW*lqh$QVk_RBn* zV_t6pd)(QLkh&}JALyPVL3nSg3iju%XJ>1VifGmjRVwo-ifV<*ivR1kGU50Rv)2B9 z>t=rUXJ?+O-qZ)Sf@I5m7o{c%wj|ZNHdPs(nZ(wcTkg*Ifq7P;$9J=ZtWcI zP8rg#4VcAa?J&ssSYnX zMjgMM1OAsnPyF`GBE8vS#n?a@;+rY}OkDDiX}uw9wD-Zx_bgF0zlgGF>BV90Q+iswl_O+Y7u_Y=ttbt4#g? zKXp0J?``1JK_(>Y1hahhsvMZ=;dBJ9ef_64!! zNfBF5ybwJxU18~9RQ_CEe^X_^Whd0_|M&UQ0K`g>ZJUus99#b)x4tf6m^OhD0J5A)ZT5rLgpBYhAlU8 z6TQ(3b?(C(9Lh)Ee~L?fZ-{`utf_)&54)r6Y)AhqOXv-5tXkkZyPbkdVySfO=3lCN(T-Rlarg&t{lKLg0(4&Jyw<~@XBbe zt^drWowkqnmf%A=jB70ArY(r0E=tlJnc!6o- zgmwVw&loGO{9BvR?=-^9s*J46<1X>r6;?8&tLFMqn)q+! zSIPPqh_J{TF_6nuQQO_sqc%JFM;i|}qvbLak#w%`|ru+!a0@iZu1plE4lWGdlvI!Ua-HtRzX^i!7^9q zQE3N0pW55aY*j2_z2GtN%V=b;a*l@kOLAWyp-JnW35<=CJ*7BY7ufm||3<8bdb!A#uQ_ z;x5I#Q!Hz!{y8hNui~Ci%qQ;74P5D%pEe^o7bnRFZset zh1~Y6O?$fKT%z;y+F(nC@g~Kl%9(!gKivqXbW^v@S#dR!S;NoG-qig?J0RptrofUD z*aL=qQUjcv&=)ZSJ(3t7njm1w6ZS7)2kN5v1rN%wvHc*Q+?E z?g(-{$2`C;6dYOeABaM!`UiD5PgUWRcjYep=~(cty#29dRxiBMu6Z9KY=PXtTVBfq z5C&Db((s0xwHI^{2W!aW0uxHm*)yr3)*0?zXH0D9a>}pxhDHd3o|*n zFb$&QU?Vuv?~DCiS_9|;gu3tT1mb_6b4q}+!mRn)xV3tg<^VI}KvW9uTl<}Acjms( zKIx%Px6ByDQD>XWzeN8wOc%vu@y1K?szJ(kBIf$boV}muxG)|E#*L<0Hzrxf%Jz6# zJxM=`4xD^b$}IhX%b;C^BXn0P!6|E0@!0My+ULpPqYY#NFKg(CvDhecKm-%#AUb|O zl3knTwD2lbfX`l>dslv{1;v+jGpF{4z|g?j=A+Z1p{3k<=IpN^O1+feXm|`cli7hxxc+u$@IM-@Yq^_ zuurZor-5$u9gQq@&ppelTg%HSb}pJMOt#YPsfny0P=fyTU75`)x(glsntBnS5lrVt z$?dgLhCbE1_TQSj7XVyo^7W>hFE%JewsiG5jaG3)h) z&08#$ThkQCY?^FC|uR@qkwbk&kCg$U2cg3sUKb5tUK^4i#hkTrM z*nRp+UuIFctKckP$A4=w^tH6Wt`+Gsk9F_w$KvN{?Y-H4*A8LOA;(0^fpT`*dS=B- z6uBz42~SD1r$?_QS2&5MRk|#a==n}x=dx)SpX>MKxzcA3n5&NlJ8#Ce)k7zwtlA;2 zZc>-#soK(&5tzJ<7Yef8d-^OKp_~~W=We;O@UpLM8S-QNkNTR0`AjkovJ_bANRcP; zCv}ws?5YR5Mz*Umn34mCQqcdt250inh@~_{q!4j}7S4eAK|8x!d}Yy3uqjpNENJ>8 z`tE{YriRRwfka!eorrm&ePp~cOAGz5R`^fGoN)Uw=RLL@6)Y1emrCxMDp5GaBL+i2 zd@k*z#wSwBTSA%#A>sAIpiWRU`s-30Z{8iY|FoSxrk-Cnm)UHtD*tXtHvd+nqz_rZ zUvp_b_-5tk?;IOJLTQyY;lIh`Z|BJ0Tdifrxqh6+h8%o*M$WBTE>iCWGRnlptf=pF zU^T%Ub-AQpnto&>Pp`}+7pEWa${J>eDVE8M4H><2H+ju<18gYmB91P{)umrVVq~w3 z3;+qxhUz0Ol!}@V>Il-^3&o6ZodE`KLm;H#q7+xxl9B4ruhhpO9U0mOqww<)_bLIk zcYxAMEijc{D?pTcY^C3o3D}DXl=a;pGXHBqx(VF?4k5y(Fux|i7{oCJ3PAH2UQEo+ zL=Zvn>N^1Cku#0hAeaTv@Tf_^RE2;b!s#3hpf5oq%!mKLAx6ecr1I@4%Ck2 zX9uX4peyGL=Kt~a)b(#$xhN$O$}F`wcq3H<3cSLdtd^EUMzU}9l!g`$s94u1Pux&lByjm{s<;EysOytk(%q+sN?2kGJ5#7+7t z;zPzkfefvxQui)`4djgIn$Zd{Re_-G%sc8@Iyj&=YN&ZSBBWGj17cCc%bpb`_5jCW zz!n_908BNn!bYA}wKDH~Mv>eAzWex-_Z!G@!V`wpD% zfl00IQ>o^{$Vjdvb*~eS)Hf)IVu)d~kYIw=Gboesw;XtuY6cmJR)Y3!Y z2!)t_pYb3O&)`#Gb$P!C`WC~a-a8o)Aq>YFacLbAp{1d&P3P%venptzbkW#8ikh0Mo!Bcg87&1OaxaLU=US1Er~mBTZoZ9&jTh6rlbe zs4_k(`*|Njc&;JL!YIUWlHuJu_tB>;4r~`RGT&Na_MiVmSjSIgjp1^T zC;yI(4kx!38eEUOx4x6S(>KOK7IcljTv_|Yxn z+Elmkr|CS{7XgDgJz4yo1El>Q? zG%@8r5Ng)uc$nd7R>4$RTMSv<&W$SAu5~0>_$^qqGsh0{<14qcoAL)12xt3DrEP+3 z62Z-0-Vq0Zr$qWo^O|h}eFNb6qD;I)f05J^Ty-OoK&2KQ6jai$yvn&|{A1Od;+fv7 zZyEFEhBwjhF+_FJ&nM8Y^T@wE5Rbc(Q|pP}(pIDFM%y_4)VFD+fZ?UR@k-^BUK{99|^n*ovaF(u9KA{GNGQ8p zQucQ2jvfsSjidfATI^0*IkODQGW7rTXxs*zWc2l6D zomN3FGCX8Gr4+dLA}Q@)z)^t>6>w7GvNfjfCLuqua%G?d+@IKi3-GBx#^;UGBCcD? zXYl3JjVP5~Ib#AE2!@SADRo@kPMH#bt+KCF0chms30gWK30;u{#0VRQlzLGbIivwd z?#x=wULpB>N^OXDHw@0hF<;pERa67zg)=(IASH;PHV2FVdlxo$Zc zeDqR$F!;krrur0jpJL$odc#}Q5Pyto0kk2}+inckjOFg1S|5A9-1r@SX8@HeNek0Y z?}Vpu-jkMBzr)8r$r+^N<*u)PQFT_T&{$``ydmBBr~;#&DS2qkLYl{Fd#{m?GiT0&v~&aP!7RV9C)e_s zorCv~zQIN*H5z}(CVXhGB&x1U5mf?-6umPqU)c=_e%R046fS@v&`+c3YvaBww7QJi zCh&yvcbzJjsNvQn|0-*pENTBxc8>VAx`V1TgF-w%!xOBE4tTS8)~u6~PEdK3y&s=?BbFy8J{G(1EF74AAS(b!P z9P%oF>ZBX!w;E1AB<4N$fW@C?G66-0s-N1JVx}nMht4X+X$8xYkvmxegZIY-uA zqb9zVCMlic4TkvA`J-=D2cKeIyf%!B8~6=&{C51b_kx%bBQWiqQB}_+7{rv+wEa$n zxoq8oN=9n(2~PjGh@|NtUzFhpZ*{-X@^!#vY9cv%IX^qQ8u_T4QBf~50oieJlm2HW>B6hK zPoDLXhPRHGW&9`svC^I6A$0BW9z`~a&1On{2{=?jPebOqYsA^e-3xaGHkY|+=C@*( z@|rvKAU`v!-wy=OfN(4z8Do)*d9B-53+hQ2EaTmdU4$qQ9eBG3*-R>7LVUlQV zqLMDgA1K->)7fNwZx?ua&IonONjSu60dhC@KI&d9)yEa6=WeLDwcHzo|CcN-|7UZ( z+qaK_3E9Jy`RYxLcGHqdr62xozsP0TS!e5A<`st<2BiAYKK(tG*>v`fle}0F#FAK!F&b?ICTZXy9HB=Kow(*`d|-&b3waOaX*0avIwH>W zSs`Eh2*QH!HteT0sw8TvHii#sA6s$31z-5PUmdVe!3{tZJdsO^l0Avmh=B{be3UF{%;>1IYq*t*=T8zmJX5b zh7lsoK%|i&NC@a0-IExM(F21HX(mXH6p(I2q>=FV-2dkVFFAG}+dcT+pX+m-Cw%$j z>APSyG`+0%(t&+MaZBy@n193K4ou;t_}-qTr_DXov>vzevzFVLtR3{nw9j2%eAT1~ zF=>{iVKMz$^!3$fZE5NjPfIT15$tsDhE%XXRS(J;Eh1_9C-#ef04lhO`QfuWz@viW zLR_<@@z~OF)n$UjtoFOZ4)0CwG%^{sUbI2JE}gjk zJtD(24Dx6|$j4OkmE|X~ztaVl{kBM?ek^@8BmG==aOCIs)$$7G?t1_JSThzdC!RM=x^%eJxr_iC zt8Lbcz1z2FqV@nX{r2h+_x1zEZC(u(Q6nRK=<}hLu6?#mf4|HfudNs=2U|r6>Nuzu zq1C?Fz`6WxaP|n>+snmG?;DJZw;)%jIThy8vBjmPOA{+!`sc%rXyo0=6$dArWcv)zJ zXH{M|B-!#RxWi`6yA(&+AmYY6j9}F}=gF`xi$aTWD_5##V}XhP54T-Ls5|I_K0+DN|EdJ6DNiU{A)xumG zJ#X7z1{FtdYLS11FC~h9t7@>vjgxWcruLmY8E9W%zA*Di$N9&zRs^(m1x`-JxBKz zn8?lzJ-rvbAKa0%l-sC!cTZVA7khSG9faAWbVKh$}vg^xN*yLu1bbMk14s__pomZ=Y2Ul^>PuC`?Hu zeqNp~#q;Def5B?Pk`iHe?^^KrVNz|0q|Rr(yS#o{J6>{nIRUJY z8tKqA^MQ|l%b(ZZ4Cnw)z4=99vo0ZegK#NrJdAZDbI@^x+qzyZii%?3-b4W$&Pe*W38Cr9)7KHYZz^bI&~aSaEBXuTFW^BDw`0;B z9e!X@BHK7$IWe(*_0jNU32#*P8rfsgwt=g^oB1a!s{Jw3Qzbb)smm`3a1`p!Y^|zh zf9!F|Lq)1rQIUUdZd7CjMUY%fa?J?uR;_0l$~g_Mgz?3X&NMI zpm0bC*`J!vCC9QeWw>ks7QPldPe<_4EbsJDGTR1$p}TNq%hw;DtPyz1G+W)?V33eF z*%1Pcl)TyzKAQU(3^8%yo8>YO-A-1{Z~EK zwvE$H*F@kcdHZD!-gG8keYo~N5FMPg*maNRh%}dhA0LQ#7+I5M{BFOskSS>2J~PIP zwjk^^wQwv=x-Q3_WcD0Nqtm;8S5Q!&O@Noez}!JC^NXUZ>3zI-2n^;?w{rE&-Z`EWu>o@{5*$X;G(WhQz2n}SpW@p74>VPyelQi|`JBq$mQEz-N51fg5noH$ zNIsKz*t>rSE2Cw}%Xe|05nKSXH1VbJicX)Qm!j35A2_8!;hEDN$vBQa_?PWb#e64s zCG8=HiO>l*-rW6)1i^%_+nxJQA0f4LxqXo{U~s#%h_B!jnKZ|i*O2xrGDpYkeRnu$^T5Mo7)5$mDKI6YXUI|7S{+4AZ z%B=4>n)*`REiwb4ozR%Sxw@ci_s8=9_Qa;O3xl94y5)UIP=N&sOMQL=4pADih^%jR zZR?4B)n_s;SN!s+q4OG(@J{=15l}tWt2dwhiaCJQyV^(i(<*t&Nl{F-er_bbA=(d! zlAAMLD(95G&QT-anhHtppG~zFh z{PnO^$-T|cqL zlB$#p5TH~|;p1L*&7pgGb*)X})*!-#P{e_8xotea8FM^8qiu*`DI_$aYs8``(h zNQpO~cY_Ww^HNpUdw*jW6r=m|5##oj6P1{5Aq(@cbtw!!?JS>NxzDmdM=VQ)2{kV~ zUX8mJ1QwKx0)RE{`z2Cu-%tjbB3vf!DW)cTtRFE$c244-Z$$l@q)(7Y%6u}chRva# zo?1VYnof2WQe(ljH-raBlvU!_IQ$Z?ahX(x^?p-jz`7 zpj*IZ2aj$qO)j?*XH8iZ$<97miJY*>;qN|aep4-;yo&dSVLel~X*0WAlAi_BbSqE3 ze-R*Zr&i3m^IuKh(S=Xf95Kl>5A6qD^v2{xj?_~1;v6^BCt$jr4#v#t%<`HiJ z`PO(cB*qJ%3x+i{oL*L1W@-Fc|9Q;G;;dgC#sTBb%}aSO(^gTMQ~Z-Z_+9+=Q{Ek1 zmT``eL;N4UHog}q`4$_c){nL=9BHrB&!;mM=R+He_=XCHed$?hpD~q^6Bl zY|`Xjj(4o?nkcx>=F^%7*F4U76MruW4+1cc{KPuW8iBtF8i{aE!XW(KNp+}?7xcY2 zZA=2R1vSWx#RWY< zxREvxpM<=zmQ>?aIlynwr_yzph&1NhR%OA^!Hfa>Rxkgu9twb}`lJU*QQ5iE-!QDr zUdf_w+=y(<25eq1q{DH1qQ|Xxn3%ysBV8I0Spi%g4MZ{kj}@#dKpu>3m&1@176VY) zvMmpgRJ*R>1eq$yY8}fj0YWK4MF^y#3p4y$8;BumV+O8JWwYRTO@saeu}Z3f z4JU%=gP=e|n36(NxwZfXNWPTH*lPhVoWfT@I(<`Gd1AhS0!sf#*GMYQgMj0@)ysaI z?gqGp-04UCG-=3~_@_{-Up>WjCDG)fFQJ~a1}sI9)ME>YrBZ&gkyMg5p*nG!sYdiq)DFk8JC%)FY1FkMA$zFb4d1I2|*sS4f3b zsW-$s(U0$Ukhs5KwX%c00JQ; zPfwK*U63SF;XoDQmVAP7I>n|cZ9y)b((s^%fPhYYoW2c^#Eo#LwQ;dvWqW}R{R9V| zb5|3*tkH3ESYQYOz(+VX(ICn5v0PJH4UPnms6WsRM+!Ldg>I`#v3~_Hrx?(+z_7=+ z;~{1M21=P6v}M5DxvRRZ4T1ozYP5pM|Ddi>?@=bX*Pb*G09V$uL=40%<)^3rCOzHO z`8zgD0WE8!6!;IM1dO@psb!(tVW#)?(1xC%_E>1S3YEh`Iw*oZ5CHiC7bv(7XrOTY z>~YB?OD3~1{ku8~k@Wwh@&twe%1H0-EP(Mi1|X~=g34E>#)bf;mlB|yu0+i#j-iMk zMU*L78bPWy7fl(7hP|N7+6IJao7#d#cs@aDbu^uW1{e+6*LETUKpXp0xdH@fPEJUW z6edE-SPtjNMBgYy5~WL0+~Ip#E*>f28&T(OI9?qj*dsIMAq1f!k{FAS&8@eC3M1t_CUH?Aa~Dww_VyZaAv_e5beQ>#)|K$-1j=F^iD z*khIL;_eGKd}-HDzc}{)K!&I=y@Kn^=JB$h{)!uAL+jn)+ps2Ffiv!l_N41XN)%n! zhsc0{syWQwmj~ArFr(O6|0Cr#9*!q(EpyP1LsODg_3yu3@4rBIZnC^-C_iWXNZ-QH zz6^Wm`g#hUwfCz~rL6p3M?Ot#d#GOs*Kx`!2QjaKr+rhe0eFgVv+jRklKC+(>v2y6 z+aGh`|3K^x9vlnF1?!fKBVD&4K;3T9g6~TsVBsQuy6EHDH#OSuJVAIBR^0z{{CcNW zm}L83f@yVSX@_}diEUqZp*FprbyI)w_8iVt)U&0(y%mmPQh#-h4q{HwW}kt@w(110 zD!U-V^FJl(T$tWT8`2WmdCF^`IlXUtezc`0t;SdBPiSb8lh!J2z>7+RmiDuEuWQuo z-75IIopfeJKOXA)V=(6eSq)~{*Q6CZBz*k!E_UK-#oaiJHa*Tpd&BBQrMdZ1xX0&P zwB)J&)^3p`ic6PhH3EWCgDa5?1PthaIbIum1S77la4u9*%5~Rms3Aq)fTvED^>oI z4S*`UKla&7$X;Icaq)Ws@@x46pv6bNYlIgrMQ(+c^=XD(j7=*E&TRLR-S(B7rpM&^ zHuXM|1GGw}n-c&%JR<#Gt`jOCMr&K2qR)Wbxd!$^RWM*g3iL?12}6fYKEXjY>p1CY zL$RQcV)o-Uu%S}V_#Do>Pt)6M#Cy+A8UMk)+e84$Hl|(kozl~zr>bkbn)ux ze&9)UcTdVYDYM<$Bx2*W@Pjg~#2Xteba%y*G`$^<)X4_vM9pbS+kDRbMGSSebKO1~ zY*@u!3uFFF^ot}!`WHh|)X9^yiG2*Q0biw=L1ikEh-vlWg0}r#>wFpg4!Q^-OYkSsU2T8`)M zXT$_`fyPHw=G6_QttsOw>X-)UFU8f*d{nE30=ORuFO=Wm$@?tlmtR*bVI45!`r|f# z=juXjTnHU(itTpbh2Nr2g&|#l-9|$hJd-I5?-N`SHm%{f*mzo{6ig?haVjl+>)i*s zMCo%5^1k^$+SUJox>^4fmg_5z->q=pr`)xpXv=hS=m}xi%4e^?y~nZ?m9lM(W9P&g1NwxD_#WR5yRdjKMY$~*{Rp*5EF7uR zVR07v)fYlr=cFV$r&XUisYh-cqU$0)Fd?k$9OHWG9JxD6Z zrXg!n@3wd*;*D^olZBoldE;zZpDKH9W2GIO@@>IEpo1YjvaVNFK8Fr3-@m(pYhcu%Uh_63Z;X^4Q=ye$@DYbKw_wUh4_$lxOj9_ zVbz>G_TGIg56&Y0r>i|aQaR%jue70cS)*)j&!^hw6W0if?@DT`Ty}ZbMZ8V~QbKpN z&ZSXk-e1^YI6Ma*B&7JB*M_X^iK~cYbA^_m_%D9?(H`H|x|X*xQI}uMI!_3&IQJk~ zVDjFVFidr%y<%wuh*e6Re1!Ds8mO8N-`y6ItqP`=KR7AnMU}FY4v0Eq$E2-3x5v49 zOEmT?XB=0@2ci>`Cg zzSR=1HV9PKhL)Gy4kJ;8bbC}7{e+A$Cb8-km&yJMB7X2Q{~0|0i*r;;S@x>M7jsO% z(t`gsr0aaWAjCpBXC=EOiHvTBoE%0cDhc1xS@}DW7!ri%5lnBUUgdRO`235xxc1(cpwYs%bF(v7)m7;Fh|Gd#_r|){erp(IGgvu|Du$bi>eB8KC8_8{ln0Dt7 zryBae_-sX4kSJaM3+0~B>>b)=gpr67*b>);)hy46@(etL{mRkKw z5Mo`|Chk_TN55ldytDP$G&j%|$6LghXNGBbn#XTxSa`+ci+L4^f975tO%v$#>SUk! zceZTpJGfz&pC_zpf0g%|)`?^=&^h*ZfMI#N(F?a^bd+=f8omZdJi85rp{;6yLP+W1Dm|=#HR6y9T-+J zx`(|^h*3O4j;B;AP5m@1CFL;xd>5v}Ec0Qy;GjtVRSC^X_G!bqM(wp)NBQp~LH!!2 zgwUH$AKX~LUj8(mP;Gc$T}!B6>Wx_=`prg1@q9Y?a9vJ5)6?IRZ*?-1Yj2FzH46GT zk*z6CDh$ezL&T(|$mkmCtOVSe#m!XJLg0K2{Y!}f)*>t%;3RyoExo20=(Nh~r{c%g zBGB&NNhTJI>hBV(w4M%E&)SFbULcS~JH`N?>CLcgrOSt+1DvHBKk>`#TKoc?uE-*& zGEge(PWtPtWVo(qcR;-=!mUOxpm~uO6=OZRHgVXZ8Kt^X93r9>tUQ{~4oRGx?DkJB z8{wa7yvGIRfgq;Z;xOO3AEfM?-S=M^Cf+7ZQ&o0!9T^mUWcc;Sn%@rHcJpVT6^Afw z$;Vu8c#d1&x@+>>NKC#&xX`UVh3^BuyB;~u=F}3zU48Os^c(uc4&BzG7Ta|Bip^1J zm*uZY9j-5@9IzhGApU&Fk*}X|4G*~U z>{}`K^QDlYRUsbcIdraGON|jueq(I)sU!$lRpl3>xx&X4uxldzH~tXwLh<$t;UXz5u(5<;_;;DQj$1<9b5Pa<<7UDkYsK*bH}dM%u}8@1kCR`Ht-VWw#x2Rv`2)PLj+spL0^ z)fP@UfsZ2vipVprgmSY(c!R6*^nP&zP!jjQ_o%V>$GA?~3O^*8>2EOmi7$mm>&MEI z@(of-)Nl?o+^ghIv=l77>(QT2)sNlsnYuo)oL0AVp*94&A(vA#?(nxP!wz)E{f#PN zkV!;cnV`Myy7ua8%8I?s@!hBHM$1}kkax{b9CBng+OoP}26>r@El@^HjgrC*9Vx60?CXiRwbE%9jy zd=MRbJoZ^Hl&6yVj)iXKQX+-C`Mk5IxC|okQ`MZove-NSO3`5wZ>y~RU}Fa>x!p`0 z3)SsU1Y=2kPQlLAnK4~-NmW!!9`G<`^}KX055Q?%>n!U)y~3s2={)`zD804tq}66v zm;HIT#^LBWP$t{Kyoz&GRAg%-3=c2r9Ms~^L8W`?I8(B`?(0`yrk%zw+W!_8H2x)J@g;n0RJji65Q{!7~ z?r^bUgW?7YgyswvpOkCnL~P!2_B;MzbIGb>Z8tbGd1dQYHjqU6SGQD_AKgIL!`4`M zr|okSN00E$K&ZuAjvozRm0x~lHL)k9m(8zYb`AOxstCba`19x^n}7`;Z2+#D>;*Xt zKyIaVqK{+VD}DWin0#~ox<*@NqOTp+IEiC$>Hp#`KuL#t@zVZNkc9I&Vha6AZdzxv z|LJhecEqiT;}7xqtKVm|cr7h1DHOo z3f}2&w4CO0%Dh#~TlqW8aqh+@H(@FF1DBgE-!D9#v!E9ZTS5QnTUF5XiW=x{GV?Li zP}a*!@um*gHTw=Z5?+e?Q`EYSv?3U49va3x@`=E zO!e^beO=?7H?Y($kF-Ia^%KBWYiWvcF=t{e9{h0UpQ+rC%?H}R4X+hi z3);y2l4-Q4vmLO?C(z!WG*P}=DV@EVDNUPT`gtG9^hfKGt&Z+fc-(pwhT?Vh^^#XX zc9TQXl|YhFQ|3J>TN^F8AziHBhr_3{8i%PmS34#zQ!%8{KkQnAf7u2k#*m@M>W{dS zsF$9|K83$C)4r8O`m-U_I$;E}Z_>MbZTjz?h;iKU2!jasmk2tlhVr?-JHZuOC`$06+5)rpTu@A`_*PfHfwefW*QjL&nC8~Yu77t-gKSa+X$ zLtQIbjogG*@grEx`YS{$UJdolu3qxUG9z}v$~Y6XMi%qfnd7Aic7{MRi*2ZXlR%(o znS6)Q$)c9~1_*yH<_DO#psM4=1oE$;Q@chC;^-%gb zXi>g;%ivkbmZx7GE@v#}A&JIw*2c7OLyA_K$`+U1Fv%+cW~wjXsOn@oN&6=L8IFVM zarR@9eM`u%o=<;{e#p8_KD>YHO61DoDVq(R@J5<}H}~<-5r>++;I>WkFAk5U!Dn8Vvar+#EC>u6%ij$SB2uo~cLjDNb8k6g9USoS*hsi#UFxM0{G>5*+$UZRR z7m_q^G5%WnsXoAv$9aUkDDA6<@&r3wo%dU=MrO_lO1xbn$q=w1EB)q7DzWEJ2y};F zV&SMF4YMr~{WehL}fQ+sU+y-(4ke*v096>7P05<{$$@~!@&|{^@&`$T5>7D7DR?>j7 zxxVS?cJKZFw{nSVh6~DJoc?j6Ox>qYNRXgkicUTdY>HA+fRBoqIsP>R3AkgZqRF|j zhZHEVDDjF4cxBmrEm9P~S`J*v0+PVsV!kNaJuQd7#Q=qZ#19R^vH+Jza&Dp-S`-y8 zm5nO~P#DxE(`W$G{ZWBo8W3e-bYd;L2WamY^S|E%OL5>RQNT_>8+`Tw}=;)$USV0D3GHMg(nZy?}}La%}@9H;>{yP3?Uk+3_IglAK_x z<%&sSv<1k=&c{hS6^uP40)P;A832lmB>}#<|H-H>Od~=u;NaroYtH~}G9>}<5oQb! ztBs8w7x#(^04lcz7#;mReX_3tOK5$UvFR8cl*trQ9I1{bC->{~)ZPc!Aj?{i5R6lV zN~{332Bv>RjAW{VZqw-p166W63LYLQx99*J0P;*X6)A@?J;jh;Z9x^r(sZ;bwl)0) z09;8w2IM@2q#z&jB@Oq~q!erH>TowxiMbr`LtdeLt z7)Wwoiw|j7OWTz;hn6=1#X&YbYt{UdrgT%8GZFgzvP7ey~ zg>FGZv3O1@HG;0)f1otAt1@QyI{NGlq$(L&pf5m;c~6xDD@B5)0r7eCQIOH!4bXPF zlWXiNsbxo{RK^Se&@b$sMm2a4KU{ndtwJ{(Lx8J7%Lp8+YB*--7j0my4J^0--S#OA zE3`-4Qozb)_s3p`Kw%xm6#+&R1)q&+sRwzr-@y! zKIENj`Cgy-_|a{p^3GFOEHrYZj9o{r=KHRpMa4jIQdyzFV|lQd&O-W;j^gsg>1Obh1YhXmwh9H|os!Q(lIlBblRsmfh#&XRh&&{H~NdcpVEal^_ z*Q~~#*5DXbMIzZWQgRQiDzFXEiD_6$PNaU3Wqd^p9f&-(7d0&2Q=B~5HQuRg*MDv2 z)Mi)Y!(2AA+NXJ(v);|7xj1No3~-bLiIH%c>2z$g>%DJQhUs>^)|F2@$FS#`m}|Qu z|d3GA#UmH;@U5j04Ddv zc+(JPFBGUV)8D0Y5R@Fjg8&oR>7MG%mi+YMyrvaY(9k11NH$Fs3yfnx7o#KqiQ7+G zGi+?sm?RgnWE$-WI>nKnY-Gn`+c>uYK+mnwQKMC0&!YHf0RS8s1K^h6ZN2GF81i4T z8%c)8j|`6;Ssg_YM7Nj=V@;*4Ta*E_s3ioNWR;kBE#YyCR*}|I7Qk=J0edJwI=VJ0 zu0ck&|931GVA@iT#l#R`Ao&8gS`vcRh@LEMWE0?_A7iKy#FWmx*_d;H&n~GQkfyg| z01em$Sl=azPVHMUsF;Ze%0>{#7_58zkSX_vv+OE9bRoQQqX=<-Nb>#pyQd!->Vnz% zIkzP4TrW;D^Z~7e!`p937I`nMTvv>rcJC7u!T`#OdumKmyjlu+yH!FvCsE;~8ZNEy zsSh~xZ+;Ip%P%Z*Rua~^Y^-W$LCr-gSmtN?8X*P`QVTwc(V0`6 z@&vgR2`^Y$2;PmdPKaqn_YWaJx%KxeIQEzLnj@K=op{XNo-tSh zqkU+5wImv5@xZ%)Ypx#tFD_DxyE+0EZ-ruBOd-IFpCrmpqzDed9ajrC%B+jnl5(%T zu$MyKPe0&2Noi;llfIA)nNB+Q_bt(Qzy!2a)vPa8WY#w~id=hKKay$?%BuIZOb$U} zI&0JDIg$5@-nO#OdJ)Q~A2);a|Thty8;R@vGTgmF9~vsPur^6IqaLHcvq(z`b7 za+p_DY$IRn;y}UH+9cDXjN-@dcU9^yEewShzDtPm@oD zeX9B~%_y(QU}(o0rVQuXi29r`!L6bA>SraTxoaA@v@P&gPDR=bZ*l&cvr1IeGx-p) zRLK@;`7V|(L$;UXDfvu1v-#XY%eqUG^WQUy1Tb8U5X;GQ-?`-RuC#||!ABNLZ+xI_ zyP5;HTs{njMs;3RdCBQ7`*dNLkq zW@XxGQ{K>BY1Q-S+G;XpV}5}^`-eQdqvLN6Y4(lC*nUm}{`_#+j^8RU&jcf56`?4f?~$5x#QX*pZ)eJA<^)f&6I6u7&G85C z_@8Z#PId(7<+6K_Nguy73{Gt-8_tkG-S4NYivqVnfWMsIE=3EOyR_MMJQm9}m0cFJ za9%5E?CI9jh2g>N5#xs&xzZLt<6}E7oN5O)&`#=;OotdMb+dYvuyyv5Vw=4ZZ(&ln zWo_(;c+HYvr7P9fb$wP4T6G&i`skv-Tb8OuAKJ(BY?_ zeXhDV)vBUAVL;U{KVw$oUm0RT(%dHgH!^v`&$o_iTicbbFx!=#fD6TAhJJ3c{2d`} z6MdGRrt(usc=$Q}e;`jg4CHSdTCz+5m}(|RJsoFQ^t>wDL@x)P&s`cX6+Bkj{rXY; zBV^;lyx&Y)!&(W+;Y7!)I%WuKCQ>ZOn$dbjY^2UVu1mIB=jLCl07bQaFhf-3k5F-` z$eQ!Xj(3pjlcfeWvgc<*7KsNIA;6A|jn#-qQfuyJLR+Pj0e2J0$D4bw1gLf^Me~8x zo)6EH;pE{K_XaUNV!+Ji9ji=&}zV{`fatm{9`Fkj3-;g!YL-T*r;PO7g14`p24RQWTdrqR#CsVX zBzjgF_i{7~@xwWd1Y}k)6dpg>bL<#+C-O zlSPMV7<#%EDSk`h8y%Da=4Sd%&s_D)3@BjBvS;*Y)3h!34@?IHE_nM;$^%=fWwT{Q zvVOyKQ%w&mpZv$=7()AA{CkqA9@+usdsVlqrq`3XmK z#{L4ldLAsUF0S2zos?Azvmb)2T=`^{IMfaEeZOe-MdPh|`N=YHRRT)x&%_+(c{By5-|9!ldj`;#F}ZYdDYn~_I=K~O zozPF#B|UN9K@^?@#OP1voZ%b$Iy@T6VF44t`06pjeP@cj;-ecDBRK0M!%(IWh($kg zj{PNnBwV(-Gu;uLC3suY+wL|t7h$$K^ikRAw{o3pb+U`ExW!rquXKKmA6?37KKFu+ z*)L(iC@q2-) zDtZ0(_@$=BstjKEB(Mi3y_(E^{*1RE-Ov2)?#)j|?8lW{PHMiAHUko*HtEs6trmZFpnpnC7joJFDLzbM~1Yiq6{hgW-B`6?mlQ&ek~OB zL;ZFWj1Qr+Lvo6t*)S zO)rXv#6<8>z)t&W!rscAP{-WxWkaTS>=R^h$EA2;d^dHtS7t!kJk=vNS5)k((zOuE z^jkuTy|9%3H(E-;FEE&j#Z`rcd98=0Yt_K_RAqR&UgNr<&}e-$r$yMsL<+&XmA!FK z54~h%al{6kn?x`}Qo8;GvN`F&79kn>yt=j};(wr7e~_{zVH37|T$Vj_D~WVx`YcWF zt|pJ$YLFgB_k(AIhj$Bbh@qtKw>w7|yyYwXm%SFP2j1DR$a@@W|6_oYC!7g^FNH0w zmK8sX^0vsGFzhJ55>lBiUGm)K)@9b*=?Maj9%QKhcyi?N6-c=5+UuONHgI&c&?YIO zz?D|O`4MRsFjcs+^A&sQC+m7{k9B;puxKgmrV@9-`+Ptl+B?a8qwbRw{A zw#R#sl)+$SRO^s=kkpm`;Q4g1;9v8sKg zEEj~`1JYT7U)@JvtvdI&ZMCHI?}|9u$XPSo|FIhixcZGNvm@o0hb!I>(2 zesV!L+w%9s+p#PPEru-KF;3^88~(CjmZ~w~{>-GI!+`-uZ9+qV67mmy`M z`cp&eLu@?230_Zg!nE7;spQ-FrOgr}-CrlRvO&UhsnQ}=aRhbP_#5{|>!U_>>@#Nx z#@#)8hUzpwXe%OBjLTd$5l4LWAmq8sZYoZ8gxGwkjjczOkUSQT+1C2xacAS=dUN)t zM58OTlI@x6jz$ps!*Ogwn+^9X;ZFnkKmG%qSSgOZd6$SlSXQcj%97M!TzL(keBpnp zzqmeMo(YiuWWmC)D)~_*Om?>yL5RXXua=ViQDon%>?7pz%Z@v+e+ADe(-%sjG{E|~ z`813Bw^l}ct-(L~IeXS&9T`OdwQV%oOWQHMsIM|nwk*J7I^A>HJN?zCd70PSY33?_ zQfz&=M1IdCor;_N<#F4~MU0Dqp8>j^o%d(*N{f~m|#A;O}KE-~fx-pkB54r^;&9kld z9ou8^GODpD@ic~?xCbOk7^&vhsMg=4&8epJxv1@#*`CM!n}&V*R?17n@N25v1=vHIRgMJrg&j+eM-Tpu z6ygSY{ilCa8_~$|j1t*c=xn^QKlF(6$OL&u9al)47xk-2zz4g>eX*%VnBR&0wO2{# zXXoh6pch|kesV5uh;uqCpG2vkj$KS?{(2wu#C>uhwDl1;B%F7I-W0I$yKxKOXaA4{%zSID;Yo#}MM~IQb0+7Y;)<}snmeyivtN9;XT`#( zzPFx#sabeD_Kd;W@$*zl*TmNz-HK0ryB^#Vzl|Y#De0HDfx$7}+Dz_|6224(Yw{v?y9P<)?;|knru*-z!+uvtf91y5203u8oiKC0?7&?@YF$ z6y5Mpd{UkGsl2IJhx3~^VzRE{BLnRtvcHp~-4IcMD9L$MfhA(*2>iuVtt9P6l#ZTi z3Y3Sn}hYdLJ_aBJS9)}cfg_)qqAFgY#6#o(cQbrOTRRV4LJ#9H?83yc5`~W!S zP0$q20yINQ(zHwgE!T+hafH;U2S)-KB(%7A*aIj)UU~cr%mV<$AcZk)T8}dfn6{mW z4qYN{B#)BDAXSDv1%a4PaTJJM-RnT~;T|JXQA1)>H;Vvg9T|{;0ZDC;6sRbTBaiu1 z3dm?0)wFrXl-U;>1?0)QFq97CpfjAiD*gUhgB0L81*j|1~1gQsG8 z=|e8YK?Er(k_{lYL<&f;16UD1)n0&P3$$5PmrUI$v!p;&k{SRJl`^q52oqrr$~8S5 zA|KNRQrl5Opyml$9UapEM>owsjV=8nMSkOQdNvl$mKYaB|A5sWe$q)IW3Tr@PvcTIxiU-*2Fzn!sPj zB3mrgVRzeup7v%jkb=IHqOEm8szMDOaPF!NfuLZxuDt1}xWI^yr=e^w7cY=6X(1&0 zkBcH{=K;(z5%6A7(1Y^I!%U44L=c!fXai*$pr;C=Pj8gPG6N~z$g-Iz%scSavO>N zCUQtor$e9zpnvqaqw*&huxT(>5wN;NDww2<{xb(0XF6A&Ghp`;PdZri%8szd_knZh zZbsXI%c10hTrT>+;2p1tPFH3WY$JMf1CK1#TXA<1PnFbZ;hiQ|)GDVO$!nRzd3pX5 zkdz?!k}~ctH2bko3ZX*r0YWb?%!1`n8&REQ&vN*UExr`!rdz!eXl#+JQ+S^^fmuO& zN*)CbaV7Bs`FQwtF$%c!1Kkb<6&QFK?V)&K8q>=O0V^LH3lO9t4Y6p^EE&-oBRE+< zVy4=Mkbf3)Q3ayh)ZMphC_^neegsH`XMAH|6j~@{d2iZClh5{dQh$0!>gP&QYW@<9 z055=tk<>KwdQ6&loM#{^27t4vLKQ=bmrRgA&lGI&AdsqI_f-2=fgAp{Jo&?FT2FuRYftgs2TUa5yLyXL$Q!`eh&|_m2tdrS7o&0~ z7&0(>0Ss(-4ERTJ0_3N?Oe7^)2Uy5O5?pf?z``id=^Bd}YSBBB(Z7lPEv^ryrbU># zrM;A058a}ms9!@{LF0p?@KQqkpyE?rAC|SR;ow zg69}o2N8~%h{>`mm8x$M1~M;t?&#%-V%Ob#WLJ`@H|k$6GfoZbd2Wa)v`oH#NV#j( zM7kjBx1hOuTpr}q9M2=SBAKF>R8R`v<2rv4(S0^O+7}KQ(tFfh8~tD}oac43xXra& zf&Zi+gp1RW)u6jUc5mMy5BHKo$HQhLTBjHc4qd5V{_{1B#2)Ri1%AR!RZpI7?c z0zC-vSL+SkCD}$Ezh zD~<0>8CS%oHyM8J>~46x_(w$QYo)k^&VUZ)r`48M49-fSUNl%?1=`7`I5-ph6HOXHzepx1b_lyT`{4fb`Vkv4Pm4^xBQnX?g` z`3)rnqqJ8~660~kQ&yWMxf@yCO^muSz^-3^=}wu0u?nn-9yJ#@$Lo@KO%c+pGEhEV z=ew@>kvTE0C7dmr>l=q|$LQP?_)3p$nqfVQ=Pt*Z*JK?)f4MuYq;hSs-oSGg0-)jF zA{$5Ka2CJBjNoG8<2a$aHMxPC(%xFW2^%lNO06%ZZ;H6ShYmG;P@E3+dE{Y>0JU1N z(u)rZi=!9V7uS=-);~>9?MwZBE^a3pNjIp(Ru_VJc}*ZD4}*K&0Zd!Nu+4%}j;RU{ zRT?Mm#qNKv%PSZ7*@75P!R(Xjnq517GKh@T*;?BhC$a0`ahz4t24AmX!H(6oiCqB8 zX_>R!kRgZ6ygVv>*jK>{8jbag)UFy`vGITP<<`m^T4HcG2C=_N7 z3U2cfGO@LaNwc{}ZRx%HUNFCw1elQ_CeWNe(27+P15M?Yio_;6oC#f>!mp*2j3ImL z@_z~ui7*7tvS-tQ_f5kV!EWIx@SAOb=-49!Gs}?Q1`HH}(2Gs_R zM9xl$F%Ks5zNquuTcj*|S#*#4Z=S-m+6KPcg_E*uH@HOabyKdtpP}d=y5i5L&3lja z+!-ccsf_pjuIkO0sA21@(%GBQ)&gL($8>R)Y;K{*J25fa_K!x7+}WVNESdfsF|6iq z`VM(|>_ud;+mHW!KOrtH;tpnTo2RQSt&?Q*jzVfKvHC&3*rRNs?RX_vAqjcBbivxruRGGT^7GqTnN;=##5?Cvb$Fjpx>19b$^05R`Uu8& zmKxuc_fx4N<7*{#GrB2g))sF&(?>OUoF}_RSE}2}c9xM<{0-tm?mSyNLMwa^Q!8&C zK#f;~I2ARqpwOVs1J&WgHTKAVLA@Q1JpV#AnX3ssm;{EAY4j>S_d(`-E^S>gwR=x&x`Pscu zaXL@+^-4g<$bnViz-9pLOpUy;m3{NpBN`!ho66N=OtBSxM0^r2$g37JAL48HngFelV`$D zuika_cm7J-+^=N$w)p^U}YI;kdwR!e00u`N?=7k5&rDDs}C|~kG}%f1AJ;CAL+i=#qDt<4PfrH_MdE z4NaxXH_ZwE3?~`Z-JPuZB}yOW7RFfmfDGSBkRH>@bR0bd0iZ$ME*HbvWwTqHjI?c zXfUfm|C~PvOJO0%FDyUhGyj}F#=Sw*G~RRw^q{+?syL}Ak8L%2J}pWNgHYl);M}4! z-wbVy-0PptauH&-k*b_YB(pWORxgLX)7oanE&3Wij%fRa(ExR_otAusI7n?wym(PG zv=Lb1P#m4x;O~L5K|QRn>ffvnqEmmXp>wT0JkzdKyi5H?AuVr7>Tq^SeM8=;LKhZX zQ7gT)fCz0O=4W1i|Hgx1X+Wq5`tS6Imb+XZMYBThX<5PKrfj$mM0eX%xhf@i!zp69 z*D*sV=C`9NmZB=IcAc(>z?6XA9<70m)@lzwbWI>z7U^PIOR-mNbBQ^@y1fh^zdzT5 z5N$|ulA%#PCB(R!E6mNRBSp?*UUTcq@!+0`K7FEZuxN(GmD!5!_3Dc27w^fb#cd#> zJf|TLDk@i+a}#N;vTxx%1;jd}ShmOZ^RsgPSZ!;(y3OXc*HV&Mgl&7K^7H(om3DtM z!`Q+)P9dizXN%+_zL04P)uX2?3g-36gT$RwSuZ8&8PX37)Ni^jCK`~4_f`vA@|WfD zB$egeAl^-2Is<52x!zYsH?Mv9UA)8(m2fnZH;^&re$nW<)7Sa9&GWaUkhl4kb|SI# z&T_e#WmwwTK6UGK^$Uv1j`-ii5z-&v#+8c9|9lg*jmQ;8cn7^3z8ckYoF0^{$(3-~ zw>!1B7HlKFy$QS?(das@tbQe@nIEl}Wlk`X(Y1h+wxP$~%Yku+O&w-{_XJ{0 z3jOE0_RLE}jx=|>zUatI*T1T{JFjTJXV!Rrzv?w4g0IdcAaU??2R-85j8lFzr!yUj zPNL3yXcT>DW~g(>!!=nu{J8CLQitK}v6;{N9A<*c1$yxmOI5}VYna>P4Ii!hhiIS0 z&{oZG3Cs76*)OVl+Wq9|JkZT^H&zO1KEjFHSU+n>is$Fbnax|*ol0$jLm6MYIUP~A zcSnuoArG;1#esrM?(L>E_|_be_$X1hJ;uvg5~XmV{z{aXt$YwAsEOK?Ugj6l=G=$y@40FTkI(d8jWg|!xb2z7?9VmCbW(HJ4MmMzL$$U-M^)y{YZ9EQYCf_HN8$Qzaj4LV~G(Kl^>BN^5Q5Zc{>X<3xR8Db{}X{xHBM zmNXIj+@tCuz94vJ8uioT8bwI;P4h&WbFy!9DWqrg4RL+CM!TbX7~f|Q`QYa#KR#_3ZbVw{c-$CL_GZ_)-{WJ=YD`YpB;J-$3TN$#=g%TbRAHNEMu`)Lb5NmJ<`8B|fIp@$SS76FqvZv=(OD&AdIg zb}jbwM_US_q1-J)(2c24n|@$~74d!I)zo2qL!%1vyRIn9u(@e2yL;ho`OQkX%C*m5w4P@5yiu>-Y&l`_OJ>oh3-dVjIlZEx7&P=5OcM77D~2R z*{g(gEU)H0+d8QgYPXE186WJ0?CwS!7Ff`Zipxyor)=E63aniDgIIWPKf7PoH)lq$ zRTW`d@b!3Uv2l^b*`GZmzjnCSUgDsAvTw`QIG*0OAD_IgpKc{I&lqnp#Ko`RYvteg z;f?#33KD+yL89}jTP+oJ@se2j=kH~O7hNin+y!j!3c8;zh`I0xb}25oHMMj<50Y=_ zcKOPM-%UTx;$?q%oy*_+$s-cgUg0{w+pYHgVkuzv!vfbSfbJz3WDI; zW~tc~44tC?PM}hBcr&+}SD=@(etl}LI+pp)ZXHYv#)WOv$0%tC&IjMc<&c?r>jt-> zkvL)G@-frJ>bFfjAKds#oeEH^Qxu&tITS%_NjxtXCHJXL%|jtRA|GA#>DibZ3%|?U zlYGkmx5RY1N|M3@q8Qe1j+>~_E)4x7pMPGKWq5lehXhV!)du!6PS#QV%>%80AL;95 zgi=_kP^E%yv4!q89i*&_>w)mz*bAMwTp7D$S>truZY0y>v1n=)Y~OZDf<#>etUcjf zJq*-o>nmTYwU`xgLU@ua4;m2hUCe5(Q|KYHxd6)nYDF;%yup&_I`mY{wA36nA@1Jm zC0dddNN6@>d}QXmy!#OD9lLZaV87|K{imAH>`1<229-kb<&R{pTe+`4I2+E$BIX|u z)BLmUV<#YO_4x>YD@h=ID&cyvYiL&7^q5}sY!5vo-6x_%9GDsDPL;O*jmpe%Ouunm zV*LSS&rH>gbenKcsHbJrKZ!JDb+L(jq`*LTyIKeXc2MfTOsz+laHxq{#H4r4n(fs} zV{p~nm#6!Mv0Giyg^sn46O0j2V^asRYGxjDKfYAMU+vb{26L72urzS;9c<5k@eh0H zaz7Z)y>W7<@oukghnU`#2Fp~#-EwX2=Syin0xv$2*S=g0h3BRbhH4Ug%y9SJv!n_r zV~wNR0RWj)Nf9OezE3}CQH8_LUdI(_TdVPx^VFuU(7s^~w+K(O)_rgOVdFN3B!uCB zy88|FK#cv!zCX2f#M(Eq!F=r&i%`-6SouV0T-KN8UsF`d1^no)R#Ect_FDDB`3pRj-Pf&m+~^RS#>nRWeYT=+ywGzsnUFr|aKry7 zKnDMCt>LAsTY=pEWR}(B=3a>Km2?HJ%t~E7B=aRpKDsoQS5ysN^NM&(I+I^B(C2q} zNmd$9c3ydj6Y~z)D7?n$zOP6RuYzB=k(8y60)h6SIh>+Vc(?2dC6_3}qUziGK$Gw6 zUg|WjWL2J1Dvx$=5ayWbN3?Y-W)B`-8*nCh<~`_MyD`|*9=!6wef7)q)=Tn=u)n0P zTcxJCmRPW1<9I{Jub%X2(E((TXX+k~_GRt+Vc%DxYJ13;(jXs;zCW6<zxLtvM{N3{JzoixlPAcXWBt^*z+EtUJ&x>JVS_^%gv&5VRN3x6J)8f`=*=ou&@n&YZnZKWR=gp5&(`(ZupfCR4JdC`s{G4IZFGE$E~ zl~+Lqkg}Z|sLS9_#qCKVsh~H%4pl%*f_xR_0(!x=0FBxap+gdc83lvvP$A<=Qq2Ex5%L*$BYo8{z$6i5u$7EZ6yyPN z#red&%r3I{Z6M@YBvlM3`-sLr!U28)xy)(tC>H1elgpeHA`L-1I7t36J~}xJO5oee zMqe1M4jR)YEXxlu1d&8*Os6t{q&rUwkpQZ?nBed~*zz`Tr+(XD$K;GsK-u?eM+3(U zq=Wx~88l_a?yN7PQX@|R6Bg~EVt)3K#zZ49FFh}ezW6VzYrx_HAfAC?wjJ`Hcq$06 z3j()6Rj&v4FS^ttxcLQx_G4IcK+Mip<6~papnpIG8k0}B0AL~d0L-==LP17>oD#&N ztky21AVUcP!^cr!0OvxuxG%(DEI6O2k5U#Rnf@WNV+nwKD@{j+=!t~j3DEkd#redr zU~o>YqICZC7(w->=05u&Rb)rY`Uj~sk%$b0!tFttq_)tAe8^r7azc#QJ z2ZD{nz*Er3w#R>jg94S+)!Fo<^8@lhtV5{M9j)G{P39o$!YmYT@F)PT4j_jzLq|6i z-$wUBx6na_t5U3*FR}s3^tAzfM{24QcZM8=7jI-f5LU$d0Z*IiI}MPbbvH=5#KZO2 zz16_;zzI2BrO=N)Q1#Zh2!l3LF^#|V)fTts5eJo`U)W_76w~8CBpD4n<}!E?%$cVh zYyeWgLW=NjrR5Ci!~OKf4D5l(a0!6m)_%-Jh-1bv|H`*pk5VUX0hrTb02GAqPV@>8 zyGFc7(F`sbyR!u_uipZpRAP3>Nf8Dr9?QKLh`DhQ`$f!ZP9zjuyoEekM)@lC+>`@Y zYid^zG~Y)?KNk-C0ZgQjmDeMo!7QqqvO# zDV-Dn+ZQy+6P^0{Y+4mInj}>(DS$1G)VmX<7NJS)dUq?4Snx6P-IHPwHOrG;%ZZWU zf!p0r8%AfP?n6s%S>PH?b$nKR(ypYMKbmQqUw!If>gK*_?%NXI*qR@%)#eGT#wyE% zYMNv~#5SMFF@Mtf#0epSqhH@qf0ZkB8+GaDnef9MrGrzg;7Wzf}FO))$OceTX zf3=ZTnz^p`RdlcQR5zu@sGddzq-N@m-?|Rco_14&)+ejEMd7KAtii|jq)A`xQSm3s zYfZ^tMRfYLf8HuJ$BZs^8zmq6YP2jqIxa&|o6L5Wp6yXzv&wn;Cwqg9ViHDA0b zUU(s@IQYW&LQWdHNWHZ4m+xw@SGOLqD?#!)X*8lQmD+XXV;6e=6D0*7%nTqsp*yIj z9=;KrCpc^dF8joTYJJ0zhKRvBZoZYigIPO9Y*#b?^ls*@>u#uQ9qD#Q&c_C)(@)fM zby5AAFB1Cm&vAjgtJ*N3w-6`(T-DzVt&iS{tN+nXQaF?@4=O9T<_^|)O_*-eIsR3Y z8u*0YkN;^UNV7kI?JszZGx(rVhdLK@A!QYkB)2hFK2uApP`_B9z~+9^%<`qwy8RPJfrW}h0@NqJDYAN6b6LDI;EY|mi9F{(DSf6dz`j;WkWeUYc$|LAsq zzvp;`jQ#D#Em#>!Ldrv@U{*GC<}Iz>!Q2P1LLM|-mrs`}P*rgNsX&(&o?V6StxI!+ zNJHikyktsJRIl1JUm$-n58RFp8kWPBEH8ufnnQy5BBBa8!(Z{g8q0bG~? z<5h;-U<>cLN8jq$lwweH{{#7}h_2xtKDuu60~s$>srn*NFV9tt&cQ98%)lpQuO85O zN{!yBpBEN8{+E_w*XlWF2l^#q-Y2p1jR&9F1Tnv)nXlc*Mk1%er1G7XqIb|uavGab z0%E@?9bamG@YC-&f{aL&j!_0UkYbG6SsbYH0|qL&HoV?luVqSxrVn&>jkxOlc6#}v ztN3p70P}^!>*9<+dP2yaneeWOh|YJd0sGyy&vg8I^MD>|ve33YpwXqd^{wn7ZRETc zX_B?`?ePfN7Qpp$Wqh&MwbnMG6nm#7$vt`Uf1qNXnT9}yZn{4cpQZU(RJ=al)Ulse z9~y3VBYpeRZlU&a=Gw;ZYTk|L(iIg2MVedje;N@xW;(kvRS>~VTsfRxO?{w$(WIXb z+HBcM91Zw$upc;9RUWl~mNQpavqDFIPon>MZx3gFq_l$?p zHP~cu3`VG*O~NE~p=!a@=;6fGqfys>)MeYoTz1MNLroRekBTKFn9J;o%6o5oU{{l) z4+v5QVHL>7X%~mO$&BT~0eM)O#puQ{GRd~{B8#*_TT>?g;xP+%zS7SC^|c2|T>GX} zqBs^IVwo9`4EMEKey`MoYQvKydW}Y*Pr^tXf*w(bMS20rZ&ZptLH#)?O1d}LW9Z+N zA{i&wO!@L#zwPactu~;F1?&F?=OBL54YpmUA9a1^<*k_zXArziSHR=%9OxYJhhc;L zQpwWK-YOjZ)Y+E$_geG7r%cQ`q4%9HuNmPiL_Hxh-la@kmMrgQTfF$&CXP4ogfT~U zN#S?X}x2NKhX>8ah1Ze0(4umtkWzJcQ=r|`3! z_tW$UVToMs)p3{+}e7331+{YJ5z4b@rv~rM}KFrl1vN2=~@jM-IXRW588U0ZCM!DTM z{;mYZ`6-o)By7BA<(KH??0wqkY{c(23Bi(-Qumy;&mm1%Yt$4IWv6j;@xo%6T7o75 zPy5Tq1cMo_-FqmCtlH~ucXl~X!b#m#_ML>Al2tf+5U<@O*o#I@ORxz#9O90Dy(=&J^&2wNDW%4{+uvufC*W-)# zqyb^u1PU0*Jo|hD^FM12OzYbmq4Ycv@2pX{`r;;748bz)5C!b_wbYh(zKrIJ{>3YT ze$^y%zSUTC{o$nA_1-{nl4LW0rL2vpv<}fDC%UcEZAxjyNrQvk_su)w1$A1xGivKmG?721eoYr&($lT~gJ^$koJeRH zUAG=~6nO(U3k8RtpKZhVW-Ig-pH(TnGHIJV>Mk!9t^d%nfH;nqx4CZ_9Vto-*Y8%q z2HU*%#O1b&LDyjwg-)V>Yi_g)J$Kz&CZzRLg0&l)DgTQ7=DD0Hb54mbSSBIGND~D- zO_6maO_z#a?ov^&E4-zRYyG@k`!3oO@!p+%Cj_vGz@S54`fVH+BDQK z+55^pdh@Nwg>l1MHhCkJEAoK*T@t^)P?^lHqL!cxC3O#uJ-oBe%@2P-e!F1rp*|_- zt3gL3pFCLVisJjmoWpM{r%$9GoC0@juzt+C$7aI%8*$9~{;A2?n7ZJ|G+ROuBBMZk z_^32t!6>3`A(5S=ZENcwyXl8IcR@?bsPx8Z#S>n^U4F6G1x21OP+q>vIRg1KMP(HM z=g*`Dm_!cs>VN!w5X3e9YVqp^jTEHPbtrv(j67d=9g)fU!zvCYGjU&aH6D!mUKt&Y zbC%PLlUg;7fQpRpBD&c!9J*no^7wwB{NwO0)5l`N(OV-0Fg#JOe52`OmcdgTok zoQ?buX7#9N8TTVg6-1c#?yM&M7bB-E(rlN01w8&DT~f=r{54s6nCfzV=~r_?6aVSba{fvx)AT!y z?amJfU8O=?;kUW*b~sQC$$i~yGFmF3if2*3d-5!E|2c z{^&0sM6CLkn@#%Cg&EgNu7~b-KXDk^B!pf#>nH_$d zK@Ya4$tC3fbuCX46Jhn1`sKpT=)ks)4rNs8I#lNF1L!(vPW{Fg0oVhnJ28yEzhs+e z*ONF6T(|Ezic6j?^absh89By36tM3}R^1L*4z4JXvua*{b!cF2mB~%r|Kn4oNZ*$S zQaFcmXyo_7UxPQncopVghj`9f(~7gHAyin+rmMt zqh8r(oa!TDsOv!?xmrmv1-`^l+UO^P_25UQ@*^fRU6auRU1bk(B|7jBqv1!%cN`-5 zr9~jeJwJ~xjmZoGQhqzZ_IzHmZTOWj$l0#9yFfq-9tya3>&|Sx=$QQHa`p(nl)-xk zhE3wV3B}Uf<&jvnMS^mz7OQ+umed_~^|h5Q`P5+-BT2ED2Em~R5~i}2-kQ^Fc}Y#= zh#*H7DGHJhqk+fKhbb3$TB4}@>lLi~1>8txpPbqrJrqbAHNtlm{cy>VENZ8V&I?#z zUQw&M&)58|VB!3e)AU}hF&M&3CQVZH3(qq*BOpxd7Cea34yZVaZtoxVjrsU9=8Hqt zVBP*{OTmRqw{o*ffdC$!l49}A`5na}IL|Fk>X>xfP{1FSop_tI56h3w3t@YLD#@

zcZD=~8eI!=Oj47LK6O;JX3z9I#;q|0ZZ%5>xo@?8glKG4>9oA|^l^)B7O0Y1Yu^@f z<{q(l`3f>f$XzJPbihWalQ26#GLKIux?9zqZ7Oy@o$w8l@zgBGhzM%3HYVXO>9+dD zfLCDouPs-EvvYkMaBD5o)VI5sGCWK`b6p*`J z1I!hFUPHFU<4JQQ!K(&3ouW{yPT2_ZBoBL+N4Npd37zNCgQxQjhNePQO7X7~Vr3ZO zxP@EuwEvAbug>#y(itpmB#1IfZ-e9A-+z;(>~Db1=0U}Co)edyK0-a;-WsLHK4}_# zLyb0T+2_L)Eogj}f%5ri6nCV`?CTDF6<+$j#!9Erknw=Z%SX)2U{^ytfs$wG2ne*y*9JtK6 z&7A8A6pJ&D@Mlf>zngqh+}6w)VzLq&s!_5qdgh^ZYa(yT-wPv0ehmAQnj4PD$`(1T zI#Bm$jlihcJPJ?Vj*fKmeFd6U z?P#qZj59RXyBL>{r|r#)oLy`0?lR!N2v9ipwq^&qljbtaJ-*icf6lDt?-J&(wJ&O( z(@L4FpI~_m8;?|a2NxSZ4nS6?Y~l^R`{l&Bc#j#s0SEm(R%>&U!me}OPN0tyOwHP- zg(#Xlb!0$6m}f}LV@Y1o_DZ{-VczqF9rRx#ly&Mj4>%VMtk(}HysZ%z$e~4h40kXv zGKw|_`CsWpkV_RI^+cNYRHaJo<;FkSD^eb08&}@rm0%n=-~iRf5dn^3qq7+?vyrBU z2aPJfTzLZO3FkcOc~7*d2l4r8nHh(&_N?pH7L~KhDixX%;M@a>Ak7vLC{bboS6sVAP{Taji{UAL7dShDU+!(Hsx?B74>)jn=?xT{Hvc5s@z`wae zGRH;@?4KI1sQ88EVzpnXrHw8_PqCc(pO1KAOm&hEY@3ZhzxR?1tZa7vF^&-@FL7-q}tykC+q^ruW3nBlV;X zwH6SQJ(>VaI1s=ZgJkdqW4w{}+^9+WJtgr-F;!>4t_RW+bsp>llC|~vDj+abZmN?w zK>Z~vLarf16baT)srE^VTzUj!22}M$z(iOtJT(j|X9xn5OCPGi6~VLzYSTdYxv2dK zK9UxY7s~1@g0A#}ivAWxg4aIc0m=a&W7JWRx{Bb_`Om^gU!;%&S&O84`>_=K?w@!& ze2icoHAx6ungAhkIi?G=&*gw70Zc#j>vhXy`s|X26j_#9qW)r`ApcsCHP|#(~`NMKL7*m71%$E->AN zju3MP=QE8F^zn*mmhz+OqY)$!B0Sy)x+|>^1ETMr{#di4Da}(}1df!!vT8nq0sIi+ z5lS9#QIaNgmMP;K6wN8 zbS8=VkSmjI;8#>$7)fq@TdSeMP5^K`0Lrp0Nwm_f3+#GKI3Ji4+X0vfN_Gf_O-~s2 zlGVFT$$I52N!09GI@yfRM9fWHxcUoE`e@3fczbz+ACe_VcJ_3@~ZWR|K?~sd^yq9kuWrmym0`o^U@G9@SDz52gbCpaE`Fw0Ly1 z77%71x}NYwP3|9QoEC$qr4AK~{v(di;vNeH!JL7mOKKp7R6MW%`NH-DbD*)OR7^0_ z07S(>m|YEKLI@9mt zf%|~&DOM9+8ho@g)W}DZ$YPkw32>l4P|%1BgPs>m`!PG4pZH^MDlV2ZFp^H^FQ}hu zN?Xk^TK8Q>qUXt>rDti?;w}}*8A3kXSYf0iPH@o8jv>2!Hk-c6otNLAxoVgq<1)U< z!}5U)!;ew%F<}r!x@OE};>=554W|=|Z~i$7UTyE^!55J-y9FxYAN)2+cUq--*dlV# z{L@8xV1Zg=DvwX#B2YJNUSrdegxS9~=STYT7X|Jg+DjkSVO$qNv#Ti1zdHa$ow5Nrow7L zN%S&9Sm^gc`Cz3BhsZaBs4%5)msue*Ly_wRwRN)tM$Ft|=VnW(?wSI%d9}kghyS|sn`1gD5a%lgiU~WTw0f@8-6YSsL!@m%Ze2b^kRi4B*_2f8t&aO2n zl0xVrOv(ng<997+P&6#ECeO<_+m}9XJf+*F4OKiM%3oWPIuE>u|FU^Rg%vmu$oQK9 z_%T z+2&)dURyaqSQcnf*@0_if2ja)vROLt9LEU@0ZiZQB4wJFYLd z;m1H%Ixe)l_-jiLb(b>Oje$?3a*f3cJpffRX_9*RTPuM$ZDD$iUI0noJ z%^`%dxuS5YFje-+k{rXB@@dx6GnhbdWg4LX&eFg-`1;H8>8~bJ-UtVeWnm4bZH!a( zhdZC&aKM(E%b8K8+Ks{0UGo7HtXMyDOyjk7hs`i@oi6_aW$R{=Az_UsUTZiwh5Er~ znDds>u;W#+e0rk!};=v;XogWv|G*b2PKlGSLQ1-s3 zx0S+M%FfJl&3!2;&&6rgywHrZ1E#!CFJk|2NWD7uC2cGldPJqDy{-G@a8%#8wN+53 zmBz_%lXkd(_`COo1X#xfld;a6Rt?DvJ2QX+5YlP;e4?ALm!{X zk$R+TVh(y5o2rT`qRnwe;Z!J+RB6;yp50< zoc`HL6FmJV{(T=%PH18dcLXC!Sz{b6Uwi0(U$*#Ky@n+Ctzx^RHr=kE_vIbjZ0^ttQ0>FFz4SKP{F0 zobjVV-s4Hmp=K}dqiIb)Q;Q8C+E6agK3MkCw@rH68^?qxXBMo{;c+Frx2rtZ=s<{CcWth!^YHN=0CY0Ps=a1}O4YkN|9TI5U* zQD{#q%{R44yM$Kcx#Y>Jjcj4taDksz*TC2KfHKE+$9qnte@L$e?;hBwsOA(nHpmCk znIE6)AQ)$hTO^NaecH7xr0#qc-&W`TYp>mV8Ngf_dON?>qonf77;>y;nAhHDCbST) zUajvz=vK`j0NsVT)wlXTr6B9$&uEO0?Rh|Pl-q!_w=Wt0`Io6o?-9N+j-*aN?Jx+d zsSMqXl*o#bByQHh~9_>bJ z$2d4#dcWn*Z9LjcuE`L89CoBP=X`*>5oA*(%=Ja2Vzb-rk+&+|M;D_i+0=P&W)Stc z?0AQ+M~Y6RI79E*o#eZQspPO2sUFmls@q*x$rs@kwbB2kULrQ>U-KA#ge!BmPO#Hr zJJ)pHO|Cd3trN4-5hQKW9~0cTIu~cs5)y?ugW5j3;iM0`K|S`|ZENeD=EXw)tS4A) z;WL<9Y@9L1;%M={Q6^8C3k$RBz6{7I9n`N91vPKdXEYw6kYO0VRAZV>FB3G#MzTITt@>*_zK!$+iuY7;}-o zH`x$iBS_&K@qx~j3#jKPmb_^lf$=Rm+pnTZ+O;$;+$du@=8BgWe8L-EwNbk>6({CO zGw-&4N;3);NP5WVr30rhnm36H3;!+Gp0v$~gCi~+N5=jKDj%ILXf^bpzn^bOYo@#O zG@;nHk%i^$cN%W?#p6*4JCnOvdZ40w@MTRv-m-sHYr77ZixAyAFs0i4+6R(gjVH}w z+P(D#j(_WvW#eqhN8jnHiwKK{Geaqofq%kcUh6-7kn(ghz$lsJ8*l%nWt%}*!R$6q zbM@B){WlL)fV~foG#zePg)SEhwI;lot;!#AgmvAMB&a%2IfuTPE^hP5cr(iWo>jAw zGc)zcPn=(uzepAvLiDyg1xg($W=i+&u14Q(RbGeFDbsXW4@x%pvEBU;#|97mHDhKA zjH5se?ORGqi=`x_KMcp~YNT!Glb#sOKHQ|pucn3k#Nf2V8UK-u$DA`cuTl&*S>?K-PGcj+KRsaFjfA8-8qD)t0YX1p#pt z?!@{uHM1~2%gNO^E}i6IlivUbD&ho5vm~}>e8BeCw@+27+@FNkwOW>?L2kz0*}EYD z=oZZn3q87=j*TxG^kdkP8irm59hy!5h3s=@5Iy8nNP|C$JECk0ks8=$7BQdGm>n|M zR3oi4#}SRxFvchZ!uXK-b($aE`dZhm-IJ9)5Q1ichyH>@POHt2yG3W0ohk_XTt;%z zW4+76Mof)78VB01{~2rBJ!_GWZT z@WiXbmM3>PHCg?yyaw)NV-oFQ4ND33mxIhD$s;Fzl!{}OXEHxB5?K8IeQxpgZfTi@ zor6@>WEDrjr=gbqJL$6Ojs&-E=6F1~-pP^iqa7Sk+-)Czn5g4zI69l`TtD{cJhY}= zb%)7QiRq(x?)bJ~t-M{(0s^fq=~65^Msmwrrm3hetfrtyiZ6*}g%V_=8>mu5v;9cX zb6+M5#9u)dHBULp@t>HETAfEo0dTqU{-HmEsI>mda)pfrG;>^?=mZNB2RD#qucgUo zULi5usQrb|??%%xd9g+JquZk@iG0n^xavt^{FO;mefBOKOHcWKuYZGYS39owU3>R4 z1Md*!&1^WWbyyJc4cENp>e->0NfBKI*H~jB8EJNlX71`U`d}wSDMj%!(U#5<@n4&* zcFou_>L7Nf6(KRb`Xn-WYZ6y7r+}fevZ0&ILvv_Hk;D@dTIU)@9}-G?RU{XMEPPVu zu=UVe7iCwvB~ciY_^9}6nq<;^am$;Ag>uVSYu75DxHqmji)`}>d?V9$?giyILZl45 z(JT11ml9Isf046Q9&J8zSPyRfvt}h}+0K%@w#bvd84te;JnzOrv-b#Z!aB2r+EcDu zhGqrERcs54Y@M$EJ|GXEFwxa%yIjniAit>?WEuJ=H9;Gj+9*q_r|_|UF*|g2pTGYW z==X->6^H(%jowDZ?atYlW!O(ST*TSt0kQ7$!7|1*mCx6;OhDC3Drs3UNp?tk5&WV6z(aKMK*)6XHwRhw>ty6k9S*=}L zZ2w z!MSQn62;KfmP@cdM{b~|e^_!lM)JtIYMs@^Hq2M=>HE{COv|+rspI#x|9+8~@%gT2 zp~8~Ukh1F{*%ZFu0qM>Qvu;0DPL@i?280ee#9rZG^u zP2+(O>6IyuFjv^(j4_sZp6Gdqscr4?I=a3b ziqDyLUU&E1K4dk6ALyyBOjj52^-)8rzLVE7ADh^3$vyCa+6f*!2s`dIoM(8}9wYR! znvmgrtaA2b)Ejy8L}E&Kmv{XWe7>nWxm)OMu=qZ4D;Zh9(nNzr`d(5T&43r6UD<`-1cqt?m~M_c&4*^s4*Y4!rnc2kGm=DquN3@)t)Tkw|U2Q3z z)7%slF30pG&+@2(&X}Eahs~Oe2vf$UCGL+CzW#JZmr^atNJc;} zh4YsQoo-4xRKLKz4yu@c`i_V|ONf+tXB__u_VG@u<&usRFurg5qlWOieX1=v^MKA@ zYOC^TcY?vLY1YBrf)O=3fe3O>8n>O7+A zZC&H?XGTfZ$}w3{nlQ{J0u&UQ{P#N!wOKCbFS`g!{Yddx4bn^MDc1Z?wH+&`@Du7l zc4oAP{IX%PD95k4|&|vTTsp0Gd9{wBe_1Ss8 zu27zaJU#yXLI)wO=Z4>J(6Ik{&5Y|Y6oF7>JN>DgN&a+Dd=*$0G&f*aG}yBCsFC4$ z6A5o=5YpjoORuk3uZs(O&_ft4vUoM!6dxY;?C1OLM=*ua2EB1{H;-q1!JocpF^X=m zNR=CeB;4<2Zo>`HF$+^#H#Lkmtp#r~!b^Slg_a@goZh3%Di-s}*2p7Bu-AxBd(hPh`l*dJFMKlR)&+MSiDPG#fJ1vzP`M}V5mzU@I9a-{qIO6^V+U60 zH7t3J)Q{Mbl3q0*+C7uPUs4stYgNx?>9RG`dy(U+&RG5T`hZX7ngJxD0_Yjy{sVK5iaSk5g8lMyMbvD}MQ|YcVvrwZ=d`HQ93%y>sSh*& zui_{;cd4uo25cD*6$uVhcmap(f1QUNRjK@AMJ8%ZkO*29f32s$K=hayN>~D11q8N3 z#iAxH0e;7?{}y8PnQI6|u>NxNXvFtV-3_d1;Eoeewq1&N5jOy#g*T zx~O+l_Laf5x+`V;l|IU)*UKB_LgG^DwdwpqUll4hL6es!-Y%UFAO8sK`~vdv_6Pz_ zd?ba_juL=kR+6s=F|qzBf)uZ%0$){k*U_N0tXvlj03a{jONctjTnGN|i6l@C)Fc%p z2xK3v_EXgdN(zv=x$Gi^VLL%Z<@tnr8k1WY(!ff~L0?t6m=g^0-$NRpl}7QXoL}_y zEZGM3W8>KjAXz^Em>yIlr+4RgKGDDdP5NKq#TyN*cPK%R0j9gTg1I970MKYKkRFjL z?tA!&Y;0U>Y+R8H#p^xV4(W&8LJu`p!8yE2#fK`L&?4Z9RFkC$-A#2}eAEYo%z05e z1jqIu0|PQZ+lpu7@9Ufv@2L|J!dybe5inhIkgOi15UH!OBAKSIBGZ_vHi&KOt&18y z@ko(uOn*7!^IBvuj*t*2_KfGbDnh~cb0=9+eGzs5`A=*V1CYyQfkDp$E)52 zY$hEO{cwVh*{GnTNd2+#D8SCDQ3P&2FP0l4Kso3CSIQwkE&W<&IcdK6#g8E2rep?= z6}>pQ+!dC+~kQ(e{IU!ZLQC!CthJcgiFM#N`S9!K~ zC*8P?ysfuo>ATkk-UIWC8>VK${bQzEbJ@Y(2J#ss{{scQ2XYO4ygdM%(mTnL$C<(M z21Dgp#}Sjhf$NlFp1|Ft^hY(zdI#so&q&zF`==TPs=%tv zE*AOB71gaZ*k-p7cX6b5(yS@RK3-O=amzkg7k*7q#QxRTttM%GUF4=?gG|Wtacj<2 z+U#%XK3~L#rs>2K#kGz;VSN*|I9_SlS|4IIz&8l#WhV-#q-l54RiEUl`veMCUcrC4 zb@9&o-XandWXIe5Vj5VchYp;yYGImVEG|Cc4F6C`SF@^3p_h7mHmHBP9tdt7uP;h- zIXHfM`ooL%yHVZjRj4F~guS1Zl0ps$rHf&%{2}vvv<93LK~4|XKX^gZr@|T|%Nm&v zJX+v%j%hPff*@U$k~P-rkQv2|r?xy@M7Iw)3#`%z4Q^sKz9bNxR6 zV?mt0*B7)$xXq~9!^_@Vuhr`pRq+;*il6DIUgL(d#2raePX>iaoLE@pQl>^sXa5w3#F8RqQE~&d$b9i8|XZ1a|AkVcxQ?d|j>H zF!OH++DLxa+mCZinprK$n@v-P8SrXFcUF<4xj^`kVHr5z}^tQ)Xtb43K?QE;&A zk=Gwe0nZeJgT*d6=8KNNIG~zPF^psJqZC{O?Mx>e@lPNDQAkHY&1WWBM_Hq5LK|qq z0N4R=qL%ks6a1SaiB#w7T!b?`JC#n=W0D0DDI~MEC%$XXbgu7nqAeq({@;-kV00ZDo!>)%8|M@T=zAdd3&*Zu%9-0ty%SFynHI{2hyuHoA!{+x8^>TJjJM)*0_0c zc+VNF`%7|%5A&mU9jl+6O_QDmM@2pBV@T8n-MLpC)Y5D@N$<4y?;wy!iJW!yu108O z(yq!Q?u(3bUF*pksmCDpu0zBSG!23?5cz{vZGuFR-WzsVIcS{x**|u+1^)oq(PjsH zUBz+s7s}B!yvI5Fr1dqmVRWJvw|2-QidQR?++zj$2TiEW>E5~RYeJU(0~SJ&z@$lJ zf_H;B<0^An+I;D#4UXYuUbU<$bY^m=)Zstj5!9iOG!rIApv86C99Nc`eC5Mqr@c$9 z8@(ppOPD})3!1`T7|k1g_S@=fMrL|*UPN^FCyqX0UTdk{MwgBW@0zh~;<0>>7*iW` z#@@Be>*d%pfO+UgtqBO&Mvg!*>(9L_Mh7_+=ig|a9Bq`YIulmyHEV^Gd6Mp4l|XwI zjKOr4Q|X%Wy-9a#S1t)0o)5XM&%?UxPJ$MZeqn+;)9<_`Yj<|{5zGTOEtA%vqK-FA z%Ia}B#uquSY|ww>#YK74J`nOJ5(z;d@$FsKhj1+*Xykn3j%q;3@rvf*Na>s(psr>S z{*ag$?^}K`)D@q6e=rO>S1Dzy!!+9+g1@F}q6f5CxN9i+D0AXf`%uUFW~Rfr(CO2|aUt@UFzD5Z;-3mc)~|VC5Ld}(QQoJp)wKIYW{uZq>`hp^ z@m;Y~40z|RXs{<|bI5L>VV)}{XxMhH()K%fuO^NnG7jy&-rm)Zb7PG0Qqj>FoXHFg zCgv5VHLedzsPSX9E>ii(Ji|ben;_Z=JPNGyaftaozLdF2Q!GhzcZ6JHxvdLF47k9o zMU3PYtqV879>$AY))O}%1sihp_O0DM;E~jWSo(Few=Au-m3s_zuFp!+qP36hH$N)% z$?sh>uv4k4(Gg!83VL-kEUnnYCzlBiT$-@AhWGbzk1o+qE#0cCNiL>CG4gDb;C9_r z<-JA*-Yg_b`q!sR2?%VD7QQlbW`y^Vv|`%W?0|5@54}@q*8Xw<7s(Ojq&@2<+$Gq= zTtpAd*!?SB5LOV2^2EIWt>qglBa5B4sib5`HpK#}f`0k$S_yO&KzIqhQ0?a&DB5Hg;|x!aEp+o(UeP{-Q4Oel%5ubPLZ$URb=pzs+C-TeJi|8nBqmx*R3{4@z@`w zNk^Wa3{Q`iX*lDqDmiqGO42>?T*?CTk6QE}Ba`xGn{xt~PE!X598&|xrSU$qX+M-F zU`KyiwHL%KV%wI(f$vqkLu5vv@4&%09@S&Qo(;M2CEza}+eQ1#e~al`MlooHZCLz7 z)h}6A-o@o_MCbZfU8df6pHf6`>|q)=c^jX~x{Vvd8g7GVkz2r^sOoE>w>eG#{3zsz zu5$L8KB&Nbr^-X$F*%|nrk)%7C~}^I!sWG3H(i4OL&v`d8e14xB`m^ zZ~=M@P)MknPSn!brUb>YP2K5Hhd84-6vRoMDGL!y--<%nG=@D}-lPpssi)?EB?gS- zRC)T)8h|rAPam7%>$KzU9M{X*p#AgvwS7^lpr1>*i1WHLUI_<-W!5g-7G#Tg8T@-u zVW(q*x3!k(ia{B7&N1qJtEtfb8tS^3NiM%}5j>}SSEy+I6VmipSIdkvgSqCnKGCso zssJ5@J0vGI&TB{beWhuNrezYi?rWuvC~cQyF{%%0W6zWAO=(D6)47{01Cz~0Ne4MU zg)}n}`qev&wTnFDdQoyo8c4H;Kyz67jifS@gN*j5?sXnm3ba>cWrcx6fXmg1yu6q zg|`H4)!kj$gY)u9thwynSg-(!Ud{~G-mnNrDI%MAYwqr zwQEgiM5Iw?X6x3G8*3j*S4>kjo;y~yGr0HWKczkZm>c?gQoy{N@}{G~40+?V12je3 z`DqLp1EKY;M3ro8ksX0{Jma-uTF4WT%X`$ii!nrFn#NJPv8-fm!6x{hzj~)MeoU)4 z7{x=T-HfPw;EYzpvE~wvqmhwQYdaOVi5a`IW(YT9psf2Cyt|g&>494MKGtbqJRERp zq{t(j;9#l6B=)|z?Ux01g7srr_f;?<*N``n7_bjt;BrH5YCZ&A`x;@gf07|m-6cSk(x zS)P5P*l$I)mY!6L}RU8IP0mESzlun16*qs zNJq-8mK}|B7ci~G+HO&_sok2RZELdo&I|W=&$VqtnfZ@e-59gZd~M)Qm9MOZR|m{N zUNdoLCA@`tVDJxISJs3qiM7T->MO~7ci`lL>|I-++aWuKIQrJwG-S^tQ{}7G1#VLl#nmp9FEmmNMpgk=C)D+kw+`8W9Jom z))^QdFm&%!5`QJ|D%?7ck`6h~V^cfy0@JFe)~B#wF5+zR8mo(_=V9^y-lC-3uv|oX zfa+>e19!%Qb)~uN$NEt-r&Xn-pz$e)cUpTerBKNsOI@D9PjzT0S7uZgq*ov02Ws3?L9z(Hk zh_9L@DG@tk&VMsgU3l8=dq#y}5wjDP4V*1;9(#_ak)?cf6`%HfChpOT%COIu-Pr5w zykC1^Ya9t2OcjaU&mi`!&0ko#)hF|3ae>iCL0DdE=bBCJ_*SsN(uBE^)Y_h3LKF6p zj-{eUwKR}DKMJl~icFLAuA3dDfXX}cr4oQ@w{Dbkjw#q>r*w7atyb?zk_n?3%{u_S zJJPFdV0{fB!4!-Smc(&P4)akPyfYurS2Bm1=_he7g_MlrV8E_iF^#w4qJIe^_MP7_ z+s!qm3dKuQv)@ND1t#aHs-nNC}g(zt+*O{A0S%}WvUlW6Nz3gf@yQo`Xo)38{u zmdva?!-H0m6nIKH1Mg79Iyc`qBfVLQ?lkF!tmSbOCLtSdN`M@<9qUqP67YT6B_|nHC`?3H>V4 z0+i^?+uJ<)(QZUChsJ$s?ajBAyG!rKHAgsNyk@S$FDph)R99o*yM}1xjk(%L1KPMm zeS?5absiJD#-t)0`8@s=P}~mpO-yQy#y(oymOe9#) zY_tn@NgrS(dy&bnPVjw|ygn2-x7tFUqpfll{{Xwwvw#RcoqDdBZmHow00ZPaipHZg zi9^B~t*Ew^DPIg6jAQQApAkATLg4YfuzVo?O3Rd29%}=U?_CzWqwI*md-SCT?~Y4C z7M#OkthveJv8L0WX@ti1;TW8N8v?dc5piMV1Nhcd@oQ->mlQVdA3)^xuC_!xjV(55 zN;Fco_D+m@)l0)Hva$Qydm7NOvv?CSHe8NzOuDd^NjKZb7e9CrQ*hGeZLpFll4Kh> z`IpwUbrxf1^7TEcJ6$^AWZiQj5IF!=gGU?2QO0w{E@TgMU^8B{SW8%%5;-h+tNJi= zY*67;9t9xLBSVC`nPdLu?25k%LvDc)z#pwcs|C9po|+gsk-AI9hB=l3{{VJI6&!ur&49X{9nPQ^Z=vz981cakZ34Ah{KOE2B7S$eHx z8;fZmBwPGb~R)jwr`RCHP z+wBt4-&T8@#JDLhAjgt3_*Y7GC|4gL$EIngRF4PbW17xct`U8*lqcB0(exWQwLi64 zq^P|=d7tZDE!0L>U45#nYOBuJO)%=OwZKlJrAPMG5q+X(N^|IVr;4Fybt{p#`2PS* zfA#5}4Nz^bqx;`Ge=4)$_wzMtqs}?!^37*>K737jndHA8m3r#3bkxp%TNWa-Qmd31 z#Y$`y2MhRBsCbhH`_+5O4w=Podx3=|mIvI&(x}|pvc}teE2J@T$f#$x9!rJe139XL z_lc6w;N%!{O{wnJZ0tSzR0Q!}yiP_+gXO1=l*rE%@=q1KOxR-`>KVY@Q*v=pTy+#n zV2H8dpWHHzHQTNX!8dOheIQs)(_F%0ICfz1>MP%%NHG<7rpohe5&oO;ob zKnss*Oj3$F&;UJX#TgW4fCI-tMmgz5aYkqW_N1kw9GU<+(MD+EfDZIgo+u}io|FI% zD4r2i@6qv!IGyrubgUv2zpacSrpW#Pdl(?V-#Tep@(V8v+^`eYX zKnE0K6j7Q0Q`VEc0*v}|Km{QH`%&JMjtu}HrR&y#^b}GUP-rLCf!3G@dNJ=u<3SXJ zA^a$%%_kY+m+45aV*}_Y$3IG5)KUQeCxANB zw&Zo8K_>&fb)FsYHTJWKpDvG!2G(TrCl zPH$7v?JrLCfW&=3u1itVq|@B*AG_@0y)E-H{m?#ws>!CqJZ3rL3=ewsvi$!5*{)i< z9N4U~m3Vuq(mcbhC3Tv|gqjl4+GMUXjMptBZxa=DD#Nj_uEOIfVk6B>-1$sK7Ia;t zM}b8yI(MY&U3WP{`BD%`rRmsFPT(dzXyhKWxS(|7tpGNXosK)w4rl=nTv3eXl!`;g zYCr%|k6!enudOFPod5@|0+X5r04^~{Ui5VSbZ|RR0%sJtG=q;ybpSMdDQL+wlmPCg znop%JDG0_+DGXlp5s}3MnlnrU_M@6J>qdB>10)`3#(1N(08j#Vqa607?Lp`$0Q%An zywdVLX*$pX=Z+}{JW+$3(u3a=fK1RveW=DwDH#;NLq;+vqqP7SqrDV+(g7%=G*ALj zoYIa380LY2%_ch1jztHdGyon+=8l}wcj-&gfEJGQV~QvN597@zdR$Ox0C%RIw7mr` zIQO6g`q9>ptr_RqfETSL1o6_7JWv9PI*ybK(0byK35;~3)|B%{dSE6f#~BniT3mBL z4IfHeeiUMski_dr?deJf7^5S*0r=5y3}fDmW`OISSWDXq+)i*!)m z-fHi)6vU!I*RZW9#^{&*(NOUc8iG9KJPWJ0FD<%#2{fPZh+aoHjqaoC$qQbT7rkX( zCflVw4Nte5A0jX#_L=dt%{>LVW_`_stJN{3c`$I6a1JSn9^ zs4RO6C_Ndgpoc=!AzUSd1L~Qm?#|6g2Hw2pwemKKiOx@{aYZw03?mW48jitN6%5BC zHF{(6bmpl~%y>2Nxw8KNXu0j+{sOT$_oOYFF~ueT?Otiz9r&fkG?=5DP$9s3^rSs# z6laPG4%AW_GsQH7BQ_0ly8gBHc-|NsZ*HVj?O#z#J7(_9z#g^2Nh?huk;l%*wS9g= zl_`Gys`NaJ!xrQ2L}4t>U60Mwnhs4%6f#XB#*322u&ej_T3AFHN6Vgo8v5^VO-)n2 zr;F_5*D;ljDcBgKJemz|W-0cdesrB^#sI}J03w&ADj_H3&1gZPUe6Djp%rnRr>%2U z#L}ky_hU#?l>QV@>Fr$xiL5d@$1@h&z$d+6%?z+eQdHV|8fZAdQ-%kFT)5mFJY_Cc zZ9=rDO!WAqSx_>OgHOeA`c}Q=m5y)+Z1%3I-sT&K_alRz-Rtw*ZeLdmHyJGtq@jq7 zSlu#gPzR+P9)^M1yyKuuVvuriPUM_Zaf${6W4$3C{;GE*QG=Q;Aqd4e1_(c;0ASMN zBQ#u16}6$}>C&kg%4eGMBB)0z&U@FX-o_rulykXAuQHT=`P2@LUvrU8_J~o*V zP{SO4R4B(m(u`xh2cG7=+n#V^y(TeBjPXZYQOp({lbUk;&Ch=H!%4dx_!M)6jXN6$ zzF?4mSam0$tux`9n1M1pAPT^;zk5lUgEH>!4MC{u8ieyYz1x_G`=iph>tZIIk*q1F zxvw>znG=M#)uU6~Al+7$$HE><88yqD{csZ%!xtO589g#-Rgkb72Pe|8Sc;AAU$TkN zUBzOOm9x2$Xvadrs*#hAN{$?X{VBwd-7C<9u8bswKD>I;XVB112j%K2?oEX`2hxmv zX$u3~Qf^V+j$|tfKs?iY#T;i8hGZ1Iq(hXG7^AI3XHY%qrstlNdsv4nEPfQ74OaU} z&m0;c=(Ff5J9EJLEuqw8=DUcvQ2_zd=dS zmsT}WCN->6+)K3qV^%I~8rgu90$6A7W~3%NX`9H9;P(|A@)vFFa&gwU>L(U&9ZLHb z9RRB~uq3AqAXEpD-k>CUidgO=hCuw1I|`U;$0S&NCQ~M1Rw>R2>rzLd-MAmQIQ6S> z>$9?tEfz7;J!((wtG>lR$6;QbI&ik9EUHZFt$b6h7TNOc10>+_T@|N_F9dm<5IsB7 zf3WTm8I~`)GsvuKs3b`YZPOfAkz{q6m)QkS2ZDVolNLeF zBp)f@*1WfI+1jjeC{8*GiAuwaZgm%W+%~FKGnW1nSdXhss7lN+ zB=SdE*U}K5`A^3K_mWRHJQO-Pp# zO;1OMQnoTcM((O>i;Udqm-u0~Z&b$yx=T$`OG%kk@H?YY>SEJZw{}GfHa{v(MA&2+ zoL39E4j6S(d8NEDUs@GCK(0FJ=dzdOA9txe>h+$r<{;imzj2y@*u~YYC9#`5R35nL zQrqebVM$Ptv~ybbvcq>7S1NZNzLm_#ve?~p9$S7Qi-FS1ap&8l;}`;+rQdm4yk~$J zc_y=MCPQf=W43Cl&g*d#4lu%<$79fSSz7l`WB?3~4RJEr_1wQVdh4t%1=K@v$Uc;k z=@3lZJ~^(KPUk$MV~k5_BXwmR4Qa*};S6rQdm7yyA6DrmDUadDjklzkHKoWn>-`cX zJH&f|{{UvQPL&`0^BsG3uSRVuQoC4uzV)9jfiPlY0IdQzrPB%!=T&#$*2gX==a>PFvX2>8|Su{A%9SZLFV+p$8f1 zO#3k$0oTw{uw2Ny)bH*ci>S->@5N;Kav6TGos@-2S0(})?;{oRAnnQkIp)@Yzm)#dVM+i*QR3~ z>2iH(SfwV9BA>#VoAk6li4}vXXjisHM6m_Wa&wCJk~3UCkBoNKPc*6mdeud0CsCdo zs4S7qvEOwxfcBE1UJK#b_3dxqJyaugcd3x`v8kgMW7lufS>U)fyg?Q-M>Q-Ynrtrna6LP0dy zTUhy39A><`O}+art2`>?q3EO5wHsKxxY=xlvfUI{u?QYTM%%g2>i#2nTkPuW_#Vu5Go~=;nx=LGYxx8Rs8B{&1f6ks}ML~g_V06V++9NBP_WKqA7{Wss z@7|?bm1xNv0n;@Sz|9&*&=0*+rMM@N!q#Mv4dJ)s?>>~R3p)g7E1VL0)Un(_6EuW| z3USX$tu^}X-kB}vD6oyVWq2ds&vGbVrT}9a=U}LEwYjQsj#%RFY?$_-+|h5Rrlh zPkQxhZeT&|E0ldDBe?$nMsSEbb^2FRWWd{nKY2$YxT?dEo%H90y0%?TkLRx?nlSpL6M$d|mJBLi`Yeo@8+XH9eFbk1rSPI`2x zvN$vfz|Kz%{HPI*ov3F6jPhzRxHzCJGDSO&pzl?r7zA-v>(Ek7xW!=NL z@G)H@+vMQ%HJ@{805wroA-kO0Kzj0OArUQ{VzuSAz$7kexQCu`RKXRNG8Z*jly9v$ zBJ$xR3ePLK$*4@y#P*S8LG`Cv1{ zAKx8CU$%6<(q7g<`@pA_CjMlE1JW@)L%Z|7??ODzyk(JM6 zv`Cp%;~=T&iqekU7|QT-TwaMC?wc|ZC!KD@U=z?+acbf4!|s~al&*5tR%K{3!4t7g z=QW`edlzmg>N%$9t#)tsJu9Z3 zh@^&R6&S&6d(_ILsUb^o&~j?9g6){>wV8%{DXkS)E!c84RK7b~Bdt2Xv0k~UFSLzT zc+<+$?hbmLl>IYC)+3R;?K*#KEpSf}OWOQMxY3tlQhDaIbmhvwur!is8lFB&36J4d zbiFT84&qBG)qU2r`rR+)MLJUKRY;i0{uRk;`%UzUMhUM&8eRInO_aFy70PN}8q}Xq zX_mrrJwWSO)y7h{#EAA%>~W6?4aGh=iVdBsr9K|j3vs4SeKIN;yeq7qnRLl(53SPv zZ^(YiU5sE%pLV2sKQ%Wglf#4^=^lG|PkZTFzLCeI&mC_A~5a zn1VtS@s5;5XB?}NeqT!0ywG)NcKLd2{0x2Cd^!fIkq`6<{+nriW|~*#{6pBwvCG|9 z5c^b)c@+q;nD*}UDS?}65{o5izkEA~yN-mOUx%unpQ z_9OicN_f%r1HiOz#MRk+X>zT!+hMy^XYq~u{n(W~`qR1#0MIoy#votCs#WmTq{Hr@ z`kICOORNOk5dih7ui|}FFtMzj5!4-j*2bslQ>TLO8}Ho2KMLo6;UU$}{Jnlc zrd?xHk$-u3`0NEID*@3bf@jaodY_d{JQ9HX`iI~Ja^q9f8L{@sHq!m7=lHH=IrpXQ zEF-D^0E9BdN6&xy)4$;r(vJ& z{nmfrbjHy9Hizbz9Dlc5Ul}{O`kDg9=L8?lk7@^Ps9))px?96@&^sc;=7yDWS7!KhYMUJYo$Zza?uCphg*O%yy#UR{k?b46|= zJ*EV4O%0LhM3H$?G9TeM$fZSI^`#6fr`o@m9w~m>MBQ_kl-8-YJsHP_|?T&XtQfEl5MiF$7*bm z5h*=ISBZ+qIjtzfZo}pVo6uw_B8t(`ZxYj1idSL~aB7tHgeyrNFge9T2`7#+IOc@L zdo_jaxx0=}IWXAdwRF`crL-E5wfH#J8s3i;NM$Gk4~yuhO~dZfg>zfv3H!*NW?f6B4|0iqqD{bj~`DTF#0+ zZ%??9ytTPj^x~q{b=g-+kk4rGkPbymcPWuu-^&zb7pJvIx{UqGk4`JhU*a3v%ILPv zaL1a7z9ni0i0sckwZUHljHy3%t&l2|*F)7s^zG5VN(I%+3hXCzW#SpQ^U-+iRb=rFzWkj* zhtO4jVBg}YAo{}Sk8d&@oVfo0zNw~Y*Q|&>ro1t=U20#ysLO-tQJM88``5Fd_z|c6 zuhRQcVfBaD_cp(_Q}bL#Kj2jv)wJ{necWU5uMXLA;BKB{{{RA}n@1;?kgvN{tb+`< z53ES`r|}+=oEzwe;wroNyF_34eT@D!54t4|ErEIdSD*FhZZ9eCsOYt*FQg%ln{{Vp1 zR`{W2KINpjBdJ>9MYvz!0-NOEj+Lx(>@wO2msVZPomTceLFBkZW#7&XVd;8=mRf-F z)D&}rSEXFq9A|-8=tADb^8vNNHRwhuM#g)cy|ej>ul??8Q4h`lteYRYm8?EfnxPU+ z2Ia{7>Z_>o>qR8qryrG3nF=xPrkWEt4NZ35%AjCw%~I+sOIKW9N_~09rDmR$>_g#4 z9JeKp+MEff(D6?ltD+`sUO=WyK3>%NY{M~+YI4{kxmKiytw!Bx(BwB2&bKvt7Z;@| zrm4WE4%M-P3S1mfj%e*bgS{c?N@&Lv0AheJDLc}hv;e)SF-Lj_9cTccangzb_2z&M z^Z`W~$@HKDnlVRuGe89Z=88H{FwSVeqK@FGvsM|wFl02&G6mppn= z)9FA6e;NtJ9XnA##2nGz6ui-j05On#DSwqFG5An=Pyk209XO(nv;ci+DSGvz88iS6 z0qsER(vH-1>qrAMaYt%9QvpXxUV11j-G{9pu7kpwNz`=(k(4xXw;x*K$717#r0PiO z!q9bQqI5nE@Nl>(d3rJr%&FSF7Up>EVf#J46+pqoM1^cE1Zjo9#w#_XGD(t6eov0Z z)y7tHlhFFg6eCVHL=!VSnd?*k0Ac;IFj@?Zed@6kD7beS?^?}s=fUNvDUQpKxcu_k#X{{Vip<%~v1^!2I}$%1+5T~Vtk#?6n~NscI` zNFyS-jeo<@+{9iL#Dl$b3qIa@`&7(QXo&T$+zvXf3aXS|hc$XJs~%Y%J8=_1DUHDl z4mqfMkSnk8PLQ!NyG7`@BDoWQ)%u1H6C6b)IG-bm!@4tZ8;-PcJ*en^`t)@;?_Fmw zo%>Pg%_;Px&pG`l0dtB<2TC(Q00f#knlt!O^q>RjM|xj+LOGxViV63m&vD+4L7)ZC zKJ*$)^GlDV046a?I(pJBIT)qmGyr0gKGeD5l<;T)G1iXsxxu8(APP={kxSl_p7aa{ zIHMf(qnbK3Fca{l#%RZH)_^Dg$27R410DFICXfq?ZU?wkH&xu@j*OM#%V~+03rHNe<}#Y9QC9D*BsIHqn@qW*cGun_+;{zvvI+IP`9zOTvDRUsR9iG&mg(~H_RCXWk)X`ep+-J$RmO;>A zX>*{nAvBrAUri5JkbJs)xb2gQe4ZZFqK|x*s-yk-mr^~-QD$i4ie9zQ+ITNgxrjSS z66AEnT!+9H2br%|=#>t<7gD(y$m5Drz^39OAxN}Gm<$wy41W( zP0Bx(Q z;q7Kj5n#hTGQzzKL*?pfp#UYi0b5>K1E=dsSeYUFBzaQ!OIcx-hBf+})9rjEsNGIu zGDjF4$j)ojj77bxCIs22k)Kd%KC?DIW{z4vhqE8`m*XGorB2=ff;gFt+@-qpuH(zY zb)rO8je$L?ez88| zq`QYIGAGbh87XqN9=air1&tf1FD+M(Vym-ah0XdE?vsyMxY2d zR8jO5PgGL&L(-KLQl}F8< z^`e#%mMxrQ_o7>YM*jdFK-e;OXYi@C=G|nY9SNx}?8;idnvEufgORYeOJX=3ft{Vk1?~x&T~X!@30z{ExOe> z=B!|vSmcNgaat-9YhiPv)O@GU0M=Hi5R8U?53YJwp2_0PZd~rW zE1&L+RSESQ+lKx10=WcLUap;+sk{iUu#WM>M`nWyt^zwBypSyg@Uq zp+q>{>s|SN8|xM024P;OvxAY%>X*-Tc_C)`7p5wSQTp_t4mwq>I@zx;L|`0aC53*G zQgFjizeIe>Qma#5rv8Ouuv?ksQV(8zYad*=Hy7bqh9k}ZIj)aVnQV075c}J4&2dbj ziGFt;r`EjeqMWKXh@VrZ7}O%EApIzyXEdD;wR^{$2kA?Iezcuwc z!g59{kJL2TtYyJcQ?ai@12qN3ymO%q7-B{Sdsg{wc~cK)RMsS7un?=PcRbYcIn7+O z)MvDP=_$weeJe{<&>j~LY^Acitzj}U5*QUehqZl-Dq-=ouev;E3b=V4mYd=fxlNL( zR~#G)-d7F*uQjwJT*effmhE1FW6U9raz=TtiO#Szu+=|z)b}toM_{2 z=P0H$=~YUSd(&BQQ0B@=nWhYS)NTPBnvGX1Dq|i1il{&!3qLMwS>uVwCy{lyj z5p-3{6G%fI)qGjXc~uoMY4Q>kimrQ_e$A84jH4U+8h4b~>02qL3=Gbqr(H7HzV*r7 z=qkOCokU=HTnzU-P$4C;@6cCBmU?7FZgRzV%~)2`VI-<4J;|r+MePn@ZCtiCHhz^d zX}2zTfzR@;l;2o|$|>W~X&Y3v94a{a)ha~$Lk)CGo-+_1jZT^qobPoQtzYd#{us%o z{{U-$b|r3cRqRRjjG_I97#};cf4jvm_Do7}mhRrUtN#GnvYwE~kEJK}rOD`n+lsYK z3Djjp(;Sde(FeUqG`pPb5yqMJsm<;2BZ2q|Pqg0=)w=WotJ$J?*wLb0G3I3-K~7%} zx&HuLaz6@o-9d*t_V>jeMe8@p9FJ0I@*w75z8;4h+%d-;Y3ZVA>PTkEJRBN{tZzss zX>9r$Y18i5<6#5+>aJ3GnQ3fvn2*lG)00m#X^<%k7$ewbsDEYLoPicG)0z&MdH(=B zN%~W;u3T+O(m%NXBl4)Box994OB zTbDTxgYCs!{{Vzx0dYblW@^bsk^XJcf5%jy;!7YyDMcTuRSCQ-9WO|gSi`P=kA1QJV zt}D*<2T`Byus$Fl2bI5_D_rpAyn zE$z+Lrl?5Rqk99~dRJEzfdBvi2LKAj(&7PTlbo~T@*n+r(#|Uubi~z$Zfiyv>z|H7 z4PJ&*>rmOUM?oCor;6#Im1RtBUtX1q9H-W&SxKq5IGVbGM|lXjg>fL|fc36rwMVy< z<-lz8HLn!y8)P021bWs^vu3w}q>WW%1M{Y(VtFnk_ps_v?PXo!u%u&eDI)_19V;H< zYt24jr{r$l^x>?e-|NO3)KzX}Ya7dOuNh!>e@coCLK!3$cLO2$NAxv^_SK1rSIU}( z?&TyK(aNyo5!#UKbM!Kmehyvz~JWoa6x+pYYkAY4Vzp7qp-)_ZXK^4RC= zKv>k#pUH(r;JE2jd`j0bB1>yKBX!{LX|{KmA~(RrTbM1{?B^$nxHCDUkWUh8R>ZD% z5ynZzYGLDzWd|s~_tkXo;MpXPb_v~F=A)whj!!JEIL9KoQ#sg0@dHp!WrQ|88oE6z z#?N~ee2^S{?$>?EBLL*YrCO2>t1G?ho*q?4W`ulmt*Xu4}>eZ5EiXAq-ds&%Jd^fGSu9 zIi3@hO7n|NChA$CxETZ< zJwR4^2Gme95I#ldbJnOnr!zwG4y=A%zLi=vD`JhDnK|aBFohAP_eafBU>W4i zG-`yB9D;M{RwdaCN2U{sY_}~9yGh&bii%8#5nK4Vr(qX#q%P;kM)jmNy6nObapZRmMSqtIDd-OGY#1=pokmHPc(aT|6ve1a-enBO3SgLQ@=%URaaB{r%`c%=+aUJ#> zK2R9Rs4n#qo8H+8o)`T4)J~T=v8^hu4ArrHKo%EZ9sm_{$`ZFc({$ZV9bUn1V!&W9 z>Uyd4s|r7P^{*bR9A##Duy)+Y;Sy23*x&)pWy;xiJ=)6N8KFrOFC(>VTU!W#C#`b+1kq){%vYlP3*GIcl#Qgtay)(Jyv80lTJZ$u2ngYMrquaKp7-or1<|KH0ZjH*r83 zxy>Osq|OC5GypSHd+^kx=9n;fpb3L!jMG7-{OADOXx&MQQfL9C>B!W~@k*zhb3hZT zQ-f4s)4I?DU9f5^i;pVV-y&%^`Eu53drlry}Wl!F! zGRe5}O99;2%>l|E7>!#3AF0jkQzKbZCHP){eFkl7-TgnN+k?IdTdFtFWG zW4>}}tmH0wP%^>!`4tRE5$%Asg5Mftu)Ng@7as)=k8DCpn-DIU)fLD>2ZCa8G*Q zxQA?i(y?V<-viiEXsEIsM`}ZbJmRs?l0X%we0Q(QoK|#dLu8IB60xPpfhPbSb5=|& zI*-Ppw_M4`Pg>FlNzGCwMK3Rol~OWexM7Ue!^f4#{Hma}&Bpw79Vsw|<*hbT6Ecsu z-HmHN%N)mH#(wT=D%KJt105>Zj#g}RBaxcslGN%?L2uOgh4GEYl4>|$6Re2blD%r& zku*90enClhjwS>Gxvp z!6%H3r=cAwQPV;zuBGmcjQ6SH{X=BPtR z@7k44X{7N<6o5&#fFaei^wjJc2URVCRO6wq7T2`dEH2qfkgRLnw{096^Zx)H+WAap z#$#@CQ#kWP&7;dj*i^$OPIHREyCO@LWh8^mZC|0471w|{$7;@k2t#Gh70Vp}pcDa; zMIc}^#Y=VN`K*JYo+`XR8FrJ3+n~$3SzqlGBjqQ7?_Q_jy#@8lwcWiSOmA#;uQt=6 zj9jkVGY`(bfbg6V*l3W9{Oq~Sd6||u;pn#=&dfDFXLf8_X}WciDo1M>z{cV^s+ae0 zBN*a_FnyM+&2SPXBDwh_F8i4BYvKO2UaNfaJxX+-$x6&O6d|9MU>@ z5o_(zbpDi|ZkyCqeg|qy&>V=f_StjP(i{0n?NzgyQ9yD;vG&$gTAi&UlZ* z7P_UgO9BY47oV4m*6u05;kmAgHK#^OP-M=OWUSHQR|;T~NTpmnXAPQ&T{2JDg|4mkl#B?ZTrnQJS1K&k+bj52+hMClwIx32@Uay6C1Mc)nZ8~L>xxM& zN-*9k><~Osf)07Bw~!l{!z$$aS4XsWIgBwH0ni$e7n}(A^~Fo}H&r{bq;{*(O#)e% zXvSwI#*TEIv|t)?Btxmh%wy=~`ORBK4DucB(5dhYDRzX;ivoG-X}G9If-xE+yIO+MtGvi##FjTJTJX%N?HM-HJW{t@Hp*?=5DRba-5Hp^P26X z09s=mv0UByZ#^(8r3j~EVdu;9Hr2;kvv*=G)NF0T6#G&mQJTIax0vl@9Kh^{W!ti-#=;$FT2NFx*Ihs6186O+r{F zSI^2jR#Hqv*78kY8a~AKsS@Gk<3F7?{@`3m<^|jItoNM8+mXI%j!s}Tr?p9;Vh7AS z)*B6sS2@RemR&+=hSec+>BT?*2j;CI9#yEvw3%E}0VE%#HG#!T6i!Y+s{s;LM)s=) zLhJ2KXn4*kF!A!rK&cS}MVIx>T#CXns>G6N7i8Oz)QfWJK2uLnEj6H#KXw3NRnZ+J z+D9YOrnkPsVE6A=VqdgLlwNa;)V4AxB*bMIdi=OG8AOelisL7xZOd<`tN|sD%bboI zy=9w8ZbNK8C?}KYNdZBKJb~Vsyf182i3F#j6OO{8c#9r*2d!wB3}L*S3<`~aQ}?r4 z5<(-kToIGk6`JGbBQ>HKAb(1;Yx7)00LfKj`ih zdscR(Z>iha&XP#(gb|8MakInjVa3$hKQMEjN?;)uoC>pcyKW|5_RU%F{j3+hA%Yv6 z6vl9RX1y5fa!Abc5dQ!b0hISA{sL>=VDRRQkpNHY%oE~5g?29)MD z`=qd6=UbNF2>eeXg7I4?`_Eq0;d!2Y3If0a7aR)NT#lx>`L1hY!(#X~uAjekXoJ|3 zS0eZ;e}TVLflq(kX1$({{Y5*4k0VclZU@b+0rZ3a0IyH~0EH%m^Q}4hMUU%Vv5$HS z1RI#~Lu0YxF#INsd{mlc&HSd>;W7ta8-h5k``?1vKbN}N?&({&W);)lT*RI`($3-g z$Yf0Bx3v^^vvrK&@(46@1&<+rgVs?T%RR#ntv~)1K7`5g85RB7y#!5v2;szoxM4`z zfGhr!Xa;)isa0AIRCp(fGzjz?kF!P&#l{6<_&-Ls)_hU+Tbu;)%W^vNUDw37isMj5 ziCGvcXLsR`=Uh*Ot{&6IR_>b#C|Bk<&27(k+?yRXsi#Mz>d$8$;;NyAJ2?WS@h#Dt zT@1(-yrG;N=Bq_KZ5SKIMQIm!+)STwL6K54LRj(YGf-qQ16E;f0L@U22VaE8df5PE z9zPnzVb;2D7N*;rltmrUQ!Uj>b|Kw`xfSV?0sThW`Lp z#Z%anQ(@Yj9}P%&IiypDu70N73#-zd+L*m5-78dJ$7dZV>N`*k9<;<5qcnaL9<%@s zw05M&AJUGWS^!*PlZ?{!r2cdOcB7>(Jt#B)cjl6cJK#_;O%!9>G-vam1GOFKG=hK@ zj{MSfpb7*n6n$vV27!la3B?`yicFtM014@uT+(AScBBH(Fa;;+Mh<8I{AlS%^P+$Z zA4*=7b)>}t3}%-&qaM^6V-7Px=|H3LqyfzzT0a^?k<9=Aa44nv&}o33`cm`w(o&8E z02EQ28cg#@12n#rgNisb?g5TH#V=|~4>SOG%^h>vfr>iw{OJH5e;PV-Mlv%-C;-kV zJv!0ejQh|5(wC(t(vE_F3IU_NEdVBS?MGT#OwaSzHo#T_$86r-g81FuRwX><5e zA8siClxcUWB5gftU4#N$q4pGshL?H!zqkWQg#f<$jgv(SbAra3;7f5W(c?B=laD^_($X zxXO#@c-g%a;--vo!K3h{$ju?Iu|9A@XvY+B?Mw8aLJ>*QgGat70H7ag4JpoO0XU+J zXT2HbkO0Oy(jK(Eb4iK-PW;mM=}X>@w7_rjr!P*F4&3oT1El~2pIO7|Emp z6N*l8nht#_*q~wxG0iC-g%kjt4F?97w;a%T>x@tU1sJ2J)7F!Euki{^j>3_F??D{U z9CRH0Daxis+KSA50`o^Q6^4Ek0g=sIO)pV?QpR!*a+Nsn{<22@0POh!`j(~bBiwdo zZ)!q5xvh&o4QjXKszK$I?)~dZF92%}!+ek^?nY`|XfC5rY~?y0w4_&GFT?BDW8QA# zZ*8@2Oz<7O#2fDBeZzya;8Z+B7PlX>X9!tva(Yp{K+Z-h)8gWnW%NA+iBR8c7*9RuG$K#0kLcwGNSPf(B3k+TE*W zSWJ*h#tz!d)8qZ*fDhNbE4vJ_pPLm1p%VR@f(Zt$3wI|wKs1*&j`ofUq0$f-U2~DTv`iT4Req+JBNtVG2$9M4$g5UkHmFJG6uPt9MP_`-W8?-vO^Ovpf<`0L6$AWBw_NP8a=nSC>}qxwJWZ>}oizn~ zaxq%sIR-P{yxRW&$9GqA`LM$rc>eg#X|3@KSpckS2px{v)7VXiIz2bZa!IUNB51W$ z$;RgOt_E)$YtsTg(HeaPW=XB;GTa%O?n3_nUIjSerPN;09@1h1ac4oF_Npl)w2gmx za~Sp}yjArp`9AgR&Hn%cs2*uqgEZ0-JzAQ=zN}u*^yJkv*fk8jGr%UO+mW;OD6{;1~O=`BnW{cNerhI_t(7Jbx^5w2ka54%@~ywzpD9*76i@myW+$ z=OVI{MfQnM#{e107~-H^V%j1aJ0T}*$bVYSUd9?WQs-x4-w|PtJ1ofqrdq4d@fPxU zWDwb+XN4r@vF&_Ir!gsWqe4eOdYYkqHLS9iwuD8ys)NNkUdnG^mohXX@oupTvqx}? zyZxGuZxm~D62|$5`=g4;&S?Rzk7o|XcV)YcQvT!>n(|jx`@?bOs+S~lyYXs6$E6i^ zNLLdIPxYn1AHp+AI#JMe%>n>;rRXU!k?BP+4CCoa4Imwi-OfyF9D@*my9B%kgfHDxsILP7Fr_aBPlmogefU@&RGRrS#IMnCcAv)$YZo<9w0 z3^OC!$NuwXvz179DJE9a&fB<%JsYX7N4G!diS({I*Tanr%Otvt0|%n6f30>_@rdpA zqwZf?`0gO(ZAl)+UfR%r@W+a87^gTpjWpNJ9>8ZE=|37w(dkSD2PT$~QPBF*7!S^> z-&v*F6=eq_6=;t1xhI<1m041foF1gk3QEl5W$?YYIPomG;oyZ`_V@u;!Ca52v8IA79jSl0CGBFwDq+Mf7c+6 zwVRy%EA%WJ6evYR`OHk5sy4v%q@eYn^sb`;M@-bV(RueV#8*3yH3;kNTG|92W$|Ny zux(uX{{Z@{gE6n{aPpDSg{RL^BeBz=SgpVVZcjs3I-g2nU?2c?sX7Y$wsLZllRmC0 z%E3hgnmX2H4Rj7LaBC*_!_Zy6{o5NoK&^p+?MGg`S5*vUY&*R`cb1Z5| zXc%Vz8Vv`f9lhxYl>jl3+Pv$;u!Ytgwvt(LO?oUml09pR@oI$BU@AB&b6-otwsj>I zd0CE;xyyND(v!;rwOB5FDGQwPE9^a-PZyYr%l`monqnumDnlU@(#=P+LCi*DA$wp{ zE&&~CVoo{YqHgsL1*s5~!Q!Kpn0LiWz~hQ+sf8Z(!(CaMMU945SLB{+K}dDu9M)(| z8og{z!JKBWLu7?{KU#W`{n|n|W7e$OTY2nPaL(oHUHDlm*vh7eXmf$ZJA1JHg0-X3 z(BpIC+*Op)t)m6p=hK?>R8B`T1Uuk$r{Z2muNBaxm74I%xau=gFWBN=l~nryntY`5 z9N2vd&_=VV-uMX5)eRBeTaAH`M5$>uP|k1^!!AB{}9D}T>G zJ@H!@orXM+zgkfY#9^Hi-i}c@8Ed02KfL`q)Qh7+4ofjLqvb4re(fqZn#3G6=*a91 z9H>`h3#33gf`1x%>2}Nf3JLV3I*yeaW6v+@38h_cN>D=XCq3xUc5HI#_Wb;nDp(-< zpng?Y_>RFwV?mmU{8EZOSabOEMuBE($EPki9DOQv)0LM4ZapiRlf}0n9g+TLimd)6 zzJ7NoG_Hrr&d6D!oN>o&)4Zq`lIxGHa1!e`l4s4hJoW;sKA|H38fS0E6)vPvUd~6N zwDu8j^B`)C^=&l)-86o+=H}_j{o~iUsLjKk!ll+orAeNK{wC7n+!429t_47RUt$5< z6JU1&xF(s-M((s_+ch5F$bQJ}+s0PoqzrxP2l2b9`7PA@*CVu=XhYJMw3Fypvx(F{ zjju>MZQ~xFHCBHZYGmYjc=W|#2#GzZ;vPCuyxB=b7v}LEqdz`w-1Ws$n^C-x$@5MR zP&!fMl4(pIFIp`&K4_wuX&ij#ajW`DE6BmnHA3-G71LSGyeMVIO60^-cDb!NT1QXBhXe_c#N;e@G(7d4KiJRcllw9X!U+;hB4IW4Mr79gO10bs*4s* zHr1HgNx^9_N#vT9W60*cs&ti(8BL~rRi%vS5EGr=SSRwYJn;bk0Evs_W4(GNl6=h; z*#7`}A)4SkMnB?bCtPES@KM@gD*WJj(s++Too(T|i32GaClsN8anCvLUF2~r-Wws* z5wM!6Yzf%%izu-Z5HXhif~RQebW}^(VO83n!ZZGV$f;zD0qLf^Yk^prS0s^K3waU9!;h5XKKZX^)R)cD z{jGxW`_d2RNeuOG4NV-{QapT(qxn{|90GHS$nexYR*?@UkUISZ zYqI4?#(1HDPwmkL+vg}Fu{7~|y#%U#vtCi+txE4s*BUtU^ABHo&WpuYfs{!cm?v&U zNY86at?i7Dz}2K;de@(LPV#HJy!ou-JGtyVE6@~orUQw z1pXDRDtz*>6PGHvOT>O4D+iNqcy7M+!OL{+a8EU6{%IziiQz|1YKTncy{c4H5$9B^ z%*v8Gp(nLx+`9=kDdZg1grJupfi*_rCUb@S>r!IVGj&}=p|!DQy*IJ5GvFPc{ZvzC$-fq=$ynvPB%`BnEs5=kNC zDEVrXYv*1?5C?8eTZ_X+?ZdJ~X z#TE;jm{;ydHz=!*Cfg*Cb%lm&D(37*e`9c*BPmw>D_AP-xPu>gcUL^oNR^Js(BKti z2C&hL8l>~8ZiZjHJ?ly-S?r^H=WA^=bQz1Kyqa#Xv%@BBE?oJM`}2cc zsDGFeFms$&03(vd+DW8P%M+JSJ1-U1>G$yJcCp-BzCr7X{)HCzWf8r1_P)V0uu#{Y3yw(4kzO^$3p`1F@?JM&3D~AO}9Q0N9f%LwBiF zLg4lGsTXKmZKMn7-lVd;+9C=Z;iBtl3~IKvEb zD^A5BxKAcv4t`#JDL%?rXB4qS(aXCXF;9}h=Lq~M_I*oyeA~VP{{XUU&~$rGuv-0` zAD1~E)k91sNKk)wn%jf|Gm0Y}ZYfl4SeXF_)~rVP7{ym7VClt683z@qkz>p`?NS5s z9`#=}G$3vKDTrdf7&OK>Y}9PwS+m&FQb1hiy#aFcZMkzC(ryB}V0~7>M%D zDK`NB05RjeG)p`yThqi6NQ=hb;Wf(LLo{k~xb!`ZdQXmQWVh8zqLR4i7uL87fi=Ri z1Yk#UE1qz)t|OafZQSRBNMD-KpH7tifkHlyqS?mUuv#(VUSo(%c=DfMw#C~1?73+Q|i_Gx-z#VpzUN<2pjMvoUuJoGoJbb}> z*CvYWnJ_WUXhk^;Hk@X#b~fTiZ%V&!D-DW%_IUTNZN(mGZsJywUYO4uR-T`s`H}gz zKXE;kkY z>w)`3*yd;a==((3{{UM50G%AjU)kPga=skWA09{t9PrhbduMTBI>zW)Eb!x{U|Z@} zc9X2BDLZ=}_1)=ujkdLIvQPtm5I(h0&QFFk9s)vUhH8Omi% za(A!=83g**Ts21n(60(9i2Bs9!l8*L1P{`p`;hKa#YS#-AsN8}xoXEzG8>=uhrK|n zxPj|He7W!Spg36tFf1*ZY+z*jRhZ#xa;jHoH6@(u8v@<=tv0;1nn1o+Znd1G#AjSU zCyy8e_BB~FnAsc5eWY`mxi(f$kx5TcR4%2Fl&X>x`_UVLOrb^~9OI#@5Rlv+wOD49 z93GXX;Aw3RzFAzQbz&P8fXe3uZf$^l@owa6kLU#j< z`qfq>bgM%X_=QMi+uozWG`k7nfGoo{@RN-^Y zOA$_cM=$aMN3}z@VZ(7=pJCzKRERU6IOC^NR*r#SN!<#cV^*U+!_e~BqK(+$`CfRd zc2k&GfEBhoBT{I>A|f7z*pm9p|7kMg70$${oGTuUo%@}y(xRMMM=NXR)% za6zvB09Kmb!pWu)N4bB8*15~rW7Kr$r;;^|n1&S-rsKHna|+g7vgHWLq`E{bcK{0- z=`=qI4Pxudw%{+`Iq6Q<{4;T&UR!y=ULxb>D?}O#9Msl~mix94Nbgx~7U7lvH>G+n zh_u<4OO8ahI6ZJH&*h2IQ=av-b^^M`u++-lURyj4l!Rc?4u`)TDX>S<-WayE);=7> zvLd-KZ9IEbpM_QsTKIZGh&TDH82&Yt@TTk7~2>XS9vB z0&&i2-qZjL3d+(OFmdTxfxFe*iv|=Qx+#})ve`+Fn5XfYhU5l?hBzadO^qX_@Kx5$ z0SxXHI<9*Py(X&#(UujsP{TVwJeub;T{vof4i?VLq^3AHtj!}zwea?+mvda?ERt%r&e zQ=fH)n{eyUvjC#2VI4CJip|w;{>K8NA!8xh4O&?)hy>f9_VYRZRaW-)1yqje1_h4+ zhDYaAz~g*hnDuQ2;2aS+Q;%{#!o30~42n9Ocdi@9q9|a}?%5BQ9m?bmxc>kmyNDTH z-Z>MaC^R4*(MJCOc@+K?UTr=ZdH|-ayG$??va>Kh00s*Z?E-q$p_^zA_weg6P7 zU@0|E$wH%!Yq9u_ci(B;W94J~tCCZnt!)?XiH%rFFUrQ8vrQS!bBdX0bjA;AWSq~6 zKY8V`>Nz#bdg8k;6UCclZ}W=dSRLlQOgp>|TAvUg=B3XS2>ZZvsmC?f6DbRdTzsaI zlnxDOLMk^T(?`m~(w`^ZH6MJ}Gu+v1UQSnvbuv8Q8h(E&)flkPJt*%>-i&)wBu@0X z$)JyFN&sBqldT=-paZ9+FHuR&9jF**B963D_MijSiZe-?0ABPQA9_slK|hrMFIqrz zM_MQlQi@CutrP&gX+7z4j?|vmpkk5uQQne@09sD;xXJobcBBG|DLp71dQbuQQjWBl z^rNuN04@a>$)Ft3$e;tgCu&~3MHB#Iib`LtA4&iXAT(#S8Rmcr2LhM9B>)8Dr5K=4 zO#mMFrRZp&@+bh!6rCwg;Xnu|rRncR0PR2sI(yMdN9Re~)_@L%j?___01X{IDD6Nr z3IqpL$L+OP(nS z%^`sM*`pn4Paf2npaOx{GCr2qnf$fW1-qa1al#*G~rcj{<2V-@HY@_f5V=Dhnz;`w>!71_ro)*PDn z9wCkK2i4^*dlOzPhRs|1Slf=mslh2RdewOk-sc9sWy6{3dWFBXD!1OL7X4SF3c_bO z;L~?Dahlia@njurdXfnCm&YBep1+hl#H#~Nv$kuN3L65XxzfxmK5fMMRMU(p%GWBz z79oW&oEo;)QYz;hR0iFd5fYAe46Tfsa_=1H)hnC|4%eP$Q3E7>!P$Q?-hXap0%2E9%X1?dr@pCdea)yTXv zr6&T;A@8(QJY;(h*t5tN=3=9gDpa<*kPj}_X9v+M(=D`%TWwULLl|7}0@p&ev93Uk zN6=Ku7jA_rCyfmwQen7Q%m=ustb9MI-|q75@T2?2y?T3K*6cQ~O3u+#31(0S%Te{I zHK6^HI5_+bt4et>B|d)yU)vyQE>oVtdRM6I8-A5nQI9rGanq$o)@m}nlujDQz+!kK zlH%cp;mWTSqZfd5z;Z;S`j+cmK9~bpf!A*w)xf+|%DqnDsl?%LydS4p%MjYeGI|!` zx9$8hrNt8B)*>;~jMa^4M%Z72jt*+XY+Bkgp4Bd-n%u5LM;?`8oh@R=vegB#f<0g4 zg*xLn?OKsBEseyHRPKR>`ZnX16qK9lI~u|?RpA%%rx?Q{1JfMwQkCcHKwq1=1Jbj& z%uO+vUPzsY&MR2*I@VR9G+MKJ9q<{=#gIX5Rmx4Fzk!OE(vQNQ zDiD024nG4yz{$tyNHOV4f!MQcK83{uqLyu}&$*B@Fu#VxcQ-$7mUT6T*Te62AX(|OPHsnA=(GX|e*pGB^p ztwnS)`}U__(+m83J=ANgu|>?&R_vLCZJ zxcoh=NssgwQR>Vpc>F7>vYpEWe(wJO;ayuvBcGl|Z*0>~BfUe#PoR4=bFuhB=%3!| z7U}d{)T`k*SN(3HSbwmXt-LCez@)%A!KiqejIKmwFNXBBQeJ7~Bz)F2(vSMAO_Jvz~n_GdLf@Gw(=cEW82u(&j3{J2^i)ll3(b`Hl}yb4_sV*wj0l z+JTm%!Z10mj=_uDoYy8L3)Pf;TDpBMM0kEi2abT(gPm(l9oRi2Ng%^DM~-S)hwmyp z4A;)1*c;SR4h<>mNmK#af_At4aDtkGp9+wn?KnNr7sX6XzkJ0s} zjI2_T>62Y#GAyaM8vNfKfvJR_EVe$M4_-B6bV?~l9MS**qdBiQ=oFmM)X~z6&;sYB z6mmrwqygWGI(DP4)6$G_%`g!Aic!r3W|K4k;Y+}#=kueW`ufrWSg;?8<$PUg(oGYf zB>PuU5!&?4W(IpyDxffK3GH7)!>j$Fo?d0}9&9w*qtYfdBIx%ojHW)Ox@V1*zG)PD zmZ%+}0PeYreGPr*A@jVHa+5Nh~Rd-DO=7Ff`YTUey#(MUyOcu$f z0D5#mS4AC3*Q`<@vfQ^A0Mi@9#Rd}52jg7U81b4swg)tOX$P`LK;9?0I4c}! zgPN}XA-!edY;)HYljWZDr8`mWCd1jpy(X=9A<4LZa4HjhG@V`X?$uv!G~fX2XuQ~3 zC~=v;gt+`^rOE1`{uH2Qj2vW9X$8>GNEq9kQ^zN@CJCc7aE&$^cy@qJTQi=BY;VF1r0b*F)W zQK`uz^r-;PLCtyS>A7Yrml1>>y((X{&5j#CTCEYoXQnx;01V`jk7HhiDw46z;*YKL z(YH@UAaUBb9}}$fK=rJ}3Eg0uF1)M@fL2Re|^GUG;}L0Uzv~*904D z0(uT`E56f19TAjuDtW46JeySv*Aglg4j7Sxf(>j;K3b_gzWruE-8W$8y=Y9oEoCF7 zhQ@YIYGfvxvznO_v60;o;F_8~w9ta2Km}&aELw`J0g+XsIH}e6sAI5<+4)0+}w^UZX2=l6-naaXa+x#|8F)T6P8#`z(* zs-7d%Qs#E@)1kqwFALZ~aSr(tECA;|)l0=zX#}}J+-DWhPgHT#_>NGW%z5USw{v5) zPS8phagDL+1xBP0+er65mAhmeotmrYJojFe41Bk1k+gDYf$Eno zB+`i=#6Mn@<=3PAB3u%@kWG3_sKU>mO5rsdS6hiNF`s_)k{RfpA0+8f9<`*$0<%0m zLDH0tovTUd0q5Q)(<8am3zZ))aw`%Y9zQr`So6j!xzw#vOO9A)y-@zo2`b1Rf!dH0 z=yq#uDzbn$>?^MwE1$9>&rk@h_2p<7k~m12+oFt`^PO{8-F+zG!t}1=TDTVaa~;^- z#}(vqNMw>mCncPk^srR#?;Mzi&~&r3z>>d}HF|WXMu!>T)SgZ~tJOFeU8CUo(;$f( z&T^RwzMbmU&HmLiaENs2pQ$|LQexPprCS%1o)}cn%h>m=7~>Zp&iD~W(z9;cfs1#QjU!R+^xYX3 z?GjA?0Khn@u9%y7ZVGVO3z1nVKa*!KUPoN>S|!YYFXb1PY!j6Xaf)mxe#AMX-KA5fRIY_Xxa5{dKjYXx(Cb#AtLLtfDk@^aFeaR6x%O=xH7Z>*^NZQG|q1;89 z;PD)o&$VQRCB$M~I#^jVo<6l(MsMuRX>4PU5lp+6KDp#o@q(@~)0)4h*vEG@wdh}% zCPy7JQC3TlrfWj#YR2L~iSr7AcikohTa~b+)@W?W&3PxJPaAAJ(=VbE#gzNQr6anh zCyILPag{YAIje@1SnfMm9@RQbWwDSs$*HekEUtPtUTdDVyJ+QgZ&C=LW`&i}iCQvp z1#3ffl;GDbZ27t=lhZub>_03yrURyx-eHs8x+`;wRjyqa$#ROmwbG%*xE_L#5i!h% zik>>C7@0ctt4MJ`iMgfPX%z8G$sK3`r*NnxXRA0k>s4h3o@fAwob{>H`_*{;YEazM z0%B?LNruHn2qK!`FFeu$>wwGBxK9)Ds4^44?Omi3hw5`&2Z^OEt4o9Of&EQVA(*+^ za641MA$dQYF@Jd7c@*hJ;nso%2HeL#Tu{;N9@NEOoHrt+!Dbv}RI-r}KQ4VL#BwVp zbA}zNJbc}8$4X+Z*2wAFkjcEw%s}r=B!N;v7GD@N`D4QKOhtA)@zS2Cfk_;bNC(Y~ zQ-BKCJWvE?H7q+)yeK*jYF+{6n$3(3^oB-(LjXoIR(!Q}#}xyN;87f<4>_O<1~9#8 zzFi`@mj^WUA1ORi85<})xvG=G3E*O{>^-@~MnawsQ9#T|?UbSRs#04oOmkfmTdB_( z`cx*%E%#^xpB8BB6t7=uyB&fe0k@Az)fOtaAm*en;G7N(CI&gTBY-%n#sVC!E1))@ z{c60H*fb2lcyZH_>rz8+oYmZREp2lU-~&=eYJrCA)##!DaJ{GzS*^iQ(3+Y%4az!aIjPZ9HC%;3;}ijF zPmjx1IPF@9z&8hvN~0V53{>IB&mC!ja23zYX}f|-yHCn`)qgM!Y55*kT4b`|kni@Z z5i#l0(x}GUv7BbDMsfi(#6x(cZWs~6RBIMnJG#{O>cvs}V;QP3NRdIUHA#>QcvTJ0WEb4j5OyIxM!&6ZBz<`S-`# zP1cpH6>v(sWH{(XF;}_~QcXb#`K4c_NByH72i(PScL?a*yJzcFn4Y_v^Qmz~on6iB zMGO3y2d}+)Zj~pQr^HF;9la~TnVT8hdgi^m!;B7%Z_aQ#*MpuxdpNXr;P+=!U~_K% z)h>U@sC42CatfQhd~E(Eders<>q$X5=|HJ87Lzo+=%52MP(NB)1SWgZJE||vcKvBZ zah@sGo)+>UX2~4j<93*kV_^xoVJfqnaz{4$*%)JBm7r zDFH)W8?;N1f4YB_c#_8DLFvXT+;v0`rCcfKR=j;8VyCAE7&Y|S9KFdeGs?^ssG}9D z$tr~BHP-1mB100-bOAWvdQ-G}2(47zPmlI<+Nf)~<4nyAEwwrmn)(%~%R>(8NOrle zZzkH=wyt?K%&{%h5uxHwgnp!|V{Zv>5 z9QstYmvdQMB+#}Bo=2#tNI9hheJCbTQdVc7>3X%cvuEVYL1V!Otzv8XV_E#bW;4;N zn}T_5Ci5Y3r`o%{Ggi0Otj)aR5_BNfMLC`(F9_l9M`MYS9oFo;bgYL{y_E?fyB$+W z`xCat${tp-A=6S;f0TyzJ?TzqJx?*K7>YLgQW5BC_3oPRu`9{%S;bvW8zbvYNj-p+ zNcbF(MO(M?56tbF&d4~cwz7oCV@gO3m~L5AuH1v`P`k!Y%!8VS8M6CS^{dGoYs;u7 z(AEz@88Q!tg49$UgP7b{S$Ai?3Q!6o`89?MNpjani0@L+8hi z=7u7HQq6{LDdsg8!Kr0{MC3Uc6QmQkCB*9jZX+kK^{&`#OCsAL z{wiVKi@5&)45vcYb(UKvp2x^jccx^ZalSP^AB3- zz9j1Qa%u7TZmm3Q99J1_Z3VJ@syXv2^ikHXTljnXb|#VTwy&qHaK}bjzo2-U(_PY5 z3E3897%N;yiFD+&za}B_H$zEjrOl&jhjv15+N=-Wt?v?AiL{Y$2h10}bw#3Cz{rEp z(_)FFnIliW=K`mYa>A$4#@%wyC}jEm=NfWX zQ9fp2(z$EvCSNgRwj-W0de>JKsw9EN(tSl!*CX>G?V6bsi8Q>M7>WMxYUTVxYP0Jb za57V^bvju806~vEmaw&W-0P4q7+s_s)RcHXiY(2py*yp9n#r~dH4A;9le@64tKtk> zJVwM0Hgv8sEAfs$Bst0%iXuDg{{RY?GL%kN!~PDq)9i#-TCD7?%SRJ! zP=2+w7lt%=_h!vxW<0c{u|J(&f=!VQ^v2YHVmz`j+|=k(D;+w@I|(66SkwS;0*Zq` zQ5w3cgizfDa(*lLooApdmdmzVhRy=^uNRx*X1^ruG#8B!Vt!G@EqVd-mqcd{d?PhvH|o`#b6qJVav*f2~)%7CrOFtR?WA zPmz_88}+W!PCK;AazD5$s||@v5UrGK2nR}2ORO6|TOT|LH^Vq}GotcU1F z{{X7Efz#5phr%XEP8OsibRwh4BOPh#eq3g(Mn{O3ewN3$^sXNVI5pmDOTSH&XAS=V z>#i10zt39qu&>-XYVI?mRKU~(^HV9v=DT2G#U~x9!kRg!Eog`M9++TE5*!t8Ef>dDUrxm13rMOYrmlU6+Q3243Oy-t?4FDJvccZlw0DDo6)O4dD zP%y`(9jP~VrJw_~B`zrZr~v6j8O2kAFUY89S6N27LZ`l(j3zO>qp~C zIi#Qiy)6Qa&;f%;eW`m=QUK$QX>o%<8R}^dN(XU4qJS_cKGX;gG-KY5ooL9QVh#-l z*EGK3f%TvRJt#lqQPz(10A`9h&_{7V26;4gqa0DTkid=w0+$qej8Fq|Xd@kI#Ak{^ zD7aWoIRsLXN)*zS!S|pnHi`(KkPkdk0e+N(W~7ZCRy!h){T8l8q-s|K_cjx`J+>NL z$pwu14Q+qIDXy$uYw5D854>|#wEZ6MQ@#5ox+stwF@B3no*`yu4wM0!?+?P=S~yIz zTt&4;c7a?~&9hqENelhx+^IgesZ}E_nOv<7uwfnaXWF|Mn<%F_;<$uwE=6vbHP=|m zUKL_PE;z+}mk`mk)kEm=iTjQw^{W#eDjS2fh^4cWj8pEDBO|SRmeW11g(7*U#+jfm ztyqP5=xa$z$Shm4lgK-O&2B{;cepIL#bU;Tjw^Fc`9*p4-`ZQ1VoQr;PzC_{R#dRB zKQ9%rJ7=$2%eml@S<-Bq6&X=b?eAP)iD9^!=y_K1Nf;T*3hhGgkx&k%wuQ7`V=3jS zA$sDz!-t~jw^g1_XFJD`@q1kpQoa8GQE0?>C#7h`;GJ$vW;oD#lbZC6A89jyplv@X zQN?QYJooQkSu9+-9s;6|CAjcTqi%toRQZlG=~~u*4&!)MN$%bA>BV;1q7!G^0QaS{ zlQt>GBaSK_CZj|4Q8{?N9_fmHc9nR#GxW^2sNc7_R$~ST*RaO>d4l$ohmC| zn(8-X}-&oYq5luU0n(VJfL^qZM((PRw4`C$V{Cj+G7Kuh}FF$^jio zuO64g`qaec@rSaSrzWeY%aJYQtPlG}sbMADpK6a<(k`tchD2+W&hG72x#CywT;>X+&s)b)L9#9BCmV%)2;_7z^&#`-jN;T*YT_OCGD ze@aZ|uj;X|y`w!cPl#GdjHD7ZWNKbJH&ev+_TMVyNopR@&&o&e&TCcmsq zcRr&ck3{0B=~l7o8i(2Co6C$Q?EW><{{X@zV&v_)C2`Yvshvttc4(y;vz&cG@=w2e zaNk!oQOc9MB$MBDbz{QzMEvtQC;R+WOWhk!f&$4aNK_mU)T4-|-I5PyKBqX%l5)iV z0Kln)!&U?|CFi&h!gMrNe1o|2}^`MW)ngPho z1F(NOJxw&abu2#)w4u=OGIQ-k&{%dbIiL@wY4OE0yhU#-{{XtRWi*XeLxr%DKIas< zkaCp|CX*PgWbo#*CO27x9m_bW*TPzf`|{f+JxMgZtQSz_W*=_!6YpIT_(oE3CZ!4w zK(#b}5VYwotPlICil3}g?mkD@<_9PG(h{nE@ciqu9u?9NF(lK;gX>me(KI+YOBR3k zoREJC&ElYn_H5vbpyW3mqnb_IjubIJO7wMG3xD-mb-Ew-ML6mXIF2ZQ_7$7PE{J}~ zo_?Br{M<)lI}csB6>dKc>r#$1_5;+g71;j(Xk703WB__?sEy6bbLNrk4QKTL96{s0 zxpp72M>w7j)!Q4^2)&+9@T)1{smUI0r*9v8D(1Azk~dii&ur5Q?a9qc#Z8S5u?o(_tRuW~(?Plg%)K2O^==lj=THUTe*~M+6Ezm!&nY=Lh9*K8sZ_Lebxzl)0N9 zDPZ5+lg!QdQX7d_a_^s9)pERar^GUTl!s!(ax?h;*p>Ow2u$(zsaLSuh6`IyWD!a_{2XDE|P} zMJxOCs_o+-RE4uS_j)cCJ1;Rn!6WHGnJa~p#y4jnZQ@@{oYhD1KBoK$5q^nE<#L{b zypz;sl*koGBz4DH^Jz8hPC?Dn5BEkYv)|rJ{<7+0{{RCtTr7H#nk8SE!1|i0KB;2? z!(GA;f114R2X=G5M{lcUrMQK5WDMiIbSe$Qn4YI=Cy4a4AMy03{n47KCyKPiIS(VB zWUdnwW7@gh%d$Hs@r|fICA_Ecs*?D@&V0L2Ki)OW;*4UXERE*zW$R~TP_Mo!2Jtqg z-}2QL*ezqy(;0eAYf+TtuAF^1s2cL={`JI%{smBUpo#!_X&GTp6U`xpIUG__=hK=G*P3WYJ>n<}+DJ!SWE$jn z_04zsls;vn0zRU+7mv$!T%H)>zeLDudrT@_kDSb5%TnV`FiHI@qS7>rTgW`d$!uc) z^saXwFK%n1@but*=PWSBwa#i)r9+;ZwT!S)jH+5jcBP~>jHIUGp7ovw0=*vM1h|Bw zC_HsF#_IZ6vu2TbQhQc8PH!AaSX1lK+oHyQ6v zR>23*PY)@k&mS)>C%7|a2#Xutj`xaE|ggx8+bT1ratigbxXu?`MNZtxn9-kWc3_z zQL)91jp?(_Opf33(VOaNrbZnP6s2%+NP2o#->znS?t@Dlb3q5!^`s}7Flq9N;t@?? zIT_-dah{yh8k30ABl&U1H4MEtsrK?sM#Fck5x)&p+E7YZKQ<{5?P=5nQIH@-A%>)sF#cO0m#*EXlK%~dh@HC?s z&lcD*o|I)W4tTG4hv9#OpykZ%Jy$#c{CX*`q~q|nhoCr31sH#{D&%@bmjKK< zEuv%83WtkbiuO$TiC~^az_*zDZL4r;I+Xa?r`$UGC4DZd6ldkMvX9@2b6+fdF09ac z3|4Z*U!h8yK6FnBYtw(K(e8g0BCSR6`^6LTx@)TAqj6sH+Po{1CaZ1-qT;GQh;+0+ zKCzto8jq|##d|Zy;`mGAn}q)WQxXIH_Nmw4j=d-P>$_}MP>Mt#Rlrd z4X`m~eqp$R`;E9(k+)Mh7`_@uxVd>>JdWo$HG5aI1zCXk z!RzZ7&eD+yv5J@H9FFuCNvV4U|O>0NJzEjA;& zugtyw0Htn?2GtM9xc9|R4X4?@RTva|Fy=Pe>NmDjIL0t*5=|fN8<{>~o|R;h6P%A~ zE$?0lP7eo+QOX>~rilTyu@JW#PXN}7f>yE;?3UcTRe^Tcsc{|7a`Bz@Nz-}s1JG7I zz3j(SFuQS{2YTo(Eg7#GWy#NK#QP-CYNk^d!EEGpz^LS7<~n;=gmVH7Z>s>H@CUtf zf@azoP7keFTc>rwG}IXGQSp`FOFfAH05M*k_2-*#i;qlJ_lqu>=8ho4hQ9RKe0F-p4-H}QckLz7WF&t44q@T{DW?^CFft}n`>&1(< zGtXM8+(rg)1t2cz>KVra3tBJo!p9u96_sHw4#Cx%oO)KQ?UpOqX*L81*!%@a&;j_> zXo+S3^vzCKmUrwI6o7W_8M^kUSaOI5J!z&)s;c8XO$hC|q|eHuAB_XCOy0G;(vy%s zhaQ!$W3NSU_SSQ_K>nHes}klRu}kCTVN~^-VJ*}$+Y-A5c;lKHOla-3R2N}mw=3nK z=N;>hy=|*3Kf|8YXGQS{TRALdVfLJmGga?Ejevf4diSSISy)XOA7uvSG)HfkeB9Qm z1$#NI-M)3{io(f@QdwhSP#ohqt&6@UNxCeU=B#!QN3z)_M&dpXH6^q=*g zpo(K|(!%-KCqC6{L}nKER?;uZ2`EQ;O^jVh7~Mwy0N)&p*F~nT-3<_P<&l&0u6dYU zYy@SO(APz!Wwhzg4t**o@QbN=PIWtW;E5w69{&L3Q!%;=xQ9?!fID}n{LQo2zTx-q zeMD@vMu+2%WN+mrn+r5+*;VAeMlJ3wPfj5K4r8FZr=miIRyPEHtOe^U$CJZ8bB&)u({fPQ%#a(enI2fqLR%}@HbEs zZ*C|8c$gk4ZYn6i#XYh3(*kJu6!{|#q#A}2Y0}NHaz_*aR!z}9Mr(uC9LcIk`ObYS zwYj+sn&L0;*HRxtOoTO*Sw40fPbAVHoHlAjE)N|kvBnhR zsHcSIm}dv`sH8tRrbfqb>GYuitfy}ul|59-Ivk3I6lcccj&oKN z6>JW_&VVblCO63(R8pZW`qjBfVow(r0y*csNReZ|6)%=Jq%xMyIj6-Qc=oFvS2(2DRN|P5?HLW}QMv=g zTXf?+ssqU2b)+*oNL+*c+8~c<`G*ytV>^CoK)%9&A^fm%9MzO0 zrbz4BsYNJWqcvzaC>V60M3~C)N*I6?_oR)3WQuD^gOVwTu^GrGrCqmRR~1DhPTgvF zq}8DW9Qt1>lkseQMcg=V4VTESg+edY6b8PF8 zARuO`2>FKc*nRwPYdT2BrFLE*(i>0ICW+LiILB|oxx0vV9N^-aNtu!iCr*{@-W6@y zEIF?qVU@*t&x2ofhaWuvuNOLBxJPym;%8^3o*t|ozO`FSKQoVNwA^!F5mVwldSZT* zV-#oJii1$iEhQ}g9q7drW`Gg62evEAJVNF5R|Sq2wR)Qk%4^HKNgtQ2&76GL>0fcd zDSc*shl`y*+@l=Vp?E6gr_sW;PQ$k*y!4y{UH<@rVJoGV846Bo>bR{(`#N05my{w-yglZTZ-|YXK42I>g?p6aeXOhg&3I+- zXmz908;&IsvRI-&mni5kCspw+Dr zh31K}G6R9P-oBoiMsaeDE5u};9MZ1g*%|`t+;D52i%GV()SA}!?tck1$*#2x6HE?pATs9#=~kO4tN+f2ZLsn zqmfz3!w?Dl>odeMx@wM!>;^J$YVRIP*v2ub?RhzgwEqAPt>w$^Ai{?NwwJ>?K~E$E z5`p)-)S4GMADTY%E`J*4ZLa4U+7kZ&dH!LX(pF02a;Z5=(%6q!(N33f@-Sp>nXSz~ z!#aHSD=f$e#&X82_?dCHp9rT+j3u9YxvA(S}j zwAKOBrP6hHl(ETvG2B&+25XV5GM12q2O!qYycFMBk+<(;ni^IPc}4O!dzLlVSgcja z1o76nh;EQSrEd7Bh0vEha5=6TDGM;mRuv)4d6hRc?_M`u%hc5ei7pfeUzm5Rainv{ zwVwv77~Tmsk_Z)=Rx>G2rtJB{ap_e`6>spZ-J)2?>GiDR3wfIYZenqP-n5NQ;I%79 za_GXep}HAXZ_1(m$i9)Xma-CiVx>ABs;ju#HV0ptrc;CJZR}?H6W>HGaU>~`jz^_t z$rn&~BD5`@;?1z|FhV)cN`igU&AC@OqAtdAgrm8gwS#fZXa<@qa51z~0_<=*`&H1d zBqe%r-l@ogCSNhm;?%&~dew`FUfHoA>(Gj%&6mwu0>_zxC?uZ13Uo1vG1`d}W0n1B zjE^5TwQ1>*Lml)IZacG#R#x&46{DuO`$R#y?p%I!q%+oS8+EF4+L?X+s2t}VsVrM` z3G3dSea*ikHPuhyM6#rX(jD;}eQS=Ech)uN<8>ZVw_jX;`s-g`)J3+Pu^ex6fGan{ z)}|IoB<0xSBvpv+t+e-)&v z72{?tkJh%d%gOA^Mlpuuiibeabq!AWBUoheca<)u(z{Eqhi`3Y^9kLZM&KH}=9@G} zJrwRf`gxfo^rKYsrqfz9AP&1&cC7fdIPGs0WcffmlThoo-h8Og$+bA2W%SRw?l#+64vywU7M?I@|u`6@y4L;fr5qMcratg^F4&K$Lq{SQ- zg4PsK97AZpuRZv8HT9Q=7H>Oz44ZNz5`RMSA>)~BJ~_?Jk698GqL zNZ@CaRw2KDS$U!V0CdA4jd+KOB=hBo&&tZ(2c>uRn#j8F$c)B$O}ValMWKfG2O(~Hx z@|@Ai*^x_7)F!;SX{LSbPI7BKn3MJNt1*b1mONEySS#UrR+bQ(&OIpJYBJOV#W52h z4Bc=IeJSu;#i^@!fBPbN7wtBjAkQqd^E$9!t#rNx@f&z^#TK`!%p%?vKtH-_C8ncV zpJR@+r=?Z0yoXS-hVBOs6sQ?UJwdA^@l>73W*>|Zr0}KsuU{^{V!DvqYWC8V8A*}< z01;nIc-PMV0EAxi%3uc0YvwIgztY2W+UnS+9mLON@$|lLhb)+(P-Go{-8I1}&NE&A z0F5UT_#z*W?#hrruRrNp!{HF}eqVZcsKMf&ocq-Xt*J&D!c*(5q{p=#4>SruAfvxZUjEdb=oq~PCt3jFj{g9KAOJa|8TF+ccBJPNz&)uuQqh_K zKh9|>f0ZEoDFD6cdKyE`6acu*AnQkCOF#iMnWdz~03VGl7^5@*nf9RaF-K2qQP-sa z8SE)(DRYWoCr;G8sWD4H26^p87{^KoqyT;B#UENZpa5`aA6h9f+JG0IN;$|hgc>{0 z0o$b+r5z}s0*vH}PW>qDKnin6KU!ST(tr~mg)i6gqd7jbP%$!19VtgX^nhe~&;inp z)OY5W6bLcJCO)*i2YO0CFSQuviVXl1AH78Yb4&xL6dEy~dME%CoCEzSaf&DaqK-W& zdQbvTdeM(+Dn=fB=q#D+8Yg0 z+a)8K7aTIyFBdMw`wuh3yh-4b;p-o?eW*%0oYy<2X?L2%;I^@ZyOV;zaGzTAj~{q$ z;?~qnZ9I){k@7nh0=ka_Xb@=nDmYBfCK-tx@GDQO^3%TTUd!IG%W0noQIQ`~x^n$W z$Hi*D!hIXdAqAEKwELF(OIjr7mdF{dB<}S#wU&oJseDG#&8&$Pti*KO%Yj@c zgzrOm;7QRgGI9Bu?0i|`EdqTeXssGKCE7sPwdWojltbb>33?6qBD(2CdpQ|Y>2v6* z2b*l;oD}I_I{2y|E5w&;w`c_ZJlD}S>|WkH{{RwKka)AgTE?TVO*NIHvN7%e1M#TB z$wp4))Q#4Mo#T&M+|ce1F!dl+%Z~u-*4Ey9(4wdrARcO`hJiZ4g_oX$H*RV(3Nge{ zX&T_`x)m;TR`LXJN#eB#S6;czL#gSnX5v&_q2&8i5L^`){&o58B8;IcJM(pXd=)Bpto>W%AKmMxVe(WC3=!wNpiB`nElFRzAx4#&Tg4c`!(o1B-zF7qK{bAV+T)^I{-1BO=s!T+Y3bx za~gr$HRV(5nvB^JUP{1>6)bU74Dt>Gwmb9Iw2l$mR!gne_K9^(9y9abLO#R)oOP@EvAxwAL0hG`PySq>9)BddS^6e2i~jL zL$JBzZ_ncGV&F18+W^D(c&wp)dCo58T>3p$$^5Afa%$B$t&q8!EH&lJa@R9A`_4^7 zWF#HLwoZAbd(n=yR!EV>w{{epfcu~ir5VK;&N!w4+ccvhkaI>eNChP0r6W;}X>p#t zXaT+Hazz-RoSgQe;}aw6Ml;%%8KgW8PAC8?#U==$r9gRM_)r~4`EqmU4J(C&rR)t$ z9i8mUm~CZY^u<|^Le?ZdEs-DZ98|f*6p=$T5;2O|kHY%1ef5Gd{?pX!;R}};lTn2} zi<-(+q1>ewVB5{*T&tEKV2&!&YfEg|#LiD(^|HPWwG4dyMcdRM#XtTLO$iV0JoyRr zYT&IUDP0{A(8OOCs+>KR>~swEGkCh%;@rdb0U17=irbGs&>~>VU|f&yxgxH`2A=^2 z4LSrPzR_91+E*KQH~>SRlrhhs=BHabxBHfJk^b#^2)n_+hBO|_PB${J;Qp1_^}i!8 zXLE&3A61ZimJ*Zbc&iZjYgwG_`zppgUF)$E&E1dTQ%3INpXXBXa_EEE9J2T-`I{47 z!kYctUMg`%{>m!{{U4~YrAzk%!BG_jjUKieruS)`qH@UY)3PEym9YV0}{Cc zx#sacl^UGRTi7Y6+s3+lV+j<`_*1x8=v(INOlZmaS1TutVkh@@kL|ePt4-r;rd&m9 z8lP405QoF=P#&U&G+u5KHH5z%BTO?igshr-+vZJa3i!p z2dStZ#TU#li4uMptbK-pF;A6-hM?DVDVzg1QQv9`ON*=aO~&$EdmL35K34{`!g-N? z9V@yNBPxDmN>*k&%Pa8mx%#z6ee;@@RArEYF--`4D}lt)<1xodTzgcZ38$<*sN`XC zwm7B7wraqS1E(~*2YRn&#d5CFPBBkdnDnb+Bk4{ELj#T}`yq1_+6Gb0Gij|>Qc|hN znCrzJ&7s_m4jQlHba+0MMMl=EsB%4xcVYF1DV(0Bbcwa`Nw%%bfIn)8uQka!dX}U^ zx0*KbQtack8#$@=W4R8~nq8))+A%<0am60YE=9JKElLxLa8Ios%vT}`b6tmmoUFxj zz-r}!*GJ(e5#M7yTcvrqoj>+=bYbQ1qtfQ&Zp}lE^)!busmI=^M_xKt#UtI0#H-Sp z;2KPyN@?f?1q@~8nng%yrmEmG7!(1K(w&U^=93uhRd5p+6qx)e+2gGzUTL8fZ*lf# zIIlmuVs7Q^0sfWU>XNKBY+F2z1#mLInK5jA<6n2fP-=sdJRH%kbcP@@GYU7H4#Ai6K(z4uN)@Ui8 zGmE3_sx&?+3~~k^op*Xg$DIiW&~&Z@42*X4uBXFy8Gs=tcR$aH@wk%?oh4Bnd2Lpw z%5>w3UetYPuZ2DE;Pj=)A6f+%pakNVIi${MK=z;jiZhP1cck_mC;>+uXdT5F;)Bpo z0DF2;YH=BK*92q~BNU^8D$85F#k)p`&&NgPyK?z*;$U-PmFcs|PwFzfQ%@Drw}N~^ z^01FheWi)!tw-?Z#PWQ`&Na_s!oNgSBV*>J6OY+Pm&Y~UNARb_4ncWslkw?Sqxe6l zI*&V3iG6Uidsz1-$C?xwq-5`p&b?wEgK(S~wP_o+BTByy!M!0y9`@JUEIsB<+snv6{CZ!;cEWGHe4LpFE%addgKI%U3>bVheo_ zZfO+>KP+zF@E*1FdOt z%14)^+@DOLtq8s!_@Zn9rIGcoX#W6&{{Tl$l1SM&;XnG-1fLQ#;ljl`H=!7+`pfK3 zvpl{Zg?=fSLHjgO{{XzzqX)sy5Jza&@lXoZQRo?#j z%VzFE4{g-Fq~B5UBh{Bo(ILT(!o@M`ik)sW*tm>Xuh3VG8E47N(t6-EFtf4w-H+o_ zcE@CULDg)Nt?jCN1r=UT5b3cN&Z{3CLZ~(5DxtcJ_NDUF)_edr(z@pms-m{yWpvzDp?|+`U(Sh&ISrE|$mYbDH8A za=Z#cqcp(l9Oh+9vKvSHNPQ@Z6k7*}w zB;?b?SV6UFMMoTfaZgoa&M-abu*&{lsH7@K6=0u0=9%ukyYYx~RPd@cz;_J(g`XqmZfN9+cIv!3TFv)Y&{m zZ1AL#5HdT}fA~o(@x~iH)vK*Lo@ArS>}^GTJ-h)V%Z2DgNgUDLAZ%i}*YPE;Fccnr zYPj(dK>Lw)gN{1Wu_sdYp@|^kpf-$aHa`=@%kxHk*k=`CJV$KfJ9GL_1%|U?G0i~w zbe&e6{{RUMp&0(PDr23(&pNXJZ5j9bqulUI%05B~ryBQy!2JsC&7c%}stZdCNeGE!iP*o*)xQ_P2q zu;S8vqmz-pEs*1ZMyCcpuS(@)s3U;tKB#Hna9+d^d?YoexV1wSIjmsz`4t*=x zg0yUT^&Q>GqEbiA#&goFGJ=B?sDT&X6e-&uYNIfff8t)prcNrnmXiIO%{azAYHO(( zbjbcuhB(K1r#1B6L5+@3j8<=(p`s?z2y2re&J=X5M3;Vge8;t8Y0vUW>6{9@k_frL z9`!^r%i%t5!@Wl%{^w_QsU#SI2|T|_VFS*<>@rOuqLry=q?dk5fyQdXzS|W&8Q=7% z$Wv)C`B|N~#Wq33yg5C3&}mY9^0_7M$qZ2-_sOa%0KbtK@T0v*(-hTOB~9BGJk?m` zGF)7{j1Xy(bGNaWwF$0cW)Hg{=bToynR)%Ia)|6oh3o5C*CkE7@|NJ|9CWBO8HK(4 zY}{@K6kMxa8$V})Elz7xY#qClnq;#(K-SD~(eeqZ_py9N9P8&n&Bj{hGbwE5u8#B z6|J1bt}I6(SoE&DPTdrT|ImAh>*~_O8CoK(U3p?XEmT`BA+Hb3IEDBBu&4Dn>Y7 zwHg{7uq(@M?DP>vVhn`SbIMBJXQv!836!LN^5J426;(#n$pPQPr@rPUy zRV~3J;;l6B+o5^n3Zj59Z{RT&$4cX7UGg*fn%~!aO#@yFXgTAku4d|1A())gB4S(> zSaJCp&5a0ShU$2vX<5|##E(NvjP7bg8gY^3fN~g8@wbYv6Kw-`LsH4|D9=MkqA3nf zJ*pI7lP@_Lrq1kgR{^~$7#zq{W7>o>q>JZ_I*y=c6=hR^bInz;ltiHV40F=0Je!v* z^`=P#r!L!m?`opi^El~OUk@M4)~Pt#k(~FWF@$YAkHW0OF5aM;&JJ1e-mk$PaqB=9 zqd6EOuS!RczA8jPw;q(~SB1~zND3&eovbOvNEyMY@DE(mNY5Rq0Eluo4x_bPO|nPS z2FFUQunoD*IR-n7^q^$1KE~MndsL2d7{>%uF9SO%&V7YVvtYwe0~8W{X-cl*4Li%| zM@n&DUbGB?MB}AHx8>wwt%11osNFa;fQeUf^`?~@sZji)mHP2aV}>!dqh)scoPkQ6 zd8xwuyk?bzR6H-uiqD;hkZt8nX|x#(-D<4R7hI?q6j%y~aKny0O8*t8PvMQ9yoYN4#VvshP zxn|%1d)9ntyM|3%wr!FF_)rG5yvw*L^~F)Yi^{re4jg0}o;F>;(W)=*5^lrg{LKOq z)Qo~oMO&09P(@R-!*Dv9mgQRrfa5*r0YvV+Aly$MN`_$QRfk;Ek>)kpc|N9+KwUCA z&<6qW8%UB^W4(=Yk@E!{lU_}Jj3Zt!r{)5_iq!3fqoU0V47#Z+^{)liqfv1x5EYS# z+gH#L%ec<(>t3DUc?b3?^Im5z#UySA9+l|60&ymngMvq;c{#jqK<>gneDn<^zj*w1 ztBgKliqF#cm##-j(P8r*YvF4AXR%CWE--r0j1Fk5&46)5Egek)0m-C13UK7rJwo<7 zD`%CQ4WqqpLX7KFRN%E@l$2H3LtNJ5)1fK|GI|R0d%KsqnVv@6%yLaw)inpdx{_wx z19Zu({8#LG7EezBMSnBg`25Ej>(7;JShBK~{^>2^<9AlCRMRX*pJf%go)t%0^KAn3 zSnAQca*T0|bgxrZ3Wi#WRQm|mr_oYnavcn`O7`=MH!?flc#z> z56n^y+iS)3`v#9!xS2j>GJ16BUeI%~{{Y=J@pvY)$}_Gn@qb|GJLk-!L8fd_-=H=4$;tXYN~i|Q#az%YoPoWrj z!Be#QoA;KMn*N-!CJW=`$E|QzHj-LS@X6IqGwWOa7dMud{{Uwp#9oDX9MqmMjy1Sf zLGzpfNBQ@yCb^@jR3+@{@^lXc<9xUW0l54}HJ#!@KeZciK2bK4l= zuJ)15%X(`4$WMs0=t~&m!>I4px!Lu3H62B%+-}g7^|^H4Z9Xi%B(^94|=hqtoIjz;j?EQe8NA*x(zeJ zkU|8vzq~vUotC-;RgHE=fGFqyuPYIlQ;p*dPgf0sY4gaZ6JG5A#utv8MrrD|a)PD6 z_bXGpW=vxs`%{!j5a1K(UPG&QbJbcIcUm3v(H*{1?j1m`W%MiC88bDkiZl1PKgzq< z@7YcrK_0%9e%AU48*Hi>dUUSZIfS6CBy!@g?zXo)s!t{} zMXDp-Y0f<0GqbL1%_dpw?%E54G03MFVT$!=)s1C%v&655l|9LBY+mef)C}_2thKXs zeWiYE^sPvyXK=fK%}gyOFO^-{_pXS^tqxNo%90lf%Z&6jE5-8f>r&q|izr9q9R)`j zF1W`vsYN#m8=$K;t`=ys#vF4^k_7~o<+|}z*o9;#qPm_ww8nb|l_vWrn?J%ol~}xW zTUKc}Us}r2x4xd6Umn=3zY*SC1xq-kQ1YF)#dOm6MI%1a%ll(kc4FUVjPc(!*TbdT zz~3ks?axZ3qG=+}Pe9DxV-8MhP(&B_{{ULllFF4uz;2Ztz!Jh$c_*-@7|?$oN_xJ#vZ?Tu6TI+Nl@_0($NQz-oae1?$88nF%#x<%VS+0=!;$$qL~)iRuUyu>xgTm3 z!yS$6V%>Z)@Wt36tUzPjG5-J>@-H5EBmNPKk@ja}Zr^Y*{VV9uFl)|=SUi?*Q1{ba>Y>>7Ht_Qp7GsP6b;tN6_C6H21pjbVy$tkcze8JvQRQ zRMe~;!z!>~aqCt-7XJXqs}2r${2?f?2(FfG8%>=8X1=q;tux zVe(pD>3VkTkb30ws@C2p)-BU&-5tJ%rFUBAhqYVH97k`bO7b3d;<;G<9eAp5yQHws z_oN@=U3q;^X;1g6#x=Bl>oM*%o2!P*_eYO>Rm(pUYBuqhQtgab#tF%zq z^w@;tati}iZ@v=SUBpCI@ms%U2mC9k)uVfIne$H8JeKELxSBQwc{AzSxtZi=bCP&9 z>$Ch6yox7(?R3sMZ2ti3*OhA;blN_lEtJkAWMVgt^~;D+Zt*mPx)g+%<24H%&(@m6 z{{Z!=y=#=#)eH-F06~q0DaIvWjRE)CM&6?z;%auPb8%J^Vtzfkwv)uLN z^Zp#gD)alaZadeW1C<9oYFIp3c|U_8(~QZ&Dsa5uRS2#bVpVkH4x+9q$VI<#Psqhr z^N_DoP7W|T(*jpt-5zVtZ;&n2oag2yyXil99^CaEYlYOJ@@}0nGFY{C;P++~ibP~n z(D6+pBAlIT(TU8-I#PqkpkN9PJ65C-+zvBUjai$N_o}_?8k?HOVpw|BvD2+nhpFvX z6p|=`6Wm@XqrDZO0*Y`MrH(h2REjT|*x^Qc*Joq!!^9VM{&9PFm4-kkH4>=^d`xOB z>~VxsPaIaJucS|--WzGyIUmNOipyioQj%)uO*OdF){Id_F$O6p??+BEK*i_UfzEJg zI(v#<^ngzEVw8ItI`*JKXC{ugqL0Ry3y#^N9+Y?Vp!M%S2z%0=DCU9G(ioVd@TH>| z6bKJa)OMrsp#F3WFnwqT)`~(X0de@zj2@H@xTQU45Qd5~%?5#qk6K418Z}T zSz?RobDB=97g6#vn*#=vsU5RjlKeQ-cJ6D`80r;ibpHSWi;10XZyyWB5MrU?DXydT zayY^;DLU7vMey%POc!}y>eQFM4AJc&4HdtB>`iC&$aF8*Nb>xEd*|s>Bo`0&ZRbDm z176Kzqu4`hAC+$(Pwv&#wuJx!CC{!aIb(YwmLJUVIJB)o=0hAdk~8(g4Yj8SgLS!f z?tvl)yFPJVjU0YPuv8$$Y$~5#DkY4ULcM}KvR?vfFv4V(blN|5ww17r z!Nqv5!`c4N;*~;w)+i_SuXcA4#?roafxC*FR+R#W!dBC4E%eJox3-G`2LN}kDEN=4 zYO-F4E)k-(-IXJ~b&&i-fcSy*`Qs7B7^<=A)xWH0_MRcr$~aay$~{CMvzIi{Z&hS@ zx5BlF?`JQDkT+5}_ODjHcN%=n7zMG?yj#e<@IQ#W#u79P*d%&py=O`B9-FILquboa zyr|rS^Z8X`7roEWntEt>MzC%Ur*O9|CiQH4{{Z#t)qWT?`{*a_A-uof&*xn=#*d`l zPLs`RZt??=#}zHsr>1E3z{xyOqW=I0qNQaxsKpecXL5&(o;C2)`}*u8RDKQB?e!fN zAsoA;kA@!g=Ds)ao9nJEtzT`jwj18LjUQaU(60p6GVRaaMm!qQI9WPmN}^Idlg7Rh zo5WBDw{Rsx^5(Mq8{wZ3Xp-!bNK)H7h{ob-g^$I}h!*P0EsvR%u~S@pUAJh@*{!~1 z>z>s-l~j2wK4`sedSGT%8}ZF~2aeQR_@d5a0Q}$q?oDCe{6W`l?-q2JM5FjYY$kll@y;4@pm(oAE&T3W`Y2M@ZsP_Y+_)5ky40dUb?!f;5 zI`Z!pPo`SQ^2`Vyb*FL6|Sk#9yHSP3ko0m{N@2IWYe+{&0hm<$y zYbx7Zh6Nuw|-Lz!&&R81E2cEUxPHs`VIcFO^2{(4n;Yrx@O`{^UBEz~5Uur|s zG;XBcG1r=R3krRx92#$!gdCB@Cz`!OenO699HgJhl=Y^r_h71ybI0B5^s5o+_wt{T z&QtHV9Mton*^pp;X?tMR__PgHL;nCCg#qr&D$@8~`LVu8qWYZFy0BeCk(k_OlRTQ< z{{VzvY0SEuYCqXdX~RL&)o}NcNuTbD&EjCXmF%V1=kh&hBoAuoS4+|mV8tu_TNNT% z=}1E^o`m+x6H@Vz8l@wY5+FF;QYy(I#Bn?Q1$JWLVo%-MM!!X)?Xos_+m66iPZ`-4 z>`qm5y+&WTXDG+0s}cBnRFwY!sPg{++I9d}L~f)!?{Ch5aV{`fu~6}n>>kM&(fCsJ z#$>s-kJud4ayn7bYaHuI{3y+zPAU_wOP`hi zKD93q1X86Vc|jwnr>kLq!nwBAu9?17jdSWMyqcBc{{YKUpYGKCW&!MGc9E1MX9w$3 z31e2|p!{pjZm;irvIWbJp~Ydn#l(zvT+H8BHLNGku$?y@&tI1Q#x!8}F@yf_tm$=~ zE8-rC`w8 ze-`SFIB1jHFEw5KNvlcL@xKKh;aQt$Leo(V3s0)*51rR?`#nmz2H$F3fb4oO0pLRwFPPW5pxwnQ&|A3TQT&eFr?{~%s_yH+O%L`Qx!u4 zHDcW1hHH8~iIEM`W>fuY5S4P}a@nRu9^=zBjH#t2H7y3JW7jn-XuN_mQmiK&kH(x6 z4??CFDwO%Tpe0V}&IJJtXsMxd4OPIU#v9(G3&k~tR)Ju0!yPYJ-Pp`!^8nLGZq2HtAp45e2CBAnrqRDVD+z^;#%@hRM%6{%IT)u zi@4^3I2`7VJ5pzYE86urAe6-S#}v=9s*y z`}0m8m40f^rxejeC*eq9_Micd=7EgRMkoPKJt)ox6rA+M6acgn&orEhQ$PnD>uW{6 zOEzg5HgnhmSiJ>Wv?F23OU&SV+WmCAiI0o8kq|KX+ya z*13z++jSt%dVp8jQF&7(C)F%YVeQ??T0BaQ!++4F0 z_K7ff!8xeLM--uR-}+Oqh@|ry0L=JagVLIrRwUq@^&_Q9V>#XY=?R z;FR#at1S4VNX7-hKSiN@QKvA>aL*^W0;)9R_9e>3s7~M-a2$II$$t{YSLCpipH^@x z2k{Gmxpe;k{E1tAR;OZptb3cJDLq9VTJ8JFE0mkXvqZoxif8?%s;%PvOZZ~9kLWW| z?4*jh+iX?FKMHA9Uc?VvR}kJT))}~XPaF*$rRSawDh9p1a6{f)9RC2*Lr1e=bb3H%9P#;zagYvPNZ0DZyv%uya?;4d z-OXLKwnEupex#b-o)%LwomCUOYs*N1^DiJC+p|b@jU^YG=+DsCB(O#>c8YO9i~uoR zKiT?jW%ZMxm&Cd}V;+9udTkX={8goa!FE4N=WZ?I9T$$+6-lFHJl8bvyr$5qnbg0F z?38?#^Evurpgu8O-z|e+^gHXCDoOs7g->0z9>EsobZz4qv+~)1JqgW1-Z8&?g@Pcy zgjNwwM-?KjSaK?(L0nwspz$WHCU(3@?x|KG)wM~!_2C?U3X02(FgWX1VZxjq1$R=z zN2)pMR%>F}xxHcYUrc_SRAf&e!(7bG*qIG4YMvrDu0X&&>Z{@4pxun=)|-~B(YMpt z?fk$u9C{PZUpm>T3a-P2@N^HOnM+LRU9Vp$fLuV(sX>)r)CvXO(cci#+4{)(yD= zQC&8jDl!Ac7lV$~gtRt`H!b4;4^dhQxKDbcZ!(MzZ(6X|8%Ju)vEp5hHxMf6z7gA# zy#VQxSXVa+0XzeN70t^30A~~{)q0+l$H2^&N%P|jJCj{*p`~hq+^^YO?f&TMD+<#{ zxJ%VD!ypRVi6*zh&wHIwii}Rh+d4?jH*6hhhU^Xrvm{5AetBKJiO8;q;U>v)Nc9ur+f{6& z?YE#Mk2Ni?jG@%#Yh;|{jN_$wA+<(3nE^GWqQ&HD3h|s1$KhK;2`Ia=B_z?_$oant zPTQ{JmenB9|+Q{A7M0q8o_E1RSNqd$Avgjr(Afs`izbtbeV z1Clyc1*D|i{I$MU5vED`sR@=Mkh=ve2tmeaIT6hvAa3c3sk;U6dT~f4Cfxz*Pc#a} zmWRuN1dRAmI zgjtWSd8-j=?8!XMfsabAum#g*W*E<<1*0D3B|2+4Jof^#BbA|Kd|;AoBxZ*Vd^q zG-_FuypUT>_mFNwS~iDlGr`8;$QY~$?lwsk(mqHdIP|TnxxUYIvkc&Y`BM=VpFZoz z<8E1BBX=KK^eGCh<-0M?;fnKt7yL{FiOTT6F|SmzvKNusP6l?5l>63Iq@u1k$C=o% zrfKBdO49UZ%KHl2W3n|>=}iC(0o%PcN6E!_^=dh@(5DVmN{xl6rI2En9FFwaIUI_> z)Ph*U9QUM-E@{j_JQ_my??_^peRELD3ERQVI!mC7oYqzLv>;aOqtmS*DC#jXmT%$4 zKN`T0d6O!yAR51MtNo{N*l>GdqOpX$n}|Jo)d6=NTp$DQ#cAkpvq;6eox-Tej`*#; z8aze2)4#niHu3`TRhZ6B=b*diLr`6Oq|l54OI@su~yKiUU{Yh z6US;%p45kFrBVQ<1C(*kTBoUN7TQ!`&da#}012y7%(n16u0T~4!u(5XS!89|Lr^H||#DsnoBx|(fkF8U#O7VO>fNeIFQCfq7%NCfXz{idPC@lahT$ zy*AOeK7I2=>t!*Tj?X*rdeDKLGy~=At=6oL6ocNNi9k&I3XzLr9Fa_snZf6Zp)(aE zG0u7#y8J0DGwdrm<-;#RIHWQo!)Nua8#z3|gMihPu36Mpg}EiO)9|1TXvWm!^`+{Z zifll-;+0R#P>yH;tTF)=R#ZE`*{iJ%Lvz>OqLL%zoOSo41$ddj;P8EF!9lx|!K#Q| zatOz_rBAf52Q*j3B0uM9+l*Pl~^rmonF{=}l368wgBETLxde9=&PQc?i z&0B_E_~NpnkgJa1)x?u;x}KB)pc}3!cM+aAs>vY)XFSx{3_bnnfa4|&Sb|k!%T{!p z9w;;{4DLfhgtB_WtPDV#+fg5Ma-73Uj1mb`qUy^S{ZVhKW+tKpfRMSasWtbX?9&MVK%*ZVxKb>V(9veUog;L%^Bi=25^d4_OCqgF0j{ECK%3DdXClA zc!vDiS+c7IX9Nt_o-}IiOFEZ5YxF)4%GJKLQFOL#< zWY3qq!FXkGc~g;Incb?1iK!Ii;ZRDgZ;k{0(?-j4ZBO#B<9XyOE#0 z+P%z;!_vH$#gN_&b^NdOWwXhze<78tKSPfiy~7Jkp6$<*aHk8X;sk2P^(x}Q(|;(qh^tLu&mc5jwj9gLnJ)1gLq#v7(+MIhcezgu2NfQ}6((r6Mq0z z$=^}O8_eMmcQLNVN6}-jgY7o}2F7xGQ5AAA6=O~oBJnzx(+~yEt#C3D8oF;0>Za;O zjwTyBW74^o<+EDscn?+ymyuC{=11qA)yjBNP5VvoxPCVD&3Zz7 zqiDw!;%1nq{5YPj3lFC}hkbfe_acvahDX5Q)Fw>#uLqXrre70rfCVR+yRIsdNP1O- zetGXw<6#y;Lm=>({Gs@%W_Jd)!T=~N|v$M!o3L8N0E6_ zM=LM!Ms}Qz^?eM{!M)!D)K^X7pANLwhUUoOU+*Xtk6{|yxr*Zs2N*TE6b<;<@0Htv1uF)=|}I?5v5Fhn6mWQEUK>M#}LEx{UIrpyy@jO`ncfZ5`q3ZKG+oM(Ygg&yYO zD`=v8$h&~(e&`+GQp+besD(~ACOl_WNDW7mpypJZ*c=+;?7ZBR3c zdtckd8#~OK7qPB8SlHHz`^-?r7aq0d{{R;5Be=4*iWPY!54#F8fr_WDd`*U^g}Izof~15+etsUUqTepr~Rnf?LO=F$8$1-;@dGJ(o&&MRItNcASTFP!nk zL`Yuwq%T=}G;7XFG;p=|+H!hgsp}Tnex+`)Pm-at^0p~m!0%O^qxPy);wLs$hfmS% z7_@P@Z}yIAQ7xoxxfO@EYK})ja4Hg49Mz~tu^jBPCBzKdj1jT*D@_-{IF1w_MXKAE z@T4*U(yw7$w%V=6-U6@Tny)smENWUyh|qm;Q8R(kyz9rhmEE=2R7rfX$!Ps4JqxEE zd06e{@mvw`btKPRDXLOxULkd_NbCZkA?R{KTe*~Ae@?A=14tohEr zs;;d14%YFn;`3p;c~OV0d8dwa3v;U%kd}8$jB$b3{)W0Q0NUQz>3``e!HD~Ztyb~M zyIe(dbF{CPc*YMTetiB_rSBb1M;l8+#cplnww>I21enyf-~JvR=9x%NT{ z7{L{Zq9YvCfC1i-S2ZY6Kn+yQIQ+e-Nx-O?vp@7)mLr2Ig8oi~QIj)tpD>&b5lBhpg=XJ>IR>1E2iCm^oa~q$IHHc;w7AcD*vw>^DOE_~t~kPVs%_S>s%a6?95q~1kyMc3 zs_OEhlm#)=6F{UVty>_mr?6dC$%q7rM+Ux#({&lmnr;i_Y~a_;fy8sd{gy!0?^-qY zpQ6I+{mfUDj_7sJJoCqFe%{Uq!EV*Y5;4Vh9x;!4$lQ&mwQ$5_@m&}xUY&@qA9y;N z1t)rTIj+;3F^mcaPSl<0aZExJjs-4g{AdG;00&Av=%b;aL5c?+lu?c;g@xdXPSgrh z*S!EC7^C@8id<)<05lFd($auv?e9Ph9cg+RF-JI{0*q#ideMpiN;^{WXvPg8iPn#5 zT+!Bm6X`}il0Y(zplEQPP{{M~=UMrQW9iZprP6T)}236qRBtE6ackHgn0I zge_TJ16pD7>9T$-DSJq+qvd9QQ|U+seXCN}!@9NOluKns9e1}%)rY`(v*XR46!jrV zsCD4Fl%UzmQkv>6ybpJ24)?tbzJV)J&*AmE#IHTf>`2ZxU{t(JJCE5&;PHw$2a*MP zT6{gyKn1+R@8%k*ZQ)HSEkUD^6_I!W-y*Yk$QSHndGDDXf7UPIKy@SlN%XH?hfUDo zB~)7Fdkkb$m%44F)(p_Y85qj(QT535AFyYULj}a(811K#Pjo_R(rCK8tGRUfKt8-z zu4#7B9X=wFDC4Fo_<>h|pneq(82b;{o-ZDSs>^V&{gA7l?;e$@7lAc*8EIi(!1b>~ zxP(Qk#zq33yjGx$=RN9Wi=RRJ6nS*M0@NXd%GWXcy@J&Ge}KN#51TdIfaeEl;=Lkx zvui2q>MD+kxVM!K30L~{sQS#>E7?TmZXK2&4rc92CIg@t}nFfm$-8iT?Q%Ba|>Td6?xHK-Af9e$LYnOYed!fjYw0l}-n zRq}%d>^f9B#7?%MznwbT0`{?f@o}^RL)if$%ahYNtjifc;%O=qjxqtQBN|7`OrQ_; zs|;W1_WIL#x6r2_#Y9!p26SI8eQK_xq3mDUt54!R8U+O3BQN^{HJPY*&q!N$NSMgP zbR1KSIbUJ(ByZ{O=2@ZdR=+yoEq){0Tib}no^m^rP*3qL=$7(rqEAEA)qP&0=ufnX z*4;+yt0M$F;;dkXVLk;vuCcjVAyEIH{~)57vgn&ir@ z)s2k;QIBzTGb>tdh>(w8Edgi_^8K{+;Qe{br$HhsQqV~n}~02-}veLc<$)5z`W zTfJ7!JJM$zC{*IMLgr()k_{naNlBAh2vA#hQYamIpISdm(cg*&C_da8D9FcJKu6Y) zgS{A~q|Q%T05Ez|fxzaII42Yn&%FZ<2|Uq^4k`BLZ8;H&`y!1ZwvBNy4Y;a2<_ET1)(e+7o?X!Nl=Au$b4k^8lX7Cq<^sP@t zicLx%F|o)s+OLDWFA(ESkMXW+z^x=YVn;gdU%K1kI!!>LaQhD@t%01B$HUdVn+DVzQPYt%K3 zK*g+GLbmay*$Cx&^Hfd!$vIywN3z#iuc4HwyPSktPOWopg)Cd1yS`IXN8ycW*a2u0 zJP_v*;L1nRn$yg~23E(`sbX5#&CDLI_ReZ$@NV3Bx|Cq&oF!>_ zu6nsN!g4)mc&UrnqL=(4`fNmbnuLwt0;f$IKtKsuWFU58Dts>7kPRY$qdX6#Pu3>- zhqH*~w$b7sN2dZuLQZPHxrKk#*}@09)kDGJmZjC7a=8&}?UNDm2+(^draj#5Mr0s= zvr(wyxTftSoPKp2?T?fh`$qw1*;L98qMPhSaW^#i#6PL zla9(WRoh#HbV7eh%oeZx(@r){2MN!uX7Q}k*dpV2fQ*3y4}8;3uX8RoqMY`sjb$c7 z6*Yd!(+&ygSk%SIE8L|Av6&)tj!6a+vE0JwT;4)pV4iExFD!tK zush=w#$MW(nU7Ej&3jpV)kMx}@v%i$J!;jwj~FVCw0cwkQ{y<0dRMarW08f}Etcme zty9HlO_HY-OK&_>)u-=V6BB77oT-pFr-6!cgP&TM(;djdb503T;8KCdTGdk~;{pm$ zoOY*yPF1S*Xf8xk6%>n#wnrRdp_F2>oiV0G4-P%*`VKfXK`01Pzdh$&q zfQ~_y%`{ZZK3{rf2jyBMK-_fqrm!Q5lmG^O=^SN6Hh`+iY8Mq@hcycTJu3+#L|0*+ zYDms0t=5$fHJo&1GTOG}$4Y^RJXFw;oN!GNs1kNLt);01IO+VUaYj9Y11Dy!KE%*L#xq?wY(((&6-aJpQktB3S?4#JZOxhe zs|Q#6+CS%PJBISP?o2q zB!SdAjw#)1pYZ+Ml0p@q%)sT3b6o%#?m@54aTHw|jt`;ql;_VCA{&$YgX%f2KEGX; za&k8l)6@Loy$)bJw#dlGHRsxxKiU#EW&;>C^?Wfuc1ZGbMX^)))td{SvfKyb(BfqlNEar_zoPhM?_pJ!!iTX$nxI9;wjNss~`Y{z| z+VdcdU3yo^)}<;_ zaF*!x;UzfpAkGgIr=B>Z=hBMAprfT7MJGMZXaRH00QI1rD9;oCy(-PAser&cOo@YI|lJCn4Ed?G4@)3_`1M-#JGRM70DQe>|kb>%f(OC>|ZiEi9BCzleW%x zKkYCT2mB^XzjsX;_mlqstz7QYoYR&v!k4iZF}!?dcZ@BhYwMnBNc=^q+zhI~fb{uu z#bL(>=T~h2T!YR%E4GFjFXB1s)oFXCulBa8!~Q$0d)-BsKW>*N*i#QZ=|?M! z4Eoo1)hTv4eZ2a!D(3G|^A2wA0LBI+HBj7Klk;54PI~UGiQvfTmG`PL+ki;M52bQc z!*ab2s8+fuHs|}!&Gn|NU=Aw5haKn#CcKPv*e2)`d1}dDe84os?5(Uj-r&It7bf&DLlMaFS0iFg-`$td#mtr~#)MLUja=I=L54d8pI@Qzs2wl;dNba=AFA13hUvuVYJ&dy44X!LgE| zWjO1O1yPbB8=BH!7;{iE^UpPnN_RG=GdZIK_6C$k$7-0WhCL6~lNHVE&H2boV?8Oz zgdV?zOhBXnb?Hq)!sZ^IfvJ}VrA7y#sSse}Ij)E!IkL(QKf;_a2`7aV#XMAlAQHT{ zVMT3V$cMyt`XYIjNw{|83b!;TlZ@3r3y}5$=E~sXJx()P@-98A@*ID;h>||0j<8J2 z^1$m)NY~P(b;-%41B2T&$$Off9%2EB1D{YR5#aay>QW9kpbjhb-(w!fg>oM+2ZnL$ zgGxNnf#*sw+j*%m{uHx#c`;+;z0h6yV7-PBfS9+aDZ z{Z*W>@MS3-wv*$fd6F6P7;jOLT@&lpS0D)HN6(=j%Dj-r&#g^nWm}at`F37PgT->x z!r0a_JyKa#TUN*$4{GBtqYE<>UJo_UTQ$YaqIt?t&d#WvBv)(z*g(&%X+?I$K5l*MH&1~CVT11^ zbv>%vkc4&ot0s*}c9~zF%Qdy9SRo4ARkP4~R!zSncWUcAHy7IPptdpjk&}kN{&XdG zVr1-&tHVAUvzpuOR~D;=`>Ml(?^ZSK7S7f*n%*UiiN^xEnB!QHQ2+{~01C(P1AgW) z)a0C3O}bkDwjEk;K}*ARi%M(+zMily(!{eM|$P4+k21l@H-!4&1Y*3X>V#| zk`)d7BNd?6QNtN|2mlP=*8{HV=TN&ibF&{VI2f&I?sj1C&b0N|tM=q}A(2S+4M>dy z{{VC4&#h&7xNb<>Pg#^#TAhz}rdvj8%^FPx2Na4nzqj(L@ZRnDcl^D9-ob5KZ%{uks=|s2E+PalWeayLJFpfG^izf2!k-HO$j6~$%E^5WSrOV8X9AJexC7Tsq(iYrK zGCK=IRb$U5j0)I}O@L%p9iH;aNa!+gT7PH?*lNYInWkSaxRaWF$pcJ{@N>S1!i#5@ zh8W|Tj{65ljBe^jIjICzo&NxN4{&{ZRV#!NJFwvQt4`lKaz0Vty;PT#U^Ca63o5}f zM|67}RrS`?+#;|WcJ&?W7D5+MNVk3Aftr4^Y4%y+l`^ESLD100V^{5;Bb@i87lB$G z&xI$ru67Hekw~YEoY2~aHXeBOskr%0x*Non_405)>MGusaFN4vB#)ihz|C?tT8bH@ z4%=9+b5pdpt6??7E=uF>`U);CL#B#&hMg$~EZeb~%y|N7U;+Vd=D9!kNGAImMIexK z#?ekX)P~M91QzT^1X8(thSl0;&K&c&_N=X9+y{uM&mAe!>ggwttVRbM_Ngysj(MV0 zWEjRs=8KNTWwfT=;nX%VxjpKt$dTMJ3O2raRJw@8^OOLt1_-L8W-Z+aqV@|Lx_l8l z6RMo;=O9(~m+g9P);V~`-cGozjUlA9mNtL&QejWGHKi(jlIy0_et=cnRxfCUZta;i zmUP^p_pe&fHpQhRXYj5Q!Ma2Fle~$AW0k<;>0RU_%1wiT+PwT-RQ=PcjXP>vGJM9E z$2`+3A9#){YFXkyNp6+SYMR=|n8TC1jlJjs9X8r1V<|F>_iE5o zjZ~Pzipq{pF>{}-Urel7su0#C-9SC-sMCN*O5?9QS1oR=_lh&r*I#W8$i{i%n2DXZ zsIoCjApqi|Cmrbl8@>*DR3-Nk2Q;&(Vlhlen{Ymq0W@pKJ?h2{ByJM`^{2Cw{50$Y zWb;qpkMW=(H8#ZxNdV%2IG-PCa@gtOC|O4C3C<0972U=sS8NX0^{%VOx}V#17lef> zgyTNmmBdWqMf&v=%_3_nWd>=I91l_4R2H%qfOo}Pg*?ds11Hc^H0XC;9kmwvbZk*n z5I7y_y0nr+##Cdoy7m>NWfzyGMY{l=ezlpXoQV^$9Vs)4TC)Y6-S-j>O>A3&$PZqd zPHPthB*soNTNZ56AjjPvl^|#4(L$31MNCkfI^`(h+x7LfIBae1=`_dVadO>Uh zf;%4d9-epHsvbMiUodGi@79^7HgyEYIP7RcI>^t;MsVG+LOWyT!S|@Q7REY`^(Nw= zvvLnwWQ}<;JN+v*>;QMEKH{!PC<(Zc)4gX(>$QLqBJtqf#k260v7W{zFBIIB!BIn75Z zs3L$VNQ5^uESSd?JfLmPYO^=Zf;gZFckbgH)Parx%~lLlj2zT~sR4c$^B3me`&FpD z4{DoB z~ z+OPv{!*;D3S#yFZGwm*Szgw-+{ZTame4af-Oy9QEx{ZrdWVo@u5Bfq0utxUjpBB%4$* z1qWeAfQu#E@iVdHb*`i0WuMt@9%N0TQ=P-Pu1~=Z!&bQkNIYOy9%8SDk=2Fx&rY%j z?FxC%Y*wKJIn89+lD7yu`qtEgBx1e-zLGtNPmltwbJ;KPa{l@6z0EQiu$xD;i;c0(yHoKk;ggQ#+iXmCp_YtpHsl*zKLj$ z5v@zwewA^ld7ow(+1E7$kxOTBvHn>R!Su~`-VL|%wEgGrKPNQr6zINk8>?)WURVw* zAlwRm+cJybaJkbKFUk@c;WuO_m;n@zk+i+(xz$6Sxj zy(dc5A=NDsXpS8HyUW@JRLY{9>yfNqk7r#U(GcX)EK;NOJYB8u8S# z$KoF?9IBC#&3ho^;Qm$SzAw|GeQ?a+H_L@n^{;Crm9ZZqlNsV5)R*R{{V#;`LVV0*8xo{2QnMmr9KEH zxR4}DSo>4qwVLL2jyR;;-44s^kSrbDH|W|@~NKJ`+G&tDN5Ys`~I(Ic^hPcn_i zpPIAv-C3?w#~Irg{c6?5v@Z~>WEAKRt#kLI3R|mp;<_M@3av*sc4FK!4aJU5YNuYt zu1vd!HC{AtIyDQNu>7c=h|W5*&^#{?gH1p{4bwi=wO=z!K&=!UbQv}Lul6F*97qQlt_f0k?q!%p#IeZ&yU3kok~Nc+b_zvkYF-arEX8+d z50NL|PwQURP~NdTtjaqx$h8-CobL>bI*e9p5L>NuzAOuGen<=R4wcHY7AL3SUh7so za%=*$)l3>{h7}@~IOFlD0?o9t#Nfpy%pBIq@eZo05kNe5?^tS8FbTmYsIAy-V{36D z&i-ol1FcI7jE`H?Ct{NBQ_lf^#*$Nfspbi!80V8!k!@r~f3w?^^YPU7rb*Trt`Ao= z8@r#qApZcqtIDMDHmNx!?l4baPCqKH+Lhd+=DCo4I#Rh-Jz?iX`|_ywEmhl4vO)7) z$IrcaTTdX5CTGa^tZhbnocy;E5Z~>QnrVxa_D9yV)F=HVNgkZlckv#UpYreyI|}gT zx|xPN*T=hNp=RFMW0UmFQ75)Pj5L%y%t`dB&*SYaKI;Cz{d)1TN&XW}2Z}5+)+P9l zr!PfPJp)!%{{W8k+tk}7y09PK99Nz*vHmKCK*Qz+iviWi;>|5w1+z|jZT|r4Q@`OZ zjR`T@ryqrI`2PS(Y?4oUtPc!38u#hz6mU;+nD?ir-lSC}jz<}% zgdzFsQh}1v{uBX`{V9K)Zf3+kaPd_SU!`0<4O4Cjtm+jJsly7ohow^fA&R*f&1V73 zc{ntNjN*{;D%l8Q{nMUBdhdg7e9amzNo)=Uc^(cu>(Ra+PrFZKCmVR;y!>Q+%bgTn zr5_nyh~#@QsGAF$tfRl9aNJth{^D7ffSzPoUGG7S1DM^ixv#7dyf= zw4vLeD~ep`RwBoxC>&Mv(6xDSvre4-Mk;^!MYZ68&Ya2zT)3s}BD#;2nK|LhT=Gl zSF}UnT@DZe*hToJX_}6eWe|np zw~a!#_eDq7W6>0-KBtgHYj-eTF4p1xh59qYUt+z1<2Jq<)o$FZa3o}P^9^c6;2lyy^ISr|?x8i_>5wdU^TsxD*mkXR z4NS3f=ru(iRde7=%V4b6frA_zMk`w1;mxB)8e5r|kU0zo^sd8LiAAC@2jxAx)$3p$ z-ZO#sMMK2YYjVAmPCY&z=@GBZ6pY@!VW{-43Ta7sEKh0}j&mT+KRWK03fZiiUCXOZ zol9~JN41+AxxmsJ{Wd)4Bb>u2>-KvJ2 zuIP5wL0?gi<;XPDTUrI|bKWnK=HBTV8DvE1u@4o?nO;$X?0w0upT)YSov9QyQ;9Z^ z#{;OYPs<^W8nSBJjJ>D3$8g7cbm^M!?E_1rN(WuPDeqo&Zc0i4=Xbqya(JfWNwE>6 zLH7(~tz9^|J0VG(W{k2ulP<%RayhLvx0Ha}7}u3S@ds74QmE11wwWc88Hs#0Gyh{7T+ODAJWx91M(5oE(0H4CEHnph{ z{{SEJ414CU>XR3?N4ZRGqJ^4Eh*V>{)()MkX!g=fl4=mHPxrgml0Eg*gqFCGiT?m- ziipbRC7ri-JG#{@A9gQoU8tEj;D$O+;r!k)~kKC$e-UN z?gw(!pDoLIdr9J`w8uHkdDSb;O33L{;?}2C_Iq2%18MTM@9vXX^P|BbjsE!SRCJq% zO+hvu4tG`ULT@(cw;eD|bm8ktdPvHpG`1itPk+{sx#>&?@uk2by9{hNeQ3w|%^3VB z{Ar58kIsTKMsO($4A27Oj(MfP9VxqoCjNR+aIqx^lT6*8r5o|>MZkV@N(eOxke-Bo zeJKpe2PAdJ28*HDla?N|nH?%6F6Ro4f8AWv>0^5*-L##v)8ymxrObt9Gc*%g5qN)A zmjx_b5B8V}ojfb3o@DZ)!S2;Av=>qGHe=-aQM(n;CxqJ@rPLKqqH|Nn;d>NZ&3QDK zJr!|K@l@ARy_CBg#&bb+9F`T=E`_A1{{U4ypYO31Y8^XFhn3TpKCIcS-ZBWKMn?_2 zb={T!0B4$d$1DBFBy;E&HRvlWDfca6PxuWy-a4-v6#ELv<5xsiusC@1jZROwV<6A2 z1z3;6I=l6@L>{d5*0t=c2;cIbN@1Epf7US`o2xgCmqb^vM?9Vo)Hn}u0(}l@Rq&c1 z{qCf^c0{dbaz`Z9XCO60##AX$iB)_#rLQvF%>MvRDZ@{p@Qb@5QKb8drrXa2` zE0*>;noXCYxI_1yi+w8WE?;tv11(`HxFg!NEhO6N#eQDqwv4Y68LKnL{9S5od{1&u z9%0?cte|qeb6YsQNkr=5PF~-r&Yw1?%w+SOI zcJ`@$zyQcn53OFZhhu||wS`*k$3m15(n+G*TswrN=&U^7zQpjWO55l#kwFz|~8P0zSkzpHqepR!s#Ntto&yFw+SW7Xt zIQsEdpokHHR#p&rtldT{8H;EKN_W`+?OJ|LDW(ygf}`32o^6!zj%kf(F~~KjBFg^& zT4P1u`cqW}V*>Kk3`dYYwdZ=$I!wq$2U2U*uHYs!w;zbFHSruiTj7RWw{NX|7D-a` zvpKOV-8t-a6sy7X#Ru=S zU^bjqc^GW)D%1=>;Ps_PMibP!{V|`;qL^hp>Oq3J<1{+vCg^=@da=I2Pd!PPROkhBe(~(E;#h08K9mj#5fQ0nsr5-8kZo9)3AicbImol zCx9v4y5Lh=r)r5Jky=56QPi@Gd(>U?Srk}@80V+8B#X7_VQr_M&Yf}rDn(NPVsqb` zv@*-msYY>DLvi=N3J{qw89;gFqv|?-wDQAer8B>!YLNg>JabBV9<X&nv!9XDzYD#Rgz05YT0Ut zAp`uHcplV%eQDx=90orccF;TZr9qsUckp(qu&yuxL0;6P^Th@IsIXjM2OVhng9aT% zF6_|Xcb?VHS~r6(8=jHj#}8t7Kb>euKX_{!!jkW_0CyP&*0!bl{?+-WE&@;cOJMD6W=+eorF@m(_p$xI({J6Id|ci)ycL2)b_(?ADwm>BaudV=Dj>NZHdFK zSj$76t`e19WQ?5`NP8Q7(txg4?tzRR`R28_>yBvtbYmUQ<6Kp0%B+y-S+2HS!%#9`xIT1T9XD^TP80)NPV zjXY@jiymwyz&Jb)@vlVaFbyC*K5F#8)_h0uqmTP8mvew!3sPV|(4-%V{{W3kABMFz z!Sd2S_qqPH-4Vx9CuS4l2VaED59o1KPQrI~((mG7R*gM?HY4h|fKJ>7yT7T!G9vc^EY+@sCPkjxuTM z!Q!=oB1G%YdU`Pp{uLN+N^q@=8DdeoK04#lsLL1w>sOm_P){{k`qGjd8A*`triH19 z$)pNT9A>d_Hs&E=NC&?)Gmd-H20L+6$~%gqij@aFF;Nd;Qm-9tw$j2f1M_W7E^T{O(rqVA6k*H38sB{^sJgT zxW*aHHAYWrmBSwRri0H=aZ_Q6ymiGqA5Qe#_NRe^pVp}o%LoQXKdnfZEPLXkP`i56 zirFA_6jWD>C1}p)!iW70Mt5z<$oiV-B~V!B*15k3HtTcHVaVYB0H0dwCIn|aM_T-k zH;u7!KA#QzG-tTxnm8V#9V$sd-NiE%=G^H#WLV7k!jp=SSWbE`=4+<%P(MW@PAm0ijc10VbD4`unU6erVW@pBWL{W(Yo_}&WA2<|nm)pW=bZkPKU|TbrE`{B z2WH0Xnzasy^B=xJ^aJ&-fY`>Io;%c*(EY06ZQ%ngS<4$UvW@~$_obpSt$aAr&asTX zdgNmQx|0ar zrb1cFmErTwEf?Cob_)d%M;kH?vmEsrE)kG$6o3WbvcoV$6;C5SN9jP?`aq(WF0>mh&ILN zAX2MSm?+TY)t8oBj#Vy!pJl8F$YnK;~uuAyONXHd1 zS3NvF2322?rLXI+buo$u0wv*>p1)e=Cz}uQu_X2OG|6PfK_Hs0TPHu3D^#p~CLa$P zQL-G;XWQ_k4n{NEnrLE1Is7TCaB9uVOEY5t;A5`AQl!kIt_4s=EA;wQn~C(Jn3G8^ znE?Y0pIVWjj_UzO&yH|7tj{n610S6NckTZG>Z(&YaTrQhGC{~Vt>w8}s9;0X zaaJRcyo|+g>OSwiQGMG9J*%eI?RH+P5CXX1g{(w`1(qTSAZMDHMA9szla!TMo(RQu z9vHladn=1+4qGQA_xe{L@G-Y%0DOnmlGf%+TZNJ=52>gv>U7$lhlAF}=`w)Lwl`1Pv6l}-l&lg-cgSC2Veov9W# z(ib6fP#4Fw22wgUY6=M?Af8XstC{9g!4!`9Y?@~A^u-~L7f#p=4t}((uP7uoKN_Vx z!4q~rDqB54CT)!PU^*H=GU6sAhGyJ5S1EaJvR`8#FgeY2dY_!Iv!E<~mC0DiCC09( z;BenJdT0&EY@~!Dl>mBG;sPexnnvly4l1;{BMK^nPo;p@gFQ3Wx^o~{#w(fAkcY|Z zn%UmLaB)Brv*iB(g*Z1AQ*rmHQHu^UNI=cG>S)s#Jt{sBXRp$nk{3AJKo&)^xXEBC zSycuBrA^fw-3c_nRbWLysa~a~n>393epB_PqhRzVu>5Iqv1m^iBY7PgxS$Um*DluQ zP?kWs-N+`enXpJbed|i>`KTLq4_x}zJgjq$rl{2#8ho3hAYgNjYi~wf`hqTUcViXH z*~{h4fNQq!g^$|rjPKDo0MHV4iQ3HNU|7N7Mg}V)>9VXyI)N%q;hb|+w3q(?iL#!f3}{0- z_~cFF(yWFZ4?)5As)|&o;kf3MJN6WSvAB+%D$S|f-D;ADJ$hA`q}hy628y;Sc*tNd4O2$l zgPaPr2?*Fd4FD@4^53Oo%buVRYjm#Qaa68i+Z#6A&;|s(c^Neb+>M^qqa-A$II5Dx z#zDgl^nhYLJh2}&Mu_Y4@8{6;sR_;q1Kdyp9%4t$$*S@`;nTG`WOCmj7y zlXp{97IX@j~>wV$Zm62JZ^<42@RpB;u)^OQhW5s*b%t>)+EF_Pa zNUs#MhD$#c$!`4?M#FmZT=>m!@;Ae~OzxmKnLTq`vK-)y9xI=Lu+rcrDVC1%<-Pm z*5yaeHGZyNr(9*PxC?dH0XgH<094rn5A$AsHQqO8Zzlo)L4y+IO2YXxP~8$s)Y~ z_-5WqfAnjYS#i*uit@cbQMs``Vxu%{cLV8KFXGGLDtR)P-_-XNdY5xwR)!rKL-xXq z2OEGDkTvZbup1Yj_iLK*E~R&SGWqic-PjJ*out~uJ7?pL&Dbh_q>{ADrt zQogIEsNpz0!tq#Fx(qhTvZ9VV)hSBJ7R6=B?Mr^7x{^lxn%$IPjA#Q7TnfR|wfV19 zAj%*;D=64ZK4BOK+N;VP8H0B8r(zvO&WlZUcnQyb^&P`8W(Jv~WZM&r_U5O!Pzffq zM43|e;-H20+{ga#t2Y=^RYP(+5Nc|CB}3vzrCFR=#(k+J49!q!l6jUf`l^b)i@C5d zUn5i9n?9Nv#T3>iCje90&PG#_$E|8ZZW=%P60gu?^WfSb~DMX9alRvN>&r>jpgS*twLkkIW=Kt;}k#4GI=!# zwYbXo#V=p~09`z-Ar)5wcsZIJe|%S`Ux0izs`<%GSD9IDH;^lI-U&6+c(cTETG>Se zFz=5aIa6M~Q%+KovF7FtSsqQ}D^nHTR2`i-u19HJ)!yoceO6e?DDsHp9&udur>C`{ z92QW#wlQAx;?vad`HYB;_QpBw&0SO|zjPmZjZAp=^{X(lODd*%upCw_3z|De4Z$}k zN-)MpYV=_ z=Hlyoh$DPqzMiy8V`v(F74W@;+G||8mT4DuazVv*x^=3E5mT5juuzx^{y}DHkAxEP+f03T(Dv9{z0zWK!W1R=IA~Y zw569FFL7te;Bp-F=DG zCBYQgD{`VpLvdE3JF$+Hm!5gWPZZ3*cA(I|F9Q``RYy&vXWE)(BxH(=&H$k?nU^qm zZO0?&RrWDG59M0!!M}$i+*DhAu~p1Xibf|}cOePlv!I#Z?=C$nfA0)-tgGlmB(eec zccS944n|LEhGrr@DmAzbjof=vr)Ki^V*;+?C>K3{T4{2Al!rObttVQ|vWFa=`KLyu zqi*#O8;(2Hg2b`foD6rM3LCbZ)TrgVR5|NYM7$G7XmRP(nvITW%+(P&rce_}oY9_o z(i55h4Fuwo9<+q>%@+Z4gPv(~?M&%FIG_i5(Vxbe58+Fnr2srNO9bz3`{HeJM|}PjPEWpS;pA004jUCUHYy}!;l*2w{G%XML)NUqMlo4HsccMnqt=rKmb5Yq zA8PD=A5XUGNV0e}#^b$o{sfpqt~wqAD6U*oZ%vxge)2nS5$KmXwYsISj6bVaC;tEn z<5gwe_fW5}Qft%-0Kl9YvbI3 zfV5b!#?ThW@i8K|HMEq$8!6gUo_gl5My~Op&lnXhwC%Y4oJ<4Y-6TZ8boeul4$)BP zdNrJWaxJ_;k-B3zuB1o7%O0JpA4-g+-P#k*c_+BdN3@gbK2(dTV+xEcXff?sdcCv} zO>ZCxoxpVOTj2*4m#*6ef+k%3?EX2W7TXzdA&FFA55Q8qQF$^AoDu2XrinboRtm%r zI#c|<5AOc}J}L%b=80h=i9c-XB_@Dt-O#r^salvSJsfl2z#hYhQ=}pAB9~0-LMd>k9N4)ItytWQU_vz0Zu zi7FMBrhm_^Ym0n+_eCD1g?K&AyQtktWs>E*!gIJWs2^0mbpfvCQA;u zw`%fOMP$YABKb~w=BwH3`V!k9d-dF-pk8am4c)|mhq;lDp=yM%CkLNg)vOxo#qIo$ za+AgW9)NCZz29CxopZBz?@G4S8hEYVMPb;A^5PJj1O)m4ntLP0Ky+l!KvxxU!ohCE z?WB5?pA@XsPnD+}`@Rw2|gfe(q(?qP#@w70sO0!?aAhs998=YeTnvx?rGg?x`o_^Np9q3&Oy#FY8TaS zpYL4A-&0hD1pM89I=)Eu7c(a}*Ck5*rc8S=sJHyZiOU}J!^rJG>+Md-2Qx0&w&T>` zcC9r*jOXyIiy}m))YiOM3DlbMF-p@q>ARt0{{UJKOd7SWjoNBS({4Gcc^m%##;z<;6Ai>8$T|9ml(PM19w^Du}RfW>DIK~#q z-`SkkPuAjP?3u?IKtFg2H|L-&k4|g2NOb7e5$Uk6yDn-}oug1Ah8V#9;!=3T9>ttI za9mHHCfa8suv)bqjjBj8EL?xQz*k^yu33NAV0s0nIg$SRxBc}{@t#Gh2R9#vbvX`P zLlXZ0wA|H{@SKhQw^M~b-CX|wTHHvLeKYM(3IOR@JZ!oYsG}J8V#X!RnuL$+sZu71 zqyj&8JD*+Et`Ky^D2!&I;_5!7dl-}xP155(Er~zxxiw}awv1*Q7}MQ_PGdfwjWj1U zo3A(2J(PP76G)_NL|>xPJ;ll7%lIuS=bn_O9Xk6|`$osgkq~EgJKdY=c%xtkAfL{q z$WhSLQb>xqE~DzyUg2Qr%?i7@2CL0`Z4!<55iWgS6;-wEJ|aV2AjfRe3mW(*t7exO ztO-0>rlBEj3lZq1qF)q2C?z72PH~WG9Fp9n8=WTAE0B5grWH^*BiF5S&#yZSBp`iS zqB_;nbX8IHtllChwMnz1EP&%6QU?0hF#3(`gXW!ZeG~&xwD&GPX{5*d#}%8!M6Y1Z zmPrr~zPbMZdZ3cx1zfa>KN{y)JfD4urujJNrlI1B_6ED^5H5aTY6jHMV;JYsv&=;D zdHgB9R&&Kq)>%r5E}c|ogeH|PrMNp$KRVA4uwVuSZfREFvgg0OWm6R>tCp#vq_*0M zlFJ?tcLK7_ORJdCsY5ZS^OQ93FF7VexLOcPrT>Z+J&qO*Qw= zm)*-_t$MD9;_EG37@&=n)3b{3yKTtZM@s8F6DUnuWDkRYde?ks%vZ2p&CK=#s3zCRe$Q0PVO}pWoT)4Kqr*kr5yHW(O6=T;H2LZYy(e(KLsb5|N*+R);>l z4_&#rSlPD89>9L~b6i)7yiI**$hNa=K-eWZVu#c8>DD=>xZXz~891yD6lyjsBDRKj z+CYBlb6M5WIvsd8bJVnvkEr?g()qJFk-F!pswTvN(z+XaaWpE&9VyLbGq~s4yoZRh zv9(AgCUYNU!TW}~Eev^AF&>#=QCwP;JpOe(pz_L**o;;+s&mAYj@IS{xYJx8;`J5f z^4UChQmM!x&tI*2m4u>8bq5EIYm?NhJiS6rpf?~BT)0}iiK47?>14!n$JVUHWVq!1 zRjD1Z$4vXxsI5RFJl4{##bZ4zK_egq6>2LCjEo;~T8VFl1g<{{ogv3g^^B{E#!Pk? z&&$WHPL?X^j4`ccgkqeLC~C>pkXXqUC7rwc>}rfXEh0qMms#qCn6u(6RXs0;T1 z_Z40^_L1JUC5tM0^He;n9`#)J8MUIzuw%ESL*i>ib`tI65KShTAc|_$)S(kvo;k;@ zW6jGep`3(P;kt^o916G?=z7(N_u^!2NZ zfP@?Y#co*5`>;K+Se*J*>p3=_PZdvLjnpB<&f$zyNf-mAU%XE_Lt{Pa1XGTcnve@` z7~DbU-lq}rX^=1PD#>4)oP7ljRuK?Gibh{Snx7f=q}#`T!l#^8D}*@4DH%Id>IQi@ zrm_+{esxMfXU`EJ;{))oJ@Hfr4tC=?9M`7GnN$8X!g#9NF*wM{&*%O{dwD%eRz@|| z;LkbgIQ?h`2ik$k`%+ikBgtgS-!By$pE1u$6dYrvE(u<0gfT~RQm#XBQ4S4ADxwUV zuca8pIaevtn~rN#NTaPN#%Vfr{U`>VggEriN?|?oQXZ6nNj~*00%a)|4N^pYTAq7+ zL%SKMAn)F>T1cY8$a|7%Qrp+R)~gS5Q$!iEstaeeb>8tHfw*ER2jNps3&7!B2;4F$ zn5>Y*6($BfO*0rY<*P)F1M;BsqdA}ou?dd-Dn_n4 zrY2iMnD9r( z%T;1-Dx4g5_NVdRG=L0xQ?bS~nxPC}F-f6|w= z9=^199MTvLD9(7z0Dd$cXaFM}X(*+}C;>a4T3m5SM;?>_zl9%#9XnEklhT0*dQte& zfk}+!fESF8w0|lPiSNtY{@+uFF8&&&wNHRu|; z`I<{(vXfqa7zKd_zf0ljm%~K)JkmCqZ1u)!HeNV9`&5ClxXvl8GvAu}MtI4UnQ%EZ zA5Of~?x1$4k6x9Gk+fMGU<}lKa0h<%GY&od>L4<4o@*&1WW^%`tqMkI53i*IuQ>c@ zh)A@&u5b-GI`zgqDY2ZbJ!`5bGbaP(7(Hq?1Dx|xrz!7EewgFmil&H9Qllu%G!ODB zSMQ388T71Vjgt|Vf^mvq81GUXZ2D{)y);mmfA#T91M#V47(Hqsk&rW9Db{ey2R|=L zmMdmqkSY(}?>rFRo$Asz*yG&flZ@j%YxH?L9)24R>ra&qHo_tM*2i)wl3d3c{EL!$ z8mTqQ&c%l1%|cj{oaV4~52wTB^y#H_sVtK;nadt~R`-Lg1L^3=R!Ek*K|Z!O*_-CKqP@G1bjbCF$L=7D)UvRpFif`G4j$C%TRGo8Ni z47O;XMjVc~?@-0#C)@t3@yAN&8$^O}kU_^`&ML${6t-Ylp(T1}ZYegIJd%#gowO@derx;}z&vx`*~oj8^A{W%&jx%5QZz=Um36S&z=H zITT8oiRfkSQy>{vrR4TYBuAgG_g_bNcy-%C7|aj#Bognx2;9goO)A% z>5>IALD)Itr6J(;6cf*_Ga3H?^-~ZMa(idBH_RaM&{CeFn8%uuMczkxdO0GY1bb7| z{M=D-7wz9`0^Ko>$BK_pwTOW2&N|a0eWRcvth)&2AR?uggnqk#iFS(Fni+A@$ zF4)xY1xGF2vbo57`z~s^)NS*D8y~H7CVV8|)3YvyKy$EDgo~a4tl_CZIwYID0@H@3 ztWWNlPI0#!)43Kjgs7{zsx{OQ$cTrW)@-_%Acaz_I}uP>2Ya+_t+%doz^kXMk|pSk zjY?Ky*X7T8#ke?jZb<5De)c@t0l~@dT;zu`I1Tw4_2iC7orZ#Oq2ruqgIm|k1)M&D zurwwMqOUpUBDXIv&_UnUw2#7!r@1Y>WVt!ORn11qMZ08mHEs;7GUF!;)Kps=>_`}3 zvFIt8vlj7x(qkCL271(%Q~5Uwmi{5qoqnKS?f&e2O;Anopf8N)nqYNW)v7hj53~~N zTz&Pig8ET{H+ollF-wg$(nTPED+5upEvX%VZ7cVWtpmM|ZDJ2=ENxkh1|koho|Un& zpq5yeu^^B^s7^R$P@iJm$A0wq5e=JqhjiYa&R>E4DZu zm4ua!r0!nu{lnW|th;$e4ZE)bzL3#18+}hkh@`nYbM>#7EUrzo=*ykC`GEAVOVD+B zEu&SARzP}JCLvxoHl}(7%${7#ySx5X0l3IK)-vh_X3H_$JD&9OcelCCdF<%1w6fy> z^V*pt*l$lt&w}+sVU(YG(H0Y2$Cy&2b{Y1Ju5-;)n&<#Sa68d0rR*+4!2EH?CaX_n zcPaw05J=A>IHUwK-YHg4+0PiRe&bM*+UcGbz|T|7Ya1(t7?B8S#MEpy?kKn;o_%N; zXHoHG&)A4iS$5$1)E*DIeM3-bn0Fi=)y~T+M20pBbJ$lw;CUm8?YB3}oR7wu5#CC< z?Zq+5qScF#n-rr4thrdpCf=f`My;XRp!cha?Cpb9Y@#AH9V+rFr%X@-)p_SNAdoL= zi+8;^b)*CGTed3HBWmWWq4~J00PYy3B2xSu8m%jwa%y5QIjCI~fuINzB;`osn)5Fl z>aTrvZ9>XCv)iGsM&4ta+PN)m$`9=aVS~S|Or^@MT{v?}$Cb(%8|GfUs)fvI$1B5E zq}*s0*AZZRr`oxVN5gj(s?W5`804H(D#@KPqS3|)3^V1rbj^ClgTlq7d8A`^e_Hcd zwBI&mOr4v)Y*(x4aIL111S_AqD^&D3D<>TpYDs=#eJdjT<+JP7v>XDh>sZ&0Rh!e+ zq`?$rIFO9wRQAUR!=+bZ4`WkX<$E4!lv`L5b;EO!iW=T)Z<;9>{{XyrH7&Wv9qPoH z8Rn3TE1So0`@w_WjUcOPs#iG(O&9Qt7UGk`*c!BioR2RU6am$5F~zx09dS+GdLK;E zCSCE)4;ZO7ZCsv5aYF$ah#4c0D;oAw=46k($*pNVxgOo?A5eTd58)jR09S@$Wb2P} zT}GQIAOq64 z1Bw{#P*<%vl;fHJsOZDys2xr>RjE+ta3>y>T5xb^0<$L=9cdO%&Y2_aUcCJ&sM%m~ z%^{Nc{Nt&oE2}U8sZ={@4_3#8UVE$ZX_O`TDAZRJ#(7RibW_n8?ntyvTt4+6v3KHAO|CwnLc83_*Ezl zKyJRdtBMN@iU|-7LmmxIqbr=|qAJWVNXYByeL9MP z3vT(l)|@J`*~*8UsoS5W0A}fD%a3S0R_r4r9OAi~Xk7{*_op7rNGCDPKz#c|H7fj2qrUXB-@I@dkpJ5BcXS0N5#ep}FV ztgEZjk}i|9(UB1<%aL6Ja~cvmRtlUj$>dh{b8eaIiv0H!tt04Zjq6E82a4r71GOKW z8Ka=>Kn;@yHsiHbsSE{!t!@euayh58bd9ryRabI)6QvU#GoP3WHI$ya= z$2?Y_hS4O~ViI702>{k%$Tc;U%URyVa)%7375YXlo1FX72~T{ zo?CMtBp>ju+PQxhN#qD-Jptrbep@SIB6H$@hR!nEOuL#Ue5!@&D>DA(YfE=ctU*6E zJ6BM;!lWA`TxYqeX8sr%jPM3S{?2ReDC&3*b00_5p%87j8C~3NIQ%N+yQo7op!+f^ zZBlRzbNYqFyq8XGQ)FkA1Nqe_o<>p&R@N2B9!F-&wn+7@Zw;$9sn;Jb_*O|g@+)t{ zu8XKf0RaC17dbTE!$)VSMy+bVf%kGN&Tb@RxNxL=yjQ1cDVsJt@xZS%zKPoMMT~MA zkZD9xBNtO`!9SHk%v(JV)`AFZHUShWZakWz4b2h1(a7t~T(}FrkIJ+3f08D^?^fn~ zob;i2K${lZ9l6H>x)=x!4?$dZ zlRuR(SIUFj^sc5Uh6x=j=Q9j5gt?bf-oe&VjhWHgz>HOwp{vulj^6{VW9hnrDhQvC zMm28cc4fwLwct(?=hW{rt{Ab;N~Ha2^rPh_sxp(DS5zK?WJ{20VA&NOF-g0xTDPer zjMx;ybI(d?Cp{^J{{RZ8#^P?pt0yaRkBoqMt&M$@=+3}oGSwY6$jSqT$n>lF&&#B` z@%L-%a>^dcD(8WYtL-JB%;^zE_MpBF>~%Dn?Tj*M%ufff6^{km!oflOJt?=kgt815 zJ4YB5+lf}2JoJuOAS^*A-yBzUplN!2{kjBI4x^u~apK+PmCBB%rEO@Y=FZ?WJU2tl zax#xq(DbnaZvX;2n!Tv#)|!}8aT2j!joz?yT}JX_g!`;Hu7)qP;1-ccJ+acM2-nlB zZQzYOxPp}x%6QH!ULnEfjQ(}mSw3MIu2aVV2aWp!`Q%cT#?UNy8co_rL+DBUE3mNn zq;(u-xUT|88pX#<1IOk60N1Y4#Ny$rBv}rPGrp&Ejr=+5UPwXiRGV-2sAF51 z{2qp$h)Lq6dq;*pF!DXB6_|SFvNR_#0=XumF(@SUr+MEfs9nC40IYC0?N#1=y>Uv< zfI;NdSvfsvp%G80#)SObjXLg{q;5uPfhhwpY<2BSLM(_$+%fo5XS>Sm z#Wn6!slp1VShG+T9?lr_6w-O^NtzEdfRX|PgFPziNUa+vIpY{hJRb8S7OSshc>9sDxLN1zdBKJ)-6RnJlR)4;&3jBYdzaa%qYQkv{IWz+bP>Gt}>Ge{!YwTDtoZlu=Ap^e0A-|ur#U1;!sXSqa7?aoJ9@f}L` z;@;uNdf!Y`#>cY&Li`1YZ&~Sm9OjWhHv{uO;3- zv=-@A^;i?_WO}UM6SVX{y0UEhwPHu{8Q{E@XzZgZ-Hvly5n^d~XPTvkriJY!dJMl5 zug(NEv7-8w>H5}Qq2v8mQC+*%EOa1OBwHh;AvqM)3TvRfq`RFk@z;nJFox-H1~LXe zr9nT7wVBV&eB&b+T;uuH2R~X}#;H<=VCI){+0-tCts>7NvF;f2QMKjE{rj0%d$m^1 zXa^r!t0Wg@rk!}HAx2Hdv!1o0(um~9MJLx4ho)?j_^Y-RS2b#T_@j}dA2!y;Q^Tn*nw!VTpO}u-XI#0rmMFw34l(mlgQ?3a z3bbyFjpsd2G@H*n(+gzLoL8-Lj>ETcNKFEhITXNlayaQrk}0InSPp0dqwwC7W2&(i zk-0g>Rk2=+XYi**)NRAt%`^@@^Ze`2JRfpmzEm9;=LWskLbyR~oZyZt%B@mrPR!mA zPjk-?f`8#3)fau*+;NS*SW{f@jgeAhP>X98z!GR6^TisKT3=mGtU%r4#UGz zmgA_X$i*Rb7##irmoQkhY=3?QZA7_FD+b&#m=#G5JMFFLK>&R@HRfXeE1fizkT4^Y zT0{wS*HAgyYKa`yt%M?bVvPH8I@dip^2+7OT^vDN9C}j;#(gWLe-B!j95wS3yY8ys z)X``fQjeKtlj>{H`rS3u=k`+Ua%8S~IHVFGI0TdE1$PkXT1+G4umpd!2jX&L5KGQkm%HPVe zmOHX7Vf@ZjJSnWO1)z>G-+PQzl<;NKW6iy{kJ(0RdEJf;!v=Vxn$>Szkpp3Qf zd?E`<{h^agx)XC|!( z^yq)pX|RL-?MJ(hdQ8@Cte;Z7oKazKT}~o~1pfelQ`=CwBOYJ_*i~RYxTl8z5ssbe zd7B-OG}jN$oWh}ZX8X=f4K^F5KD84%pW`1)(g4V$E~BkN*APa2X;6Q>YP`C(n;+l1 zk3P&OuowK!Dl**GOZbmWQU1K2V5X}-i!9eWBc1;M04dlGgCrknkaVt1yj(MsvpN3& zX{rbDb>RdgF{iy28QUlr<0R6t00Y{%HSrdyD+T*PqW=K0l$TnC`=`rwAoan;YwRTB z%r0ZS5~yBS4_um#OXwr}^F{~z!o0#undNM}^0(FMB1t^t{Y_=aQR$DbX|T2$@;*Cm z2CF}dbhJ4VvGx_`gC2wOr)~OC?84`9FO96g{oE3`s*-rzF*_|7dy`z2+)x&)*^1{w zCycMjK2jnNdaWmlHD^ET(S3r}K|_;_Qf)N(0_Ev7twut3UA7Nlz^bO|<;mYXr$6l) zk7rsj%~F7_U$s)}xSX8llbU7RSs;#0I?1pxR&En=WOlCiO*k3fQy{Jh=qpQ31kis*%^oUt7JX$`UTu5YY1Y07i|0NLyG{3+jI1GR4bo|vakTr7E+!5wU5| z4&K$uc&gL=H5>!S8LpZJ+lry$cucm4;DPf3YYa4;YS`24oSZNWd(?AFJ*=K>yoDrQ z;_=*isZ!&*tirv4+=Wl|pYL7u|1rY$>fm6_lB#Pd@au*7u~ zZ1%3Jm+Vp^-!pybWFUXFQro^C=3;&O(YKma`CJ}xQuQ^b9!GQ0bYLa1UNA*oczDfI z@T5<1WsI&cG0ktjpCIFUXX{=iOg&zAWO3D+=4J)tUm&WnuG7-DZmkB!4LnQ7cB%W-QY>IN$nQ$G+G+cfNci+aN_9IWP9eEt=oD4QFT_5Cy6{~~ zYaSOqwJ?jnYNWc%c*1G7PwqgaI>f~Mnp<)G=Ic-UD!V1(AYWADntG-i0<+GoepBSr zqK&`WIUl7T+8VZUu-Sv2K2!cRYbUDull7RIO&RV#N{N%yei*8MY}Q@uyyQfoeVNL&1+iDa0Yu(xuzY1c|ngt|{V>{n~dCB7kBZw2Y+m6zIpv)}4+iTnet7 zR(;yw=QXV06JbwC(qzek40j>{1sC~1ed^fZyaIsGUsOA%IyBgf2X!>_$4 z88q@ZszM|}e7@8PBCKAD%g-2NfO$I6Tlv#~Auh1;m*Q zO&jumhO^iNn1Rxtxcbyj_l034W-;S~Q`^bq%#EIhwLlNOJxB+Wk9=0qdI^{BRLCQ5 zz4+B{B<<<=R{h1Tta@LY8fEYf<5}B=JxwTTgl6sF@rp(3SLBUcW~rF=u@z`Td-eP% zJkp*GH#qv!5M!Eh@zR=2DmD*lU_DPFtwK4$Kb=(!b5g6ak;xv^z-`)3^SivqU(;iHI$K2A>8s$rFW>Mu5vgW98qhi!*~9zf$m3o>H4i+Pif1c zKGHYkxpS{-0l~?m9*6R!BX1SVSb%VZ3hJ((1DcI(M zIqQl6j3%3sIvSU1{uG5r)`Y~z+>QEcfsB-+BRvHk-l6Wo`RUm&rUt)jDWP`*S&p-^W8`!7#TGNJLas(_i$J7 zs>J$Maz>F5i~~^o+4T3T2at16FaZ13Gd75X@N-GrdQy@wDGoEnDp5?aA5JP!_i6~S zikJEK#dO5NMVQVslFgAYp^oCZonpNZo2P#%n1fR3RA^8NjJ~ zR7^2Y(P&I_*R42X)|rlop1xucJtx=4N5&ha@cj-=ug1F?+>yE;x zJhwGqjwnxa2URJ3go3h|nVj2e*S3Ss-zn=J^VCp79#ly{*4G85@f9Mn;qcc}*r zS|d3VMhWBj)0?F-Gsgy=!;BiEG6ozGP?67CnohlH9yfnF&PLG?uN>55cBzlOL`e0? zs5Ah3Q-w4hdV@+hpb4Yx)}|ciy+EF$ik*2p8gF7cohO9cuA<4;AangIzi*l~_1pbx z&U`g4-9#b&CCSg$y%=Z7PhGY7e-cL6qv)^>^pQ?c$>e=15!S3sJMryRfgF>H`P01S zR_ew=OeAG_1Q2T)dBmq6=N-*Tbeml{3q*F7>Ivehwi_H*=o6LCLo1+^d4$aw`AHO| zK zr+=wfsktK?M#4uuIn8e!0y*_lb#U2@mm3F9twX0mx+adO=Oiy&cB>j5rzWB$EEp(1 zAtQn-qjjnARiwS6aoBC=hhdeJ+x&z0fvcAO9I%Qp=0qL4mNg00W=&jM3uZAN$)K>Z3`B6oG3!<)vbUBUj*E{`#dF>tX{44*nO(?k2H}d; z)otgzvoYJsV{G*taZi;8Gkr^Tc92>}wj@xezj`jO?XA~q5uW3{L1-j~(m3RD>;?%n zi>m3DcUQ_&9$SAFe(eG}YkA|I6_OSO7-u4xaXq>+`LZIOpqhrp53}1Wf87|YpAzYo z(psCT8*Gt-wC0m`E}VI!qHH$3#EU&ffn zbQGONJ5uyLDTL<~2uA6Oix~jttv$E^ij2}FfEeJ@gAC(1rhX!n9-Th4fS4V_4b#%C z+Q^K^jJc{Y+M{rO}%)*t<$;j8HOL(RcPv?@g}Fl> zZb8NeAR4u?l>Q>X`7NA*obgSPPxVWT3}Y2)*2nE}>~|5X9`z=#VwRV1B4n=KwLHr9 zBF}T3kZ-@ZVgXeZLh3v~di>lP(IgbOesPiwQ@+oY7CZV?fvu%oqiOI!&9$RA0M@Rh zZT^vN;dfh$H&m7_UvBoN! zMn1zJQH*q{v8rTRPNw!3OUd%tPDf!~3^JwMW<~0~E0C2j4p;lau4x*BT3+Du6OWi0 zr0gjxmgI?r&Bk~q(y*E$ZJd=Wj@8o^7gEb20fWfTTEUfglw%}y9`sH(6eVL3&ehL6 zS4rWUr;&sOi(qaU* zHI*&jnA~vHS?6V791)(G?_OP6P7Lj*H6(7uti8OM!mt&$W$_^_(Gl&5Q<0AU09y0u zE*Xzr1uzZWPJXq{%@0-|6tvkt)zwumGJG_)-z~>{aU`rS$p!!vLW1s}R)R~EIKu!SWx^Ducmj`o> zS+kC~7_Kg0N|EY1*J0pmpD92DlD)H3gnA^h7@`BAsBKS~ILAtYdAE%5Ry54{neCdP z9UKZ(2VqYqnuQp#7|uFXg&YrB07YEXs<;@Yf%w#bQUUANj%vy-(UVZbr#z3&rD90p zn1p#bJk@t*Cypt`HzznEqLqwifPS=qjzSR$VV*0F)Mqbv+;Lr0u6DNL+PIs?-*n{q z`qovpI&j|+GB--JgLfFn^fjLo9s%iE5HQbd4_f3sA{&nm*xk68qKOxiO_$|gm$z!x z$Pk}Qb*x#Kf^sXam%@2i&xnbe3Ul7E?>KIpR-~*eF7cF{;3a4L2q$t3fWS<%U~fP3~8E67+J905QX_v8d`T3-zO_qPs7;BC)p ziuCcz-vxs5sN+PP^7RygtzD8Z$0LJK6)ZjJ0bRnLeJUbG z?9}gtI4AR}uG?GGP%_*-GoC8qoUav@v$oK+Y8THUfHfgyCkKyu)Q1e4LCs;t#ens# zSV2#pBNPE?kTB-6ZV+xO&1sC4%~qP-2;GmyfH9tk=)j7uonGnWQ zaz4E(#ACB&fFNaclOL^US~D|YKp^qWR+W8u_ou+&Wyd`;NM$+VcyE|V_etOm)vIl{ zpy}SByo5@@$m1TBHL~yqdQb+e3<8XF^{HQI?NCL+fDS6b!Qj&w05~+;m_^mA!pErN zJo8e?7~91{7?0&i>V&jsB|W=9O129Q^{W{_V~q6Tpw;8@r($wRIjLbev`ludh0Uod zb!?A&3qELuXwNhO??-C#PT)N#>p`QX046dk&HPfEHHOI;Ve;3cV~XJXXBOM2+dcY$ zUt7WzIWgS5(dFjQ=Ad)-I&Aunm>?r`eR!&JMDa>vejRvW>0K9t?4YHcl#0bqIX{?;3zo(t8PW|GEdP){mJ?Oo=5YsTQ8?3Yp8 zEs?{#T-S{hoh?~LcCaV&uG|B)c$nfphR-^e&WVQbSK5|f z?`lbWw`>}Isd6SLN7FSDf5*8v$sMci=+CNzle#%#_r&3WbQD;}dM3=V73ZzKNzL%|~>gI;;5>DQ56Ji7}<-3~fY0Z7c6 z5x;oArmSBnH8{7PR@#W{-9GLq%^TZpNdd_99V*ByX(hjUIT)*KnE(+%?!F}Es%dTv zl7pY6USW)!P=%n(kLlh#^@} zu_LbIT-K|jtWV~`Fg-ffxOqmSu{W`vw_-uGb*m6Sq!*I_d(-rLRr3o;jQV!PY0qO5 zx$FfiU(AK2&z z61e&r^r_X9HazLWn8p79gi~289W6_P&kicQ{u$OprN6V?f$g{o?X72)-FBHW2S9sP zjCYSY>NkCBe{0Y289H`6!E`NNIWRP-fc2~PdKRnZ1#3A~N$ZZ4=;nE%8;XKE{M4fU zU^gQQZp3n#`ZbN+tY$ZWlhZ$iZbY{Sk06i6p-o=pK;(W^BJ1}-he7`U0jUmCYRnXj zZWtq|u4~5Yn4%!@#b_^xCOu>Pa4QeR8mHS~SiHPvztW~#6o`BmsKIY@EHf}s^Ks{@o-K$N$JB5)*&lSRaKAIoxDWQ`LS&syC$N3fLvfEpsE>ovGR!E|yE@;M{FY*(~=KmP!b3ZG$HMpq`KDO23* zr)*lxIUuiU@+r{&0Bp<;3Rv@AwKIRC$zP4Oi;B&ZhTsEe@UZEnK20Y@kv3DU85!li^#I7+>9%+Z3lV;fEOaIS)NGG6;Cy4(YBVL2Qk{`xv0rz>)xK-a%wg|T4fEzG}DQu zW{?PI^`j<`oSFbLnlr^GQAkcG0mS-J9=y{tPXp3`04aL^0QIQ-C>R2O91h=`)1E7< z(}-&{!2N5J=qsqvTXmZA)`2rlBa9qY=A7Jo-K!NVUruhls*#&HZFY2m^zZ&Iaaj^x z#={DqoojfmAN0h2F_YS`gnU<}PNhc_k&}#fEDIj}e+kb$ z!!-=xRQ>wY6ZWEe3M2$on`zoLBiGui9-V4PYX!Nawk|ZT!x`pYG7Bsl~J9M(*)C{h97ipHF+ zBBZn;^Vi!HeWsu``($Mt^VC$U0}-93y*SEj=4vDS{L*>E)5WtK61bN zA@f-K&>gYTtcw>Pz(q*5Qg&LdNfXZ!T@vA-)RInvxvy`~wMbsee((q!?ynQJvXVKM zBOUWyBv%th9wT-D^#J0$>|9(WsnJQPYL)GK}t%QR= z-e4=W`%LU`Wd8uZc%^1?GFiVm>v+z{$Jm^Lcwbd>mq=nC?LKP4cv5U;OXySRnf|rX z6$EllJl0&!E*5bLruGWh2bLk;kH@Dpm0InHc+%$^P?J$z7(HaC=sNS*ZG# z?4o9_m#0Q@ESDqu%uPIOg@1PpY4lpM+*Mgu9Oj|bo9aJj70`xjsR72}k6}^8mOO(^ zmLN_^$JVB{Kt~^yP3{BT0**RW-7&GfaDA!Qb(;+ztwCk zt{Eq|RBpR#HT+klu5lwb&{8cMxy3Y+53O@A<12h+Ev0X-{{XJ5KaA!->g{pr8K|)C zb>NXe>s%}NyHa9y`AeTcRiDIKq=)`K6o0z3a)Ib<06%zCZ!AfY&ZFOTd91pP^rI48 z$U*cts2H)%UC;aqj!?PjGHP}(g3?@|{A#S8BhupQa0&LWJuAm1fydIHC>^|>F0c)? zQb+d-O`FA`6f}0M%j#OV#Lh))MixkLM@s3Xhm7NL9IRcJ##bZ}6})Ic?rMylDb*jO zh`IC?mpW~bfl&dP!NSEC<<|8nzWvi+{{VLat2Ncj^|+Y*T-12ytvn|^X{ZY033mI= z=jzl19+fbU9`xXxbTy)+7b}Fp;+=!mrw9S`r7FG1`c?ZOT&fh(?KL?I>qtU@$;Cfp z7aI`T)uD~hpXpQ)*LNJ_&{l*#V;}-4Fh^uH*+$&1EY4TCl_KIpO$*Imp3dc@`E4gB z{<)f1w4FvkHdxGltBT>|)Y9b;ze<%-w3Ea7yAh2&$JK>eUkqymb8LzAkX5L~17T@cd1vxcbVqq-F>>^tK9A@vz+qjJi6*v!Ys#|%xC+tnxFm+3G zFVsg%njON@eGWLFG{TrYE4W_SUrrJJmJEIAh5u# zZw_s1rr2}Zy91|bK;Xk^pF_#5D_ajOSM1^l*RTb#hxSy?Q^%`A?_VP2ow052?q&WWoXjFGP zl-Ch?e`NrFwArmDv4ww!81$w|1WKI%G~Eba2PJ(i?0mFPLGO(sbmu{o)2P>9D)D*AEhTJj^3Rb00zE{Sgt^&aPndg-t)Awc@o@H53bW(cRs zjNF+?EMN!j55lZ1q+oE1QmTr708_B8LLiKP59vxHj1hzs@_JA?Jt>k*tA+mn3Tv+8 z^K(ud4o+zsp7^E%HUq{e1E1+n+y2!i4rma75$jJKX{6FI_n>G=q+Eb9Pp)e|_BJ^q z>sRDLN}N+>P0P=qua?bpt8>xAzjVU~2ftda6M{kb}QeC^DcB35bi#> zt4f1yL2jj&bz4>Ap{_~kCQ#THY|YI~!F_LrB5Rws3_V&#cD{Qvw_pSP;rLEZ%$pr zS+|#LsKj-xi4aK`ZVh7~$^r#xS=_rtw4)4hob{zvI`aj=;UHvmsnCAxP;kpa9HFcR zAso^XnhEFn(r)L{fe1!|$<>DHqRGfEFM?kf(#Jt#TB%^BmZ2CCo# znleXDw3(zQ+NeNkC+kln`t|KmzD-2NhxVlhu1z(1Q@J9gFgGF9W0JvPl)D|c`B#dl z9Xl~UT7HoOJWY%qbBd!NWST`inBx@by;>!r+e!lGBB~e3B-04>%^mYv+*TaMke+|W zlpZOEtrs1I&(fT{nqc724rzsljNnmx&SPvc&2`xoiyQo+#)!HAnkrOkRH720z~w8*6%4{{WZRe+CAv zV6hKqKe%4nn)^nTBXW4_SzqvxX(J%s#!t00_>V~+^7fUg%W-f1UB9@GtWsZS*FRsv zfOzXz&ElOTf6ID}yjiAag2(7ZQp&N9{#~&=RTcJ!>*yNLI0iEtQ$ZKic5d z?x*5QTck0=6o)((z`zyGZuGCZ$}n@Mg;eWA@UfNDs&he`_8upi0Fhi|u5ejJbk>@+ zt>D5<89ngT=Un5~pB%3d`5cAr0j_L!4^XY|QukSSe9CardY+&$jOVQ{Q=HckW8!J8 z*sROBF@?wf0Is@gEn3p=?n*a$X1+%ml;UvT6m&hBIJ$LqW{@0uQh+hdBCuu3ur%(U z<6cY9>I`CnG17uPDSC5A2At9`1oKYC1XDoCV_d?+BN*>qeW|G$t-v61+0A+!94&B~ z=-aD5^Y7Na--T*>vWfHAyhv^NK~G`dwK4!U0h5tZ5t3`}*2l~}$XH^aBc9b^@BqoG z%uecw7Z4*IY6r+Brp`q|{e3f7$l4=%=aWg(6utTDNuJ{s2^LKe7~`c(f6gihk3OQN z&MSBr$et70p2MH;rb2xHsfheDTcZcLU5BZtNvjSrJ!-i*HJpuN0OveZZPys)pN#!Q zF|ayjvn*~uN>FH|=eB7Kl{u+u6>d8Il_=y@q9jWhAk)dg_og8v`_!&7D?=7Q!z6-g z6UXCIIK@KMGBt?P$o(mXpPzb-xFr!T+T-3mPwP?;n(F}@{ z2iKa0GlNqQ-&(UaS8zIW_|z@erB5eXfbdVHM2%u0&mx%I)Q6glx#`lgW~fXId(w_6 zqMQu^B~oxIWhS6OQ=sOVEY#4Y5$chb<8qOT^%P5E;ma6s-VJP>Q|E`1gr3K6mqh6nSf1q5-$HL7(VFTEqSC~B`2-h4mO zzSXIjnBil?01kQPxJ5f#xi#tE4CHJ+M;lHE6;Rcjd5oMWO2?sI*rnaSlv$S@4L;J= zD@YbJP@#P*KT^2V7Ul@7*W_dKxf#ICUb`}jCn^504A(*NOl)_Sv)vd`!Iei$RPs7U z6EuVb@0#YcdkLh}KGgfvE^)iPZt50eP_t`xa;o3m??8zlF-W`NU{~6+^<87^1yL6* z=xWxPV47{9fg2!mlT`Ix5AD}WH_fo{z#eD=M^C#;>m-~FtbXvS_j=Sem(kiZax=Nc zLe;BFXzcCQD8|)M(vgzU?to=RnR(}^pbJdfP?6UeuQc(NzcH7|$=T0J^oeFzVv<)p zD9w0}iSH8cRglI`6z6HIsx#Kgu>R7oGuappz_;G(P{`X?AEhjhfO}LKEZyq^?O?2j z#sR56l_HJ2QsRR^9@PALbDC#E+MLbafCgjvcBsi9^q|vE)M9`UpCXuBJYtlCnoQ!A z$pC3GG7TN+3HiS50wq&{)9|U$#_oI7Vb}7hROHh`E_o?=6T=TSer_vG)V` zQ|9w-FH1<-*u3QQt8Nre3U0>L$*4&K&tO5~mAaF5bIpNoE<3rZmxy*i2Xl;7=Z%G< zvwHTZE_pBjFe-*-T_G*A(z=}r`+kk&zBeX5Q(XPx;$oyQBi54Ic7dB|>N-+o9)ltC zE$!|Vat0Tg&$!crYI)i*AkP%-KHywvB{veta!zYPSp!+y-6jEC3Z02(5;WXi+(ZZ6 z&JV3+M`~SVQ~-4ZSD?>ir&1GeJk`J$tYy>o&2bn)2+t;{YDW&%o2(=Qjih~RGFbe$ z_h9^|71u43q!&DHLoFVXFWERpL26txuXjNC@fPq>rv@CF33H zRUWhmvJOT7sZ~O$EY)3GYVk<_05Cr`C;=L5xdM}PPs7m|8^+_GtxqkQN}n$VfGAx; zpJ#Hd&{v#XoZUJ1?Ou~TzRPKOCjz|A;db0h+vh!ND%%}cUx<+$U<}rb4acr4G7-(P{`G9<rueV`X{@;HGxBxW^QLvnsH++CVt&E1JJS<`*1x z=e=|@+@z%JIL%>Sa;!V`rUn$p0Q%;w=(B~q+FJvyK{{us!KzWr(A=Z1P5nUX7IyHz~rC%EleR~)eeilES))B#dZax>DICnyFwRk;R6 z397|-!Q@f`AV6xF8)+S>g#qnHu?B&fk-jlkqMLF7xM0>aG7vp6SK@4e>p&Y2$aa8v z6=8z1V--dTeqoOFbqVj%fHS7I!xN4woU!F`j=B=;Gpq+e=4PNy*pbB-y|fF$&)=_U!_W}l4qPyGWXIj%Ft z;1d&L__9rQW0PDzjbuCGT;K!EeIECQW&mnn}m2Xo19ts2tp;cOgsuBX7)#KkR} zWQhLn(yI8z%twBcC>;8FRc{BoCa}x=EIn)JaWal!lexaf1sJ?OHUT59yC zXWG9bk@X=(6cf!z3(!^{iqn3M#PkNX{c9J+MZd7*AQDGv>B9d28a}2~wSzpuO|z>e zHsJiVOM5D^7a)!g6?tQldC_6PW;ESW)^(60rX<_J9qaDsK8Mb+H2nw7ohF!uLVob= zTV5;CEbR1SG9Xio<#^3u>9Fd^QZxjv;7(6YYe&X9l;=){)&Bt2J1G3Rn(FEY83`gl z>M(Pf?YuvJ^G2v#fTV$%@+Z?~CA@_r&UfcE=nCx>q<&!9cJqT+ z7P?DYI?i}u+O=MGG3`AuQz;gZ^|}4;C*}00ZuYd99Mu+|%5Hj7mgCH91JAW6?lx-a zM69D7Gt#@a(RB-}1qh4NBPWXB^uzv{2pQ#uYtn|HHM}v##A6-mYfq7CX-1zr(BrOr zGvY}8REivTWqMnG4)}$i4|5zN+nVnn)ON>$yR+|ET8#LRyexM8YsjsJr$2hftxlxd zS;LrKw=1 zLHXCDqMy2X&ArZHmKPb0L~hvzp(&50ai48`kC~94PSv?#E!?)nmSD;|Q1IdHY-zE_ zK}-^mc;d5vwWNq*c!oM0broSXD>q-hRG!A6(vmGyOuTO9*|nc4dsM5b+grnlwV|45KYLZ0x`czHgZ8USetA+mngl|=u$Jni& zhy;r~l9S?)YY<+6*@7^}d;<+Nuwr}+k{{Xsc%dRBbsLs9j z^{-Hr<{5w8HRTtKf43%#V+7{9nc^KLp3GuZ#%q@G8U?;2kEL|lIotsBtS=g`ku*}1 zfu4BlP&1q)8g6iE1-MuHtU0MSWqm1>QoWWxEtQT9WHXMvt4{tP;5S3l>sc(E1W-B7DLM@Isb`bSZ16sn z2|UsPMoAT7+y%*Mg#l*3sroGg7DG^zO3j*KpkPffoSF&sr0YNdG?~vzQZqro6aa+c zo1B^rB>*@Knt1l6k6Lj3XaM6hcA|_>0`wmB(dZBUjkk}MxxD>rcf-%S%u+ZM37ryF zww6Xpw>j=>DmB5)X;@^;7IOv<{!yMK$@UVogi=AfGgf?yuRs89{V`6&& zPTKhEMjO_;c~Oru7;Oh~DL%@hxTliD@tQJmM=B0xH|(RXX!{`SMK}^O%{&@85c!!G z*>mYYvtMIYRN&LqfLsbWA{@-8_An^>AGKT#qJt{qwI>*dG>U&?C$PmMT6R}rDxjs<7B?BJZAYE9iM+Jja&B(*ifkgs*8eWDx_ zky!ibH-2@mG9#4O`&2`{C)*<(xvY)n9cV01b4NJ25v(u3=M}9RZ;T&NT&FqbkzFl= z7q(XGUUoZMGpi1*aCIVa=~}Rmsn)Wt7H0XP#~o`vO-k+n!zBpmfnI!I-p5JQM#RaU z)hw={bbhO3eD`sV zIs;x#&$#8JC+gXz7GLjD8R+u(r$|wea8IWOs88b?AU|}HInO{bTs~K@&*4%mGB+X_ zPJI%cfazuNkzho2hyDa=q`oM-l>D*AgY&GEv$}A0+RQ-z0A$xmq4*C`)?xFW;yYwN z!v6qzpC}m8Yj^SzT24I_S5x8VlIqoDcFO=N%ls@crexL7A5E31rTBPg@d!=Sav(o@ zr5YkwuNTS`Qb8Uj$2?Y?k-#JQri?e%pjNj=3}wmBWvK&&@w^^g@-W(Z@m!`*bT#g> z4-Q_&rs~7Yd~$rIs#9rx7j@YVleN1O5ul`a((=4y(0Lg(=%>LtYs}B(+af4nnKo(Q#0 zZ)AC2MZj{?@=ES+bPQ0NPe{8j!@XY?Ap@%Cp&ZDJyqq(#}Hpu zdTMwxQzs84x_j=;bWP%P3-Va0`n5)UQ$O(AM8Az^EL?AMRh8FfN_ZyZ^}dVnTCko9 zOaS_W6YUwRE#h0wcBCu#R4uOG9AZGfN{_DCwUkzSlP`lUJKf4p`zuq$;SD?wovtMO zaaql+Y7PGYFAP3_Qx2ti#~*2v^P}ssEBhLKS++bWrDy&pFZrE_3d&@mziv&~ZQuo^et2iJcM4 zDK4j2{vojb{GWoq(j{zJbs;h^*xWuRkbTQY$JEmgiLXC~7+2|7v~=c|JfBl#gTtg{-EOA;0KTdWH8?5t zrmo4U3Q*`g&v480O(7obQJEMoF4*|xhuT72x3b_Cb3iHbiap%<*F#^R18N%0nZFT0tHvwI=-QaxwJvCbFur@Co zQj_xV0j7eaeb6YzSB|x32@^hhepJy;an_MXY?@#w&MA*3)6+jnSsP+iZN!|=1Dbaq z^2pN!(h`4kN4cp3A4*fwfCOUQMlnrt0r#PqvGV4tP3E^jKnWw@;Nq)HL0r-_Qx@r( z8s1{05sE`8w1GJ9Q9R?OY44}XPY!+ZGfg^tndV}D3PUN}uHlucrVY`Nj!%46r`Sm9 z?0vCL`xXe~oK#q(&S2PFiAEJqx%94|O0a0rS=4X#s}WiSVaMWYLKMYP6J+qN#j8p8 zd8lJfc&i{2R3XX8r~4i$n+Z9k*~eO99#iGcaZTs(r7e}mYEHBY<0fsOY+U_mU}xKx zIRJmgWHMrau$w?HXbH%HAfPE$2H4bb}6%x6l{Ozy*MW!*q=yV9#$u@YnX)}_eZ z6DjXmfpIQHc<|KgH7tNESM;lcaK9$)a2v}8UjJql=JCPhWb+O^`r%P z7Y;xMv+h&(hZUi5G9NTNflWRK*xHLCjIBNan33-aTz-?%^*GLAMaCh{{ZW(+8FZL9@OM) zk6MrV(3uW-qQV||Ju0>0X5Fwmb*m&`(_C@WJXW-wqz8+5x-TzROk@V#{W1Cq=h)=e zYvX%QF6keq&B;H@^R6k7_OH|Ma^|5Hc@>qW#%=)9_x!)skV5R-4z)T!$AiUmnGj@^ z_oWAle35M&FsMg*1V6PMJJUeTDdX{~5b)g6^!KQNH1KFZE`6vXkTz-AtrHN;cBCNt z(}|{@l$aqDaZbS^gy+3H3RVMKLJrL;sA6-*1y$5yFy6Rtyn2eipk0`5yolpJFv((S z4R|;9j^q4F4QCA|(2U>5G=$K26ol5p9nY?54FK?cXeWwd5`oKcNKGi~){B7V;0k7G z&T=u*qcv9oMPr&*U}_+7N=YJ{oDMmv0Z%mAQNE4=KBQ+a0ILXatA&x7GP;t_eJC`}8=Lf9_WT2l~ zGtDBYW7tr~9C!7qxU4(yrtbHo1mc>(jJp zJk2^Y$UAGwqHV4T=sB-U@Z75|pTXpc`936%xfvdoUhN|DaM+|BXK6u2_Grlpg2IKjTrnvmEAWdH(=x(;1Y19w`ebAAEjw_tB?GbVts)&$y(yZN^DH zyN?uyap%pD=hck`hp7DNyVv{Gf4f4w#lS7N^NyUFUWXu@{b@I-95?ApkC@~f{V8+O zLigAX_&=2)>(EoSu^c00bu{q=tiuq=`BL`umsCDUzJy?4amS?%$mEi0(6hN5h#dVX z!%n|)HrdKYt}1@FL4Bk@V^Q=eW|t!sbZGjC0~T_94h21QEl~6JHva&=g-6%0%k824 zUa#_*_~MVln!ef=sG~1v!F_iR@v1DP9g)ymr@E5OXNoIM2M zz3Cp769ZChOJr5h(^Y&t#g;z7xzFoe7|uC4G=V_vflHqC@ED5T+M}JUeHA!zM#6)N z2PTZs-nokueQ4t}qnvTllLIsemL37FGsN(O)fKQ$%h$Dbkp1ir(z#C-04`!9xUa3@ zYL=-eo;GU>z{j>cnwY5~t6H9LYT)tCWnW8|l#h@50`Rb&`qJJrYMnyDzm(ITQV z7#aRm1f6k{Qxj0ic?Pj&$ZmP0KgyJKr0>?CqDX%ASjWnGRdgRWUMj%(m(w+@HZz{& z(2=_pGYo(#v}X<0tz&5wx-gdHE)N2$w_a+@pU$ekTA3FS2PT-q2ac5RFe$Cpvu1;P z`_YOqOY}827^rbmgY~EvIH{D1sF5OA@w?WhZ@cuUQ2g1ck18uQP9#EA`F~Vz|HOI!WJ{`uZV$4$nam{&A$OWh))p}2%g3kF8+D=S*nUe6K654i%iZ0usQfI|xHMXL8&G&ffZ zEAj_b^`JvEtBEeGQRa_p_xGqL)t)U?EY{jbR>oWo1#6^93}65iRCcK2mKmigjHTD8 z??4ToazN~zK;pSOWWBuAyv@V}Z0}x`+P2hOwgC628LjQ@-en*v^O{A&S7Vy-UZo;g zn@Dlyu=$AXUP-Ay_VXVx)Vp)Lxvjqt_?GSUsUA0tqx+>jKN{ulF5coz%t5YcyR+*u z%r#0@(?YbZxwej!s--|Qs+eumQ?e+oiDq$l2xhjySIdQ&%ZO0D@(a3vjmsmgic zqYaGH)bUJZkjH4+aqcU*@T9_cOl-lM9DWtRspr2H()d>E$XFPB za*XHJw}J4oRtW4bl}6Ff*0d2wa?imWAFW9R?o@4Iij*(Dt2{{RJBvDRcUAhBsbfh&NO_kMo+bA zvU$3W;mWATJt>U9xP(2^j^KV3ks=jUah_|gSP+Yuwu6oZXI*Kl_Be-f^upocxv_6_ zj85Ql&2HLUq?$vaIoRA*1(YVn@>u@>yqyhP({CdX+(dK6agk8UHusq29 z3wW*o*&@{qHsH;qO&MSc9%|}I_Kh+rMgytG9+ZhPKE<-`>Lwjjk($9az*B8@^-~H6G+JAOSDoc85OaoEY}0~c=>rFHD312Nox~~1`WxnbpHT0&5K2h zH(bEJm!(TR%-23(RQ@GCwWVey7B>Xo;j%H0?g}o55a-$3b3FlIF4K&Yvnapi=W~J$>t= zw;N&r^{gue-7af>5K4k-%uA4r^{H5M=}|^;#Y#CefRZuIPPGymloBz`F$#WKjo;nF-QebmK@dOW3XV>Kbk{~3|5pf29B5sIVK0=BL_9+7hwIWPX7QguS&dj zOKBK&0=(j41;n20de${gtS;jr>&z*yIyc-MQ;sM~e3uGms5sT)Q#PPpxT8PTc;Ln>ifktpY_R`_(i|M;)rG zwq)(~spD~q0GXQywG70L4k|7A&T1BzsTnxU04q*bTBj}PSxzuVxu#u8QNv_l)fRxjO#(Vi0_6RX4_00cby3^~ zM1F+VpXe71vP~OwCxcy{p3caFu5u^?qlmPej@3L_2W~2rqm%$=2CqjpIPX9f6)<`0 zK^t>}`O=5T$m>o~xb>iAX$ln}7?PzG$ONy(^NrCXow z`c-BFX~rl5EasCO(=qd$98`b?7#KApCWN5sYSc~xjPaV!3dtZns@!22IWz&U8QN;} zGUa|{{HrP^Ayg06uR>Y9sez(Y6v*#Yrd`Q`Gwo7AC-9R`kpW&gGy#nyOb!65%@IAZ zj@7Qwl6@*ER1t~*z_?uexa-AaUB>IqG6!5&O*|^CpI=(exVQNmjwu1lT#OuJ6;P`w z&TCffHxfNMR$=)L59dG=ME?Lb52am#O`{p+vqJ#GH9T_Qa55>9Zo@XBz0jW%TXBT zr6J~y=99gA8T1GbT3pf8QVu8>IRIpyE6n^)bM~D`W1{eDz16OM&1CQTSC?GOZY~}| z-D~f-F9&(c5d9AiI;&_X8{P`G-+eUr<#;B&0c()(InA5lfo;biS711=D~l?*ntVbbd#wFC#SIeQAh(P%%%h%jzphpG+@m0mTB0RzN3FS$-m2`W)c@0Cd)=sv68j zeIj_rIa9@SVcn|7)QX=AJhIkN6lhfZ!#yiz4KiIwpF4DHys14+T=0&L_crb3LmTWp zN#?dLt?_WktF@D`HTMwS=g&=QU_omoq|YAgfO^**;+w{})KyqyBVc=1RVBoN_0`D2 z=O^B{eOb3^lOL^iz=8U6ganWX?oD)hUA&7n{fo7a<}04FT(21GT`rk)cdR%W1Fckw zM^30so9CRZakti?@0rL49Adjjj%Ikkfa{<^#D{2viw>w8Qmk~!BPB|5?cER8~jdJZdie?$W&&oY2QA4k7+BVNs_NtcP zi-XwXzol)%c@4yS9ED~5Y6+46cd6#CJBgPp8*R*A?+Ww?74-$$7ym9BMQ<9pcYbj>?tF0(ND3Q4RZk@n+(=~T4+Nu%az8U5;MuAOA_ zKz+X4=As_W$3o`nDH2;)LuE4gIRUsT4;9hJ_f%IKcXcC5vRk_;1RNhq>mZ$DvstEa z09=z-2}L_2DzTHZWS6&*X|_*sFBlmW;+`t;18Va~?ej((0A{v)W8$aO?i$+GO|Y*F zf2DEWK$&&{fKN)AmAN%XeH;a-xyy4kLr%m-g^yeTnx5BFlGAi)BC7+86J4)|bSUA8 z%Pv`$xUVenrKj0^MKcA!CxcjEvtMsj(mcx8bro}Rd+8_Y!|Ey(cVAlMEw1j+kR@zl zrcV*w#Qy*~BdFl#t$W<9M(rFuPTDKHCtat~klr(}SLe{zH*4YuX3pra2UAyK)+`-? z6R0P#?NZu>$*+N#*aF#p&`ni7z`ddSBHJB85}*m!@%p) zX{(d?yI!<~t^WYDJmkmmFCw#a-$Im)&jXf=#g867@*JG~Kl;_J<2w^`u0%m0cJgb1 z(tKFjUaFUm8oTlttE1FBZ)d8m{$p%?{-9QTl0|bGc6!J5D0D)^FvAViNYnCtx0td4+D1wwJu&q zmC(63W5=Z`AuzRcv%@TD4T%Bm)~Wd76_ZQff^a)j)+}SVz~en?--uvajUAh*Rip=w zsoHw-Ju6nqWoAP*N@tqHX*N3sY@G3dT6%4Ut91E>)P(-@zbL3|(lNQ!%W0-w#sENv z*QH@k;TgBH+gt}7m4#@-px;Eh=D9_{bN&DFf~{IMdi<2~x(K4Th`6g9ceka6ok1oRbc zodElzH5dhsdsc@z4#Le(7Uwx`l{$bqJ*gf{&;n&qZ~zq>Hh=omjNX*e+)@D;^`;Y= zQgigCb)W;i1W+jnz@z|36w-L3y*C`t0pFT%q^0dZ4hEN@`qO^2;CQAN3Oe_qiU3;J z@Z)W~DtQN-RxmZAqA^`fap{T#&ek~cYW=Uu!mA)4)w^V3;8P)u@eB(3a~yCvIP|Uz z4mbk6D_4c2(j0I`-gD_*ZdYp+;Nyz*Fpu3ZnAG9D>S66rkG)e41$q!>3^F_Qrm)Or zpUyK#+$qVbdkGZ4{{SYHavF~O&;}a0x|?(@sXIp}@TUV!QHA!U9`&+j3|_PjX$c+a zGCQyzQ%>S0QHq&QwN?@@_lM_B^8*op$LO?NR%NV;LI4#Cmu^-$4u9A+Foxle7SkW1 z8hpr3A{HNo2v!X(lC?gWR@e0(iU!im1`Xab^FpG{{VDRABT*MgK)$C0Ba|S zhw~aLQhf|^=NS}*y>s|iM7|YMo!3%l&?YE87mGOaCS&W2R&NzebuCbzW12a~6&WOT zIIg*TD{Y*4Q%HT}snf!igZ^RVkG!U{mMRQ>$@NDF?mxUSQA;Y6<$(n-O3{+Bq+-$KAg8bCQ$}#Ws>z>FroCD}5BW`%h7s$wDzz4q zAmbSK*ejhhnWgS|TrtftKe?Fy0Kg4fi%h#c}-W)CQM081oN4fK;POa(Q!o6?(8bcfQ_W-W_NON+YJP=)tBK)FMY(9u4&OC;9C|9a%Qzm!oOFn>g3F43T$f>c z4>N;L2~5B1C5>~`W~N^Zz&U$}$I`ojrNTdpihtN`lyX2mpi%Y7_77mYoMLDe2thM} zk3=|(lNB{B>Pr1E6$>{jUi4j*yZEXZIqHt!{_~g zwN~fD)^`$@cy4*@Ulr7bgti&D&q}zq@iL4KJu4LCwq=|!@P3-$7O`@F+LY7N!Mb7` z{{Uwv{0c&AybvxrQkYXX+e4FMIG^}MwAIEm_!N%ib5<8av_Zr$FSw4n)`BuV=%~%K zP5dIJz;lVBsb7=JQ`-@WfA(F;k83_ucM1Wng=19U0g9I++Y|xJ$EBulRzgR8)T2+B zF;up8Ush`Am6Na^l`co7D6p<_k7F_%3ot(#jcp1O=0=D;xvsIow^bjFMdYA7AU|3x z7dg>sY(_+{^ueez!h^ds zr;d711RrFKe+@@*0{xxU7pSX6fu=DGq#8|VRX>RyORBq#LUFmUAEED52+7F+{uQsU zM6v3#Z5ST4lvf3q^zsi*3KQ?emKDt3m#YAN#f4ht?<0X0f$YP673& zq04>hW;ykw+6Sd?W63Rx27EgZs(a?5nIVa`A>EFqkjo)Wo6bEdyM`I#ngCY{=N&1Y zPy@9hm*XH*z?^YF$hP1CNrEa}zH^{J9&27oN8qNo6KOOAahsVWhUGfv(!#ZZOM6a({93yM%l?LZFQKrUgt@~1oln%0_SXwwbavy#|_-BT4I zdscN}&8itOY^HIVmNS?|LJm@-gz!ddnT&9wwI+F^IqgUUbKey)IZ;qQ-9D8f9LG!t z15VFsj2?Q@=dC590~1_#7g3n=l{w2p?HqZFflMkEHtHNWDdQt**z^I;31_eFA$4rb=4I8#_r|DH4z~Fpx zq@XzHcVf5)KQSN9y&uLf5pGV>PY3x|n-V(u*XcP#`S7tkyh^mkBNZporVM2*>s7Ok z^*y=ykFe=psmwNCySKem#t&M%FF%j1RAGjwu!JrSTkpmE-S90pB0 zX&uchWCABI@9R^y+@u8d7cyGjM$3X3utBXK z5FjE64Ce+tEj{`x+c+$*EkS2|)j#zD_DoV1byoW~r~Nau=C&(ed^v;nlZ<20DX zDdvE%hw`LT?MvF5k4gZL{KA;S2R*67g{G69)WA%8;)c#WMFO5wu<6o(A{6Mz-afR` z`HE0*b5aEEF@sUK^))n$`=RUBtGVN@X#jES&%HTvO)wriQm!hK0p$DBN!)tSNzZCd zw7@%xa*<3p#%T2BfF&mxsLOYxEPd&@rEnZiG{!im9G|5$@leJ}gDX*$!y1wj2{e*@ z<3J4FeR-pIsiu%I5Aic_CjcK{>~lmo}5Aw1)X2TDu_p&PmB?Ou=JM$MSP z=Ny1*&DR*Nr8?*9PRuJP%bwUe3w8R=R=q@eE?VK}FwGsc6asN&!9V^112hIqD5#;){U zn56{vt$w#(`QP40v8Vi{QKeXe{{SA*{#7s7EYyFfj{~MfPmp_2Qt>sO@_%_=&K-zF zrLgG)fA`3zED^8-n3qA4`uMY~k;VT2Jv%jhMn{;^!qb)YR^e4Y&$#(Pr{6fKMIkGDROwG=M=f(fEPJE=*iC%nWJ?p z2(bY9tDEtBT*Tgo70|@zHI3rmp3omhucP6qTNKgd=8N}7CkG8zNi{+bm8$Pm$*l5Q@d_!b76;@6ftvSv)sGk|Hbf((9jQ9fk9vba$-x|R z>sHh54u1-!xZDLyZAQzD`> zjEZY;bL&qW(_5uv%}~lr(o?aYts#mCClxY``cx~%DpeWv#W;~7LDsB~yMa}ZWQwu} z%UdHE5k4?RGHSb=995|}9Mx$Lekn+(k%3HZ^!^IcF|66DBmF6O%^Bi>Qc&THk6M{W z9<>O?OuZ_R3~~$_vd03e1Nv2kY_2%15tA6_k9w@#b5>;My+FeUz9~q!k)E{H7!>o? znBKy(HA6a|N`HKsZ+}`)aC=f1<*C!AI@NG{ikS{Y1hQrO>5>54E7Wu;1L^S|`v!CE zn)1e0+Su!ifNRq{Hv8-&Ozthsd}kHM_i9J2mOWZD=j0zsqT}cK)#Myl6df^+I`dPmJj_?zpHoj^9Zus@LVAj0FJ9u20aNWkzQv|eRDefJjMuDq zLsWvpMO=bOJrriVmNU76=K;IdwD=U*K9dw6MrBd@)|B@=+}-}*>!NQm5hmPZXBCHW zd3AHBtS}>mR^*P=(Ey5^oDX_rQNy^rU~}A7=f|;BIEU_y;C{7A$#0F^jdOt?@G8{T znv7O)lE$57c(+gq0L20#)e>`Uh;x#9ii1be-qnn=HtAcBpsOm+te{yt7r-Wz=pw z`2h}l7OZMZq3z{(DNcOy*r9bc=?`t>iS`jzRzOWO4AS?f0tb2v z5PQ>D^PgH$`KZ~6??AwjO((4(JbTkfIp&aM!7Ong<#88%(VjAwAFMmUAdO{1vzfzFH@wg(mC@Ue-P{hSUf*8FEG&7or;{Jks4 zv5b;ycy4?JRcSPJdS&UI#9%J`{n6=N405qJWFrE(4-KhpL!JiQ=hnLRlVHge?qJoS zbIHU%c#3pc9C3iXYd&ZlV|G@??f|K-u9_$_vvFh4Rev$1l~vSjUU6M!1^XyI#UI)q z13mlJ=8-7WbwqH)l^j(d+>nh+a-kWmE4tF_Rky51jtWAz$36?jE^Tlge zUx6g~;IQeQwU={iPbm`&F$rbdu^+BofQlHOI+u zosLf)wJ5rHuGN-854A~rr)yy&M%OX!+&SW}>635MCqs}yt|r%6xV5}>avfT)>AoS^ zEy_z63VH>gPA6X!k0yqU!0wH^dR2SDhKA&1h5<;;W@-BMxw4)Ybq&-h?N^p)uC!3d z*(llI)uv|RXH6PIc=3^)>UQJOvKk^5;xo%u{ro5ez1p`dHWBSvw<;sP-_c|oR)CIn zR1IiT1B!~!VNd{YIIRN?$>xVW25P0A@EHdrcB!#xn(@OVqhjPHJJr~%;I>#p47Ned zQ?#DuB^!dU_pLR)f#!jvQNbW)f(te`AMr7jeN#BCEiO+s*77yy2B=v)CsdH_0a<#V zUMlXJGOX8tV+0e&<5|eGS$vClB>o)KH|>drJAqCP=E^OnCtrt~j$Uj=knl=&2z~EL@z6NiH_|Y6~gPieKBa|@f(y#>PB??cq zUbK;)C0nh0{Wb3%VR+O9uJI)0Urrbn_7k?)$;Kuv6Nlc~t$RfQe-s3QkH z)nx$+4IvLvfGR*Y3S#x7mf;X}=9m(*>>O1qle{08=AI=7q0LsEj_xr?2p@8q(zPVT zS?)4A8oOrr810H+Pj&&Zmp|RFGP!I_bB^`tw^{ofr~QLoUw4sk{{Zh3SXMf)+mDJv zky>jnmu7nw6_;#sM^RU9n-GN+6qcsAsah5)oHlAQFby=Z#xqH{=LFY5`xfEHy0a56pWdnRIs(Rio>h60ur@}vcN zPzI9SD!0zA#5xr0iEa#}%OEm2rxz zI)+n`ObppTe2i66fMgL@9SJ=uCPVE&8S+P;m{dv%)#m{_XX#anFF2_f#CACZ^r;k_ z^Tjnz)~7ob_M`>qCVVfoYC|sUb*^z9MRnv6>01y;HV$xUfu|c}!I#aC?# zEGzfh3;0k5NteyIW?_uCPfFLb^d6OiZZdFB=UcYPuw^2=Xk1K%Cw+;B`I@3F+0-HNNbqXr>WWfw#niL zYY~d`4MNUaD}xiSO+MUPW~nLrZ`gjdw?=5_TNp3bMiBhJh)e%=>bqmJ;F zryYi(&`R4@Zd9LI^kpE|k=)x)XLhJl_mQ|^kF9!!mm^Q7#LdsjIj>8Lu+*lZi>Ce~ z463A*T`BZ2yks+{8sV*H`z`Df?atQ0uJgs?I$8O#gI;>zj=g)=xx$fC%eh~f=jPII z#3>`z>@V%_t)r3|RktYMRkOjxc=fgQ&4jBYGLRRIy{pvptD|{i6vXn#2?D-Ph;kQz ze%cQ4Z1yl1)rgI{qWvAH9VqQzCVBykiiYTJwUGyLQ+oPSB*=}wt!Yi#Ns~W>;B0PY zv6^2ZZH!p_zO|vHJ>|}#?RJHC^gWF?N3^$Z5XhHmJgkkR*I%r`Yi%qK4%H;%j`jCc zY|-FNYI&}&0kqUEQAfy5@6Nb8gPVtO*LU@=Lh);Pcd{|`;=J|7`9VD8hHKD<#%$cT zfGAu5eQQ%jP;S_JW~j)m3`#n2$f>k>gjcN3ox4UVp1^idoI=WLlhjjv_#9((boS4_ zGQ*{FxA`|p-S=@(0A~G#uplrP&1$>=K*hRrsI=IyiNB@=Sk;_c+jqgO7?GW5KXXDKwT z6O<%^DXV=jZK3yP)~{+d!e!lz9+?$^_IZ|26}bn$dZZ?HI%UYWo;jRkFKX(bzqY&$ zBuC~PFs?Gp?tljCSM)ux+}tMMo4QouVa*e#2<>)uv0W||KJV7G5Y^XEbv9mPf(g$fnZj_1hNa&c#x#-tyuXUe#hzO}5W?^LIY z6OmtOI%-fz@)Wfa-7tsgRUJrn7|15HA{aFZi}#1$nwpev1d&QaYSTdwDCKZ!Xmy*| zo0&JS_eiCce{@HBs*&XLT-9h4=2i(hnAGbVj;TNXYd)8^c=xej>4cdkx!%p7$U zUKGoN>CH__4NH{;&cw?Ugfd8^dzyI4k80!YLo9=7AOXc((=IMd!CF=*4@2Iwl_@E5 zlyuQZ=)-Gm^sO6BL`N>$fUJj%);tq#Y-2p)wB*w+qqi4QAy~SDToT1njJag&YwYH= zMfvPBtCb`{8#lLF((vuwwwZ3$;x-A`*E1O-gltv&XH5}@oF1u)PHkF7%;jF` z*?A0dD#}_;V`8yoan`Z7u{j2tcdA_5TAwaL0PR%Sk$qFkZQ0sA>uN-f>qwF~&i32X z*DqrvnvJk_Qb%*|TNWuIBb5bW?NM=@jjoGnrq3nB(QlV00~y6=rQOZcN9^zwLEjjy znV|jWn4FS%s9I^Ww;B2h&Be2}m1ssbF;16zG@re=D4lUrF^1ATk(JML-mFR)vKShv zjMwWBGc{YSmafCDIIcCxXJhJXv()tDxKH)6D*Fn-eFcXrdH58qDaOY= zYKl)o9FCOmdR57Edx-h-V{!V`Ng|Rgd7FNi%_rkht+m5_+j)rf2x;r5-oM?mxIgyH(P3Q`$;CGu)`IAo zoAk1ipI$0d@XoN`^5#d?$N14;xs{4cR_O4SuH9mdey>sw2I?e@(m=oPDl8W{?v$Z( zT`KrC;G8|=L+H7y3E-W_okQ!0{{Z^*0m)!r*C)fc}$Kb6zwmj>W zK7@(}aNy^?10;nXF+BjULSF}Iaq!VIdhU?bt6vXkR?;lVYZm3?7JSm?k8+eG&p%Bg zQ;=me`<4fx^37;z+CHfT{4z^nG;96mQ;PKj*340b65B4{#-W?U2+8x_L61->eWXhE z6(2&9S-+O2Yi9$sU$eI9l_IIOy=}<*cR%ckjkWlfrPQzN1s>KVeNwCYCsO)X+pO9l zAVA;6Ty4+8o6$S@cku;cPb*J<5!&aOE6t1q%- zUU*wlvbixYmoUb6hQ%~!I*tZoh=0KAMYa2Kf8)@x1G%O*h)Dakk&ni@Bbr!0v8z6X zH1PfD`_BUXTQw?pYHobXqyYZ_b#qQWB)B=nykqdHvg3>NVw#cdXs;` zB1t6QH@+gN2ZP}qZzm(!DyY`A4j0dEeW}M+)DZsh(Qv#lT5aF3O(Q|KrGJ`!v(y3l;u3o9SGi28x%8sQQ|$qJlbh@g=u7 zhF13`qHhvHNBnu@d$n`4cc}LB?r5^SKVx+GjDdx;Kt8n_c#`Y*V1#}Zjh|`-ORYE5 z(Pj8`(AGX8zRy^|^b1kGy{ItaP^Z{dZfMW7E_rt}SV}AGms?lV7-Q`(O*)nHf6L6D zom8L#NTtro`n@IgPeAZohJ8PCw&nzbn(EYT`9R{h-vT}@q>S|3de>*4di1Ef!1-)^ zd22L<7zFW3ImQJv6X+>Htqu{udH^XH5HU^%(t<@WAv^bWpsODEr}yhhezXihAE7i9 zJ?ZLkPdz>80udNA!v`j(1JaO_ngm9%0BMq1tb`J^I5`yKNDT34p|iAA)Lo*K#tkmg zxS(UU@koBO1I;J^jz?MmX&)%4%A8c>eiVdK0uq@3fkxgcbpoTBFx(ve6o6{3Jt=5a zRa{fZ^q>fi6q;w+3bx&usY?B60swLcCV&|vrB@(SD|I1bfydIV?8xSVgFPq$ub%$& zG>&^3v|||QK~P5mfG9DPbW(pBe#RoM2>Hz^7$9S>6b?I{SK<_8)LVDnVVcM+K(3F* zF@)5?2L+39T-P|}yxH!3ZXO)e(-WYj#UTWCrR`93+S>*_si&?TbuB_B#d3NuDBC^P_Kl9xCXou~n5qKW`0qKXC-Qc}h_j#wPU@7eHe3IucS(3 z)1j{XH^O)sy45pFpzTI8PC%#cQ;AG*T^BquEa7PzpRG9K9qEjH=oq_mnnRI57xhz>N${EmP)DP`BXblG0j0HqiU&>a}fUkfmKJ1TCM!I@%ExU~I))np1uLHQKiU*~mFy&K3#)Pbd8HTdrg5Hq zt1fAoW84Cdpr#2QXkm(%n9>ic$k!KfzeRj|ibHdgg+~0VIc{Yu%Z&Xh!b;B=%bLnr ztt4O7WLXnAKkAx;B&P&LkF8e>LB`|x)T0d8=O0?edCfJlAJthPYmfQo7#{6Onf(xc zG~8j9r#LDrC!Ma5E9$;wb{8%&<{-}*6=n!Z!?l|^>S$b4z~EP(ip-sRd#2Rr@)#l{ zi&9WVLleoXmk6r)6kpk~x{hf3cJ-&+M#`z4J5t0{RTO1%qOEepzs(5dowqAdS`x^6 z)qp-zT-xkV#XYI;f2YPcMwoc^EDx)haXBBET4Hy;3nL=RW=}%r$G}1m(NQdRAtEeL2JEIhs z;}np#VtB1rwRxyG_B{Mz z)iR#k8k#ICbKauQ6!m|Ye>(akaI#n0TcuQ&@70+B0-%&(g$zh$Xzf7$bu362k>Apg z$bXKCbFK;ODY&2o1c6J|leHB<1QEqI88qrbGwnxq6AkIZ04Ll!UYo@x8 zU1((RTW;=anPct6bb4}`^n!;c9Lq&6x^KggI2W|9t(~}6rK%J2L_H{E#$O#HD0HImjiGnp(6y3PV~k!bf+o93TWes zQ9ur3P5N<8Ve-^@!RDwydFx8N5t>fDMFWw+pao$}@0ybtUX;vIU^j84Cy`FT=9rQdaHZ$!{ZboTb2+vAfccVOYrsuabhCAs<)SYNJ#Q|Y5aYtG@QjWBk3a1_G zuJClkO|IY=|IH>jP|6Z$20)Brk2Go@}Q2CfH#)yQUmQw0|erop0qKGOPuDD zIW%WEsR1_RigDtK4_XETjoatp7B(t z_i4N4Cy|=yK@r5#NOq_lO>r8%=i2WXgKkCPO?`(9VVj()wV~qXwO1!8LNE1$By;In zBd2Q4jO}1+L358v`}%tyDOYi=!0T1qb57{ z(VDF%Et*UsN7ub0bI0pSI#LnX)=bqA^riQt$318r{pv~-b*Yf?=}`C0N~8Y()M=t* zN~b2Qpao89s_|B181KQYk%WYC%~f$$m}i`tuO>%sD3IbrX{}B_Tv8FoTFILtEDX|t z(vXg6dXIXNg&Z|byo!T0G9Gy~NQOKCRtF-h@tU1a;aVd(2yu>T2dUfc@+t@Rp^hw! zo_MC3b}_&-)Ag*GvLnYQ)YA8*^`sf(^`tRIaw>Eg#X>zlTA2^a)1O)iWQQdmX(5W? zO?nrD-CIwEhDH+yJ$)ktky7^yk;uax4deAsKAmRkMusFYw4)~G)W zMPHXCjZ>9y)%na%c=FqJ&T-nOTxW`>17<_$MO;zRzUs%+QkI2)GAc90Iam(8#Wm02 zNa);>Bl9RdE7-gPr8n4x+>&JHfW0fmqjIbYk+^iPYWRD6B+*I|Nm{ylo^EY-htTV9 z?V9e*;Sw@#?mZ~6wib5cAmzTbfvk9+?6V{>0$XqdR?VIA-C3;LSxM|`p!pdliu#6^ z_RE!allMpOEoi|SK@y^H6jm4fBuv`TuuEnkd1v;kdbR7@*t@4)w8^ocrWcut?Jm7Y zsaix4lO{F}xvmRDyS!~k$;yC!Y;p}~_?qT*(cR;dYvZS_OteM9H|p362{o_l7cyttN0*vjWQPXPa~x!;Ydi$Ah;7odFe<<$u$eP9129a5|>f!Q9S6U?{ie= zc>v*0*0LwMkywIyP;uAAdoy-v!Bc~ude3P_>Gi@0#>Ycqr0Y*b+8&t_Ilwl|lMfRWsnRKg4GL0ETU3 zX(e)Sp+Q`BJl9O}h5;C1y=omk-Z(A(Q;dqSDUF*M#?Ios>@xk@JWBrn8B*tIkOkx* z^s2VV_ZKJor-AQFB;is<4aq;HK@6`B%n`pi2DdUbpwm_f31AqJo@=e}d}S8uZ@Qpu zT-G(Du}G^Vn|Cn9ShvNcZU-Mv7?0eKuvr-!B&_Xx)vXL##VY3Xxo4blKY1Iabi!FOymN!xfE zmZ?QOynksd$}`73>Ff)cltj-qj7cLPsL89s z+G#>^bKG~Q&XD;TZ%}yB<~exz)NVDKpDz3=;|wYbtxXNOah<($+OO%+$9UpoC4%vh zO-V3uXOx*Wo~i1ze=+{p|?y+%V>ki9u6_cmRc@Iz&0qMkXM|nAj*JTAA4(g=kzXQCleBXo z6y3#c_!cX;6N3=o$nYgj^h8aqnIv zRgYSvu66dwwl(@zgd--Y#;0QYRhaoTW+k*4IIAeVGf+gh`qi9(w17z;V65rRShZPp z%V5(P6~FrQfTSIP0ax%O`%-pKw9s zaY$t+8FF*i)}@a>{d%lU8yr;j?g=YE4kVQ#p^zG#$?f^nG8~UjT3}U?vIwd-Nxd_Q zxgpD7)KXxn9cTk6DOSf!)QU-N)cI59qA2p?9WzX0i<2XNcY#V%CxOjDEW4bZoc67o zC>D4`hq%oE%)=97IH->v*{*_H50q^mg=XAYx}0tA-j#_n)!Z;3n&`Ygd*w;w5OBxk z#bWs^hwkR4wv))XN9W}^;+2MaW}h%=0B(Z1OM9T0?xMJBJApE!x#~C~x9sO;$IZa? zphshEI=b;%aIi68^{!UdR#^cbcDF2UOE%8F^Z|XrBav0704{M?ZXg zF`c6oPj@&yYek~Uu>7i#4P~PI-D=Vuz4}rEdIXgxyZMfm9Ro4|t;xco# zfH5v%J6K~lu5$9+s+^4ToY!MKEX%oT68Z)p<$BNuBPwlX^r%4{Yf|#xA2vExW3JaD zr63&}43KK{65x(|)@V63W(UUxkR3gQy#{(7l|#kW?k*yka#BSZ2eGEvT$FG-9CKUO z7QIHm8bxV^Ie&@e~mFa*y(V8*M7{SeW$7RIr zMlf@lQPfdP3~ggVi&A8ie2%T2D@M`*ZEmrSfM8XD(vGIOr;M#SN|c|vh*aXAGDc5` zG}*NcJft`>dRHa?00?fOCNfn)_OC=tPT{o7OmK$mw;f5;SP#jWThZfz5I@_vRMf$BbaFabCM+ z#-~o)(T9xWwMf;=1E1s~?r;-Jd zWMF+UQp=lVIN*xXYQ)9diq-s^#s@hkp{=M`H$AJDhIVVh*&kEEBC%%X zmCmBEuEgZ~RVV}8NK0}mrIoG4+Xp$p^{ugQ_IQGhz3Bl)bt*C1uSHJa->(u(Uod=#e432%~+=v zkDldSlCT_L)jNUn?(S=5{=)GuCjS6Lkg0Qm7O2UmUqAf0$zQP1oLwaDeC(B^Q;Bgy z51y{YrD_C{ElB?Wd4Q>ohp9g+ZiD^@RqY|%c72SuT*hiB(-pb@00{N_41VMv_o-9D z*QYs}A^2vpok~}|#-lFAD~-|AF(wZc(7#7SRKBB%S8G)}` z5$z+f=|Zd{8#52Xx(eJ(l1ib6rada3h%8>$S7_kKLaWEUbTD6PcBc_T5&{0rL3DL1 zxqQi1FvFt-t!ZF!3a2w)3c6HUF)_6%H8q&6x0AQ2$*Lk8s^D%}ow{Hfzkw*>sOa)r)S?O>1{(zyfC zDmT(CdKQ%a71=GE0z7OO^rRNBgZBj%3!F=6c9J#(GN1SrHM})q=Ph8&eOZlnLJ0c~ zY5NgC;+T#ZJS$<5{{RxW{-&m13t8vo({0DqYp#}9;Tdi!6}pN0(7?c74WjV2uqpM~ zQm%tC4h%nn*53AP{MZJVWXBt+SPY?~-Hy@Xo-}EQ`J4*BB=5Is6II>r&p_sj0SERe z&&@EYQ$&CamLFPhj_mX0x73=NJA0gvKu)bpx$>h=!PkywV=9B|jogAn-(}6T8B9xraK2!vZ=NYLa zk|xH)+B?)tDYOSFCs|cvU}FTH^%43~XNoiHKQ^Ds>ISOmM>7v1k*(rprP5M%^AfdAQqB} zC;+3q6i@=u+LDR@T29nb&;n6K6vPzpdQ&ka|FWs*^@JyRE zDRcZp3iL(bb+1bg@E<9fD_3Efa5(Ki9MX>2tb}j6bw*t%??g@6q~(2DskuEG=w1FbmoFFN_ggs&@f)K;uMV2bBa#=XaHgF zMtP>^C*GBv6>`mwtpGTaicAtIzG`~X@7>VSU^!0H+Z3eJ6oP7Po4WL=3lZmzl$*X< z90d2MgXD3FU`QY4{{R|RZa5VQ51uH)`ry%U9lf`8sRYVLII5u;kKU&nem-X;(Qquh z>fJF+GO7L{P>5GP)P~&&%>Ya$PMd`SMPtFuF=2^E+#a+9Rr{a{296iT(cyxN*cpIw4?qJ_xrDG8)Gq&cWN1?xw8Zbmx(w7CIE$o%P8 zcS7fiLr54C)KQ$A08V`c7GcbV^`!4kRboI?a($H3(%#|z<+R8C0BGcwVqHisq;yr4 z({%^V+Zq1=@0yTknzNsl!e7R#l3j>(=`N)n^mCfkUkz(5($D_@9;p+;ddr{n5wF$h z`ziJz;^?omV;_1#YoK2T>Zk8Du=>3{d>MXoy5i7(!0DYo`9h@cIwl>sk6RrpaO9NH8B#k%{e1VdO*1 z=%bs@6l8je=!^I^5Hmcke;Nj-;ONK63qCs)t5{hXJl2{y+^Ft9I&YYR_=R+T@R0ak zG|YNteTWpp;>`^{=8n1dQC6^WGkLr_7$D~y6ZECQCxmi+l-BzA&dZXTOl#?yiTrR> ze3mf}ZM9!gWIW9@X6QX2bpBD!cgCSs(#$zxT~SCyI4>0WEsNj(}Bt zNX_Q+=#4SqomIc(lxy{Rc<`>KPd{fLSFU~a-BLh9UQ3^2P&TE0+(~sS5BH5fsgUz( zjOtH?Z@-G-+wgWzA9=NYE@VvQ;spqbJtE)!HuO_}abmZcYp+!kt-~QBq z{{YKIKkyoB>X7Z=Is7XRJm=D$53O>%#;Y~<5H(J$ouYrl(_2#nf2u!=R#`k!XNsS% z)gQ2lqHl{6`?aPUxij}reicm{2A)`RSxXyP^&hc^Vt=(u{=okLfYVLH$DQ2=YJ+za z;Bqlg@pZeE?Bm#Ex0B=jYYJevmD4_B^ZwN~QJjj2I8&OXh^Y5r$q`ydKl0K40Pm`W zp+`SCX8O6Q32c4ZRr|TcbSjc?dXnIU7I5S4anr4Gdd0t!s4^olQoVE1yAW`quyweU z+^dn=w82hJc4SpaMCW$o@<}7!r?UiK!VgW=Wg%RgE@{aEtmxS2z~;S4$J}Q!mZyKE zZCF(mKse7eb2x8G&C?%t)6;OPvM~}duac~qn^!#;Y*<&#O0AG;lF7|jf%i7r=V+o7 zJi7gBE=JoU1M6BuZM=2<_BgD&&-nO%&b6nw8U*jP9P?2|3$D;{MXPVO#(APFF73S6 zO*gAdmI1bt>N{1dcg$a2)kk;E+lV=r`#dWvirOMdrFWn-IcrAr#@mie$(4f`i(*>Mcf# z56KkO=d~$0Kt(hjYcY=meiVtsoKQcVAo*klfFArvX}PCLK458stq1|6R8q`vDIk$# zkg||{>b3fofbFJfvTfL;b6v8b%R|~CIlb!^E*JNwH6_0bf+^PsOH(2xTiUr}sY9e) zq|`BKNzFgc|IBNg_Cmdi3rkPg~{Rtz&!1qM2a zxn6)!A}~OwBVobmOzF~`I_8kcCHb>Z_3cugR-?u!0Xxy2X?s#&;dyD#ir+8V9{6LCq+jL%UN5?N1rSH?0E!LmYe2-j#-WQvsWfYpd|R z!m4akQrzI0<%iO=G-;k2;1G}vV_Gf5Mb8pQ(p-dP0B$GotUo6m>vLZYT_s``fu)dV7~-vrh;Y>4a48Obs6N#oJaVJ?(-?E_PD4oD zYLfxE%^CEh?beJ_xDQ-l(=&rk2P;fHdeLzKZ(33^Ii%y#m$fD_tHnK=IK?y`X-`Ul zjA|)J?M(uZ3J)~l_i4ORj+Cx3O*iR59MRU02N|mt(-(zPVIwO)Sctpt;B$yiv`Dye+oKNJj_yg!#q*S!7%b8#Q%O&2y`7JH=6r9WpU&|cCcx#UneZnaJIDh~xbk@s72;GJItA zft$wAUufxZOW&n(=f&r5{Cl6zH3N9gRzEBOf8G^qBF4Y6NA`sd=V5`?mmTqn;v2>{ zWbq2ra(Ke{2EhyI^5&^zIKIOE(V}-Gsc(O3it6st#v>)n%Nq6s@@vm0@m{4VA!Ndl z*0Ls^TejVB?IUM7HQj~b**AKu#;#)<_4b$?JSbD-g3$0WH62NFGF8AMCpDuP{oQ8)hVPothdVJ|r8CZ~DI=7ZLj8H}m2cfK) zsv|u`Cwf!XlNBWZ`qatOH4RH2K|&>x^!nA9+bAl&JJj&>=bF_R$Q+#Ys3bY>RtV(( z04jz509vLfvbh5^huW0#X%Dqx&CwMt2hdU4q@*uel?HvPEPK?k_2coXM6yD0%}*cQ z^{5EXYMLyC#b}JAIl5JOI`kD~#(iqD^Fs)c91%$0Oj4YBP)`}GnYto9XzkPTpp2R- zMmTlrQ^q~oN{5NXhHXQIPz{zdb7SoT6j}^DXQ<)r%{stge#g7Aqohq;{e%%*LwruyAM4m)aCJcfNn{6Tj%ys}{)OR89aD z=5`)Exgy#If=1jzmd0zcxW9L^ca65O917`+x$=0NJn72PFMX=bu31sz5{{$2O(dvM zk@-`{HRa~!?X_G-pEGzF&o$gRnoClnA@=vGIb^I`fo<)$*tho^JYuBFLI80M<^gR!n->Zw({ORD^JrwMW1sEKjjo#y=AXgVWQyd)%h(s`9sOOEur`R0+L zs*796??E~5Rea0}1fMq)iuQ$q#8Z6SpO{o-%Ti}F3C`rCtFNVJ-C3iKoYkxva9?^Z zXE-UVGnt;;#NOVt`+rK;zJN42$4bhLKs85`Iv&cVhKw!pfmYD)I#nn}d8>$WMI*kG zCIdaHM5uxK)TzZIx(uE(gIBHB=T7-O>Vh19TG6u^b;f>LXez&PnmX!(q!c`Sq<)p> zakj}7{{Xsq#d;pKy|n2*Qa)3I+PwP0#^X@A@?npFPWL?*uNB)u4szv3z+zv%+1=@d zrqiQ#?NUz4v7B{!b-D{%MYiMp>Pc;xO~OWZ;160zot_p^-NqJQvU#IOo*$$C41I1w>w(^jQUco*E!i-uCs~1vrOpX@jTY8 z<{|m9j%pcvSE|D^`Er7i4hDKxGc&s7vyS+vTK@nbbI9WrKU%)*e#IRVc$Zm>e3v*z z>J2dXqgYtge$oQxy>o4N@5Xqk>}_Vhk$`R#fNEYV%zniiQh1|QXo5A)Q`@aFZx?D# zgZHEr?oDKBHd9$jtMdgTsj4_6a%(q=pGH!n6QY;J_w08GNj~)izAC($P3%}7_p1+R zqh}Ql5kBRrQS56U6KVod=_$=Z+V-O%+|#i36+|w1q&yCX6+Yg5$LyonnY9a+7&AUS zGfDRQox6O-D?~OIH#qX(b6S@E7P*w>R|=hg>S*?|?mk3hNqI92Zamkh_)5}SeIhXY z?gOW4d}{)k|BHR_Co>Nw?Jy zN}K>GU4Rt1!r;|;T#`Vf0yC*@)SPYhsP>%y09u(7DTCIK$Q*&t)d`N)IjfgT3);!sq|5ZpdFvdtcKYnN(+JPr z;8zF-&yJkpu&KG#Lq&5|G9$D&&&)ZhPTbYm*h6lLdg8O5Odso7M`Mz-uOQE*K{IyE zIh)h9RcGYWGDI>dRbz>UC;^yXhKGtLbAP1B}%o zkzL2maBHB_oBb6xa0xgb)y|$pY*@*+Pswgq^r{?|hg%$IQy^xkT-t`n$4bAaIGWWQ z9Pa5>Uf*&aDHxob_SigCUnm1z1;x7U;C^+PEMO7{q!%w}v;4kEJr4r9XeU%E4@%uqj8UJh5tT{ODE2^-V1;=f`tSDGa&!K5;_a%svw zZ04BYuM~<->O(F$Mcd6XYIkaD9m+wZ1a14+opZ>nR{%L3g=}uY!0TBvp-I>u zTKTRZr|!mQtC!Dsk{ZYdaL7=L(ToJJ@;57MeTiJoJvX)(T`B)>W5Bxj0CO$OFTgFTA3 zY_npvb!0znoUZ^>V^X$@P1;Bj?de~o;dP@IkN#|CQeW3R!+VL2^;cy;<|2PcQIZIn7pfmhamIKWM1iZW>6q7DEel( zc|1coQmYyEJ8Hh1F791df$$MYA%7&piOD=z*u^W{hV)D62+Q zFY`FfQ{KsNC=CDf4({n=N;6-n-WpXjzxotw_S;{-$`c>KWm?Lej%Z{BYqiU8? zx6Ii80D#h*;%y8)OK6PPO8J;fpTe(26SRZnKb10D`)G(LLH88J*A;mQlm7KZ;%>0j zU)eV8yx5pzkO!??W-PprKN{tm#0}at=eBAl*WCXA%QY1|(J$(CdmS972dJvgu#dh! z3g_EenDaL`)j)td_oOG%lc_G{tQ{ZaFCAX+@#i=4sGn23ZnHLhb5%+D&^pv} zvsH$szR5FQ+&2bi$JUx|W+VM;{&gAkqzj%X<}2AjbUhQn(JZ=ZGpK0-f=TcGb6rS` zXN9g$z^q$Oe`Al-*JKp*uS$!&Pm;#Nma{}=EaNnuSk5uUPqdD-nD?ztG9efP7{xd) z1w0MZy9oBC1bb<_D#FG+b4bXdkPrd3f-~t-ouZmb_ND_ioKj;3r0qy~pazkVNJc#= z-4y=-N@jWVphLFO913Y-0iu{0I?6ne{GGcB$+5S&67|CR*HX}l7Y&S5Yig0PAw?mT zlHBK>O-?OxGHS>e?M?%V0D&My9{q|PZ%N@+BUXi!gTQzK)oHiMH)l?bhY zn4Ywmqa0C+MFj(zITU7)3rRtufDF+|jM9!Nh$zh%qXf_aMK0O^pajJf>~YqRj%ct6 zM;N2=qm0l2MrnAX7^VjAgdDE7j+tEkM1PHXauB1Zt$9y}r1G`Mn16TriuFYMi|Pgq zcj5j6<}-Es(rj@?a%rIDXy-jEpz=vc`DvSY;Lr&xNrFW%6B#t4p5lNp+)6%o!X8MOrOGwh+Wi#qxO|;IKc9a1wk?vJLXvI}fcvFU0tm zVm&yY_!cPFuvqkr4E^9frjd+&3y;9pmY<1|4F3S20qIqr;!dNJv znkA1o8;{{$RG$$wnTFBjrhTe5@s_tMVQ%sCQA?SHk?T9ue+zz8XO4#+_2g;dZDY+- zE#tC-$Q)E!w!NtWA&OWlnBoIqq7u_Hq@^VAri}wRPC{u*3(Wb6oN8-i;nN>Z3pJ*PZ#2lgzKv){&Wr z`|f-4)h`a2)eLP|N0u)`(Ek9k{5FK|)C=R$sh(GaA^Z0($KJg3qL%10*EygnjC`V+ z!$fZ#S^cBXe%0XkfB{SWL8Kb*gk$@*Dt(Gq1V_uz3TeO{D*mk#H;bzJo#F9^hhpL# zEf4$zQ%{dH=<*}dBLmkJ!XL_-N$O1}LMWfCP4zpY@eLD%(xL2Y z>rWgS6)2MG$m^x}g{mGBDA(|+t>c|-zvZxBpcT$B0*v;pJ(LOdk~dF`HP;w7UzI}s zB-P}|H?j)JT3q6n?$p`|=C49-1d=&pQLq{5pRGQcdizwd+-?9hDjZ^=J$h8Cyk|8baBjch zK&3vSldVt>jrQ^U>f6SVrhC;TI6q3Tk{KOP;~um&A~JF@OvPE4B91=wRVIs!QUEm4 zDNQDGO5h;tO)PUy1P`r7!w0QHU`o8Gp#9#oARBq7Fzrc<=sYyrK?8seKRW9Xu)K=o zJT!1yCxFNKS6HXzua(9x-m}r8@RAnhpSvqilY`crKJ9TDk1dJ=debvWlR(J>VX6DG zPz>%BCwf3jnmoX?#XM8ChBP2!KKoQmyBLo3XvPviI(t+XBlnzhO$cAT89nKX!gEqW zH!d?wakLuVo9HGA*&S;?RgXIwt|Re|^#-7Y?S6+f(}Q-ZWmj04O1R)sGXv|QN(mwW94Ew;8vvEx29_sOgKou=M}Rt$REnSR~Z{sXQfHr2yH$YF(9aO#VYXN z*CR%R*G;zaHWigtKfCy~sS&@vdb9*R55x{{UIV zT3?o6b6UL^h$Q(Y#ZPM3kl^;HuSVI_`id>GCR&;7G+tsub*U8bQ8x|ENP~*P!zTyj zs}{V*!mEm&(BQcAtfZ_1v5eD)9MD(h;*OOlWm#@>CzcIeLAuYcZYrPIRqry-g~v~N z&`quiFJWCcu3b3^Mq)D~1I=FFx-iugw&hy{cdH&)7XJWy6qM7Aghwgh9+a8N(#y;} zb4^?o?^)DZjIkNa9;8!2#%WIOa_(t6ahPrlpfU)7^kl>b4(wN zAR6FoIpkFvQU%iX#a?byj8;gK?Dwa*CcP?GmL5qNzlhqHl2)PW;+8p*W%m@uU5B}@ z80gC;kbJ+^s^=0KuruXzRoGyIT`O8`2$nO60Tp4nAk{#6b5>6%D~+v66c8#vfBkh3 z=qbv1>rw!x_q}QEed;5`fYh(hb3h8G2Dm>S+V8gxgDsuIKb3bt*E!CS26pyGyAQ?zgwjCxWN#eRsHq*{#0JQWtrUQeT zdYq}G0_Lyi=+a*lUh7%sk&3fnA&%``TL+~n{30jTpfKtgY<$bwvvbc%+1HSR8}if=imsLxtpH>ExaJgbC!;AfLfd@1Wq z>%|XMVH?_`M{{5Zb>6rluyN`tPOH~6g>#=ui&+ehIH_3)T<1L0Smvx`c|A=4Rz9?& zr5s|8*r^x;=|g>ap?GRm?betP&_|^JQTWpf0PDpeJky6-YXj>*gx&O~1Mf^CkW{c8 z{B*skwCv)L#62mrr<3?odQuqd^GZ5XX~2<40Q%B;&_yKxC^Vp&Owv*SJo-|{B#=J% zBxu{!O)%#;qM~q8R*_MYTO9?DiSOe(BxR6#nzH^jk|_$cm~VAz<|6}m&S;rHY>M-0 z<=A;U@|_D4Q@Pf!jGkEXwqxjDrAB;Vat;NekA2n5+cJ&WJkyJO+3QpNmxi~(Kdn^m zbqnH)>4yk_k6N4iYf@zg0e5x_(y(n^0UUc)vN$Wp99IzY~gOQR5zY1!xnZBGkJ`9ryuUr zU)uVUFE?`jbta*wG&8wX;QCb<=TwNU#U%HweT)~`UvRywpHkdS?NR>@Id!*~dMqGNDxbpnKJ!AE$api0yBBwE|p>cR(a388qelzLfcf*)dHXmEQ>H zVq3 zm{cYmb64T!FmqHk^H*)yDq#1nx@Q$#i5OH;jIISve(9)WS*jH#tzmg`7+ zn#G%{BT;jTu@S+l-D<=Hz_NkkvH3JNNDw#1LVa_Q23Nw>OTFsjwjZ7Im>BpxugQaFt6miz1jQq6_ zJmRE}k8@24lL5ya>S#^{MT7ZNk@^bOCK4rK#~7$(92&60j8qTE#ZweY$BIM3)0?d{ z)=b$EccsTPj5(lkYDyFj%B7E!)}pB+2iBSfO^TKgfNCt$;^5VzDH582_{~n(s3i2J zD3BBN#Ri5yF`)IV*|H-%8cv6rRv$4mfbrI#q1n$Kl_H*)6&R@#fI3qXB^;0|q41*> z)FcNZcisFeo(CM7+3@Uzb%lK3Y%BQx0FhokcN^hkbl}~pqthJZanh-{!yYQm34s`A zrB{?-lloWW`!ng0;qy3I26_t9Sv98QGT_UO*<0$&u?- zoya((564;#g;kTYW2FL9gHdnK(wfBbM-+$cEOy=))UD!`Bb5$&SE5?p$2t!!!4=`w zS8s1Juxu`KUV-7co@te%JCTpw>5A48IPtVStUaVo$zruz#h(hYXB?X9*hXxb&t>cF zUU{k7Tu&Gg$OEf}9@W~w4aSlXoH0yi-nO~mP8K-bOT-Bk zR2~g=I{l3H^G)UhkZ=#RaS!u3&tiD2YBSf%sV|6xfIHF?ig_GyQL*Wo!so59jA^YW zG}dFEN@?e<1oIE`4LnGFY6^Pw#RF0%RypfZD|*xb8j(k(BY3i9I5i@HnyxzcsTIh@ z2C0*daZ1?W^r(cNOo|Md7zd>zM9A*WV_}NMM$1->+u}CC#bqO5^Hh&F6)$}n5MYYG z9snM-nG~F4XX{sDB(TSN4d}AaZ$nR9{c1E&M_QQ&L5fFoN3L=`YgbLfPZE$w6_|jY zgB7Evu!?xy+>NX@fI8DfR9AyK?P|~dDfvEKxL!Xh;yg4JWw;DL8;Xo{JpTat>(X^! z^q&s?=oc*?MH%g0Qw5~ZyBW8{yN}9vCz|x|O{$5Xp5qt9nbb=hg|ImTrYbKz?ctD) zrjtyair_SGDw*1^Y0 zpt@Z1+=UVj4{FMDv8si~>e`Yh+A*APYnHmbEc_|J?rWpH@Z{{@D9A06Ph(g*m65ib zET*G7^^g5F@$Wz=!fn>5ZGfsh3d#v_qSgSWjp^+1y=(AOiIXGbYr-J7YX zN(|HRL7=ZSH!8yd;u3?dKFx`)8E*3g(6(UUxbE2FB z)K@IY$*$t!6}!@3Bpu6~S0@gUsNBotLumQW860AzF_Z|%;-!Wbn+St*dRI$f@c#f; zzL+DC41T!gy1P$@BTrc65*B6q#P<~L2;%I#F+7Ac&9M&{9Zhr=UK+NKC&@Cf{vs>0 zgGGe^FVuHhxv~gXjQ&+O8O_C{1q*}&(~6tyK}XHbD*fK4Z)&HN&pcKX+QZJ?=Cp$nfFE)C$Rt$=*yC3OZM(gQ;c8a@VKKb@tlD zq_>H-R0AE2XxOYWJnkECt}@!n#xw-njIIY-w+^{&r`$}dKgz=Z6W+ZKXqM+EvV9FC zwl?y-sgO$&D@N+$%#zx0{2VFArE+n2hS&#L9G-u@Q@@IAq_$Y1T)JZ(^)jyx;HXT{ z)~(oTu-rqP>&{1NOV@&El6N2#!nSG)Yx%Xyh}IlNssJSW^r&@j4QdhH4fhAhBX$Q& z_pB$1hRE79B)%e+o~d=IOp$-8U%iThQNNX+$be!s;MTQ*{{Un{(W3c`+4+xpd>U+W zznd;F-qpcUZgSM>icwk^{vES>&15r-2(WYb*Q_ZC5-0ap99J!+T1OSeQ2^()b;)TY zg-c{FZYwr1AVTlQBDXE!*&a82Zv%osx`Ig@Aq+Kd`_mB1frYApc|EG!tXNbkpEi49ganYT5SnC`>frQ0N}+Rf z;$g9{qwf!Tq}rshN_og$-nB-NG}^-l{&mn; z&zu!*-7Aufg9_8Kx!B!mMt7Fe6Br`3tY=`@ZicyyKKB88sIBNF$=tmt16|az8qSn$ zY#+|FE#(p>4+qkrxQBUaVl#>i@m1#FbgO<#u6W{@@owPekQs8u4JkyXzb>U&cIq?#?YR#Fu7&0X_SX!F-S>ZF~`Fd;2X zA26uQyNO=nmNprn1UX!uywyAP8~5X!Rk>J_d8*fOmWMu-=4SN0rW#&HUJiDuQ0YMF zKs09+@JGHK=%b|>6aaRhQQm<_0*q1k(vzIxm@v$5Oq|`r}jCUe6?rzCz2`8qRA&qYjg(lQd=}1q#dD1?z2_!FmlxH-Vqd!WUngQaF^rZxfLPaqNoKj~TP);eN&}SegnnOXP z=QU}Z@&HrHT-4=Bp<~5W&R0rKdJaUusnlRnD)hxTa4RNy zl%r%B=9~>C4mwealY61yWQurEQGzMq`Ji_kagMay^Gsu!Ku#)IaU>>_AewGzb5dBj z<1}X!(?C4XG5PkOXFO9gP7Q-VncMghPu$9bsAG{`$T%7GuRib_VtIWsYtbVgD6dNo z@E;|aD_3G<@F@4CJRAyeYy-t^dBkPN>%gamEIH{>pP18$`6vP8;CH4I+nQ!iy&0ed z&j*@J=e;2~8KXVLFde%K%{QY^4rm-T0u{RZQz=-}XaPqekHUaGDpgFbb3hCLP$oA{|V>RW-y zBNfk_3hKON7)#}Bfsw$jP?3&EuR5ytkE_8y+@>x)=+88Tmp^z?7eo9*HJQ}p$BGY1 zXPBV<;m^G|N`kJ&Qf-U3G;QXT7i028BY(Pt)BKBrz_p+7jL_GSDYf>9@M)xE)sbU- zK*gQG`lVQpL)GR{vdzYSym3dfljv;m5KCDZ_@u>buZ8uN=j`aeSE(1m8nX|*Y`<4O z;Z^LV*vsp5mh(my(@Bcx2ZMDH_pa?%{so$lcs^AhyuXBf4IaWmcqj27)eQ^7ai5=2osZO0#-HJ3)O`%zZ9yD{<g`9M zDEi=4@Ayo0Qcm5gQNN1yRyq4l)9H%8?AaMS@%9*=7S)y}^IZNosD`zu6Z2iUs##+)mUljen)oMDKYrrbe;m}G@P$q}Yxq{NzqIb0^KmEV zNY_(2B+V!1TE{G1Or@PxI(sh)MP+ce2UJXgF~@4_7g4c|2K)HI1GRZjnTX}wel#`4 zJMrjiWq?uYaaPApv%HT}ZD&kh`F}rx(H6I+OEN;YPSQV2E-T7S<_-o0Skf+)b?ZYU zim9GSqF899xss^gL)n_j>tJZ@-SRR9>{1IIO!4+8!T$hiZ~nDuT6mL3j?F~Ug5d^8 zr~d%LU7{>F$s~St#^nTRl$o3TpK_M(H1I+Sc1JCm<0tW&M(jSwgKkGBy>~i~jkJTM z&atl3gU&kF&$oJ_%X2G+#^yX$l$|GjV0`HBAIDOE1+01Ys85cszk(!OR{(Vt&s@}P zsddI{Z}xT2k9_Xr@xG?Zjp`4sDx>(vR$-5{kHWaKsW)LvH||bAAB`_*L39pT_d6Hy zR;J^dqxscoHT^-){Cz*ub#jLGL+MR7G7;3&y0p4PYBK81#OhZv+k^Ip&(^3(bve#t zC)TRzleCtM2*x|p+c`P?D~3%sb5v8BSr$h9;}3eLBNjh9vwyu-u2*XcsK?g2AhZy| z7t(@8c@&LE4N!-S4#V=L;1BSo53M^C0KZC6O~okSQey@jQx8shQ_Uw@Rszj{-zL*q zt8NZBti3dkwAV_Je4RR0Yz*d$9V!h+?x`cCYP@*%tnEl*-H$=*P8)%e=O;AG(vDX& znXa-x8gV?+d-bI~sSI4=lRu>>qt=>Y96C}SC>=V|nz0Nco|N2nr2!<+L);{Y^87^0Oq74O3lu-lbUbjKK0JoNkO$llO#Gh+yKRBjh92 zk|p`6%%?4ixIcJBCHuruTrTTkI{hidaU*7)erTJXaa~j;YKV#aCK~Vem1lPnolx zrDqpoG}}nn!ql$qV1hAn2OQJ>%b*`vk)GOAiddN=KA5U?T^gB z(vyQth~iOBkbK$gSuu}Olg%j^9`wL!Oz}tu$MZ#xPfCo88g;vT>?!*JV?Yp=+CG(? zBxK!u%ktxcTFnp3ks?dUZ;)ow|l_U{QxB0iB?Nd_lLn|IutuHY1Rpec)!lZ$>N7k}q z9x1@n0p^?z4ti1nAA_HIl%2{dC*)_Sr>`qOTv1ut)FN966pZ8_Ku=#Rny=m_Iln+5b5grXEOj7hThx4Wbm#q#kXkMb6;(-xTfykw! zIPXb}MjJ@yG<6+K2dx-5%|HMg^Gzd~P;hAvN(LRNKk8d8Qmv0Hn_} z9-V0c=71MCq|erroYH5Gl$ggU!J=XEW{`W+oRYgmM3Bg$Y&SJC5zup0fx)R1TYRnf*44S(gVPn~Vl;=+;pz0!sB!yK_r3RxlOqkt^F{T zfM?Sg6;zlOuC&{0(81IOJ;3i=hNIzg2hOpA2V4%-+bIJWp~A|WUy+W6wXhy(CZ4F} zLIonV>{DzTI#$M|qwgX}fF1FU)tzk{ARzV0sFKiSOM&~-o-!&(6MT3dtu5FhLfGKq zrn4KP&N!kV$c%Kxgzi16{E>i1ziN!foSLFecKHHLimU}*)gvJ1-xWk>xvt848OV@+ zw79^a3Q#$&gpAlPTG6-rf~Y7Y)%$QUT~v{ULRMOh)~74S^r+ZzTeM=CRl4Gn8C+A? zbKZ~*pw=xK#g!NkaYFM>kYVsCtJboysPWpaTOO5A4DnX2_&FUbdOMj^*t5{pyK}&* zm?ZjDt7D4nfyYx~!RLyJzy_rvqkf!ptyz>xu0U?4m^oT>zk809+R8^nNLzuAN^X18 zpXtYXXMe3=%@E*oQpLkm6*OEQTBr&|ug8j#FTI@9K;&T5k@di?gmcK9hAJ5crA&RQ z7d#55u_&(JdpI3TfnY#W|GIM^95(vd{{0j2_RG%GsPkLQn%jbo8Gc!=#7s)l$gyc zt~sR5NkP<9k(`=mPU4({4L~w*KD8ozq*OrT>rX&)R*cy@bf{k^Cp9r1^$Ya>01BZZ z0&-~q>zY%^?@8SIR&3P_VUG0NW9v?Sl*|xCK}dgp>rX>bV~pmWyk>zG0O0*AOGN}~ z$&w>n69G<&sM<|!I{UK4J2!Z(xN?DCI;R-j#nVm5{_z1RtC{PIqTM$ zAo;8E2`f$9`jxTaQ}Rti9L6aD?cSuA^VX`l&3(c<>N`CRCOf$uDlC!Sp|zhQV;Y%; zC>&>WIb`*xZm4M8ibeAho|vuw01j)?X}4&s*0897nn)A2jy1y5NI)Nh@2Dv$Uk;P*-c6vA(T(qu2#|NG&Hf|};$?Z{-gHUua zq?&GNNT!kaP-ZV`dY`2?9QsnI=b8qQD)Y@ugFi}y9Mp<&QglF@Za}0fjMI^WRO=Wb zgQ_sOQ{I#id)1R{4KTyAk|-(CXwSSO%VSw7%YHSrcAqK7VOeOL`cq8uu~gr*CXDbZ zPTEp*EUKF*^U9COe3)+Nu0?``yx zYL3en1CGL^TiIucP7Y5dy_~+y-2C@8p(<5cW7-vl0Sf;B7dRb_L2%if6S9t#U=n2B zdMK)Lx{dQTa(Y*)+2eBDtogXTz+eHu z0FPt(SDT8c)`;$-1!F$yz%sW09C43Y<24@+d9$?6N!of>pffW$Tpntq(IXr%=Dg-~ zEe;T9(6a3+8HaK!F7w0kyx$=TgVa}|Nn{AlMn09BabjGRe#hjVh>PEV~NoI%sr^Mm!PHrgcDP35d@&rEl(NVf32Y{M(~ zu<2b6pQl+^mCA3E7|EaxcSG>Sz=9+(0ze#^?rd}mOE~h#rcY{?8B9yRX4M@RrB=Gs zrQXCc^v~X@Y-YMc3a2{}ewCGfs9V5{k0Nbh)K@2}_=a*glnyFjNMR$2Sh%GnraqIot8JfFg_+D5pX;18u*n~uR4b2FK_)8;@}Nc(ft9%_TbA(JO8$GJ7w z&ux|I#Zi4c6Og2uk8LJ&dl;PJLg#_QA6nA3w)ukhCy#SihMSiAg#9Y?b`Gkfj`{jh z_KlRO*xT^kjFG_C5U$`(SL!RMxM!N&2O0YM(&-R=n$k4KUNKd*-9xsD_q#Na!lSlg;Qj z^{JUmQ8TLN6(b^dSR>_gS#wFb^Nbpv>gRClilyhF2jX54z#?DN5!sLnA}W;}YDbeYekSCsA;&OPY? z5pLaT2@MbOu))v0MEkSN10iNP>qxDZ6i9Gss&YZ}pbG@#3T`>;nnH541JC0?iCATO z)Kcf{@?!%cr^Z*_p_NYFyj3F7F(qs}Zq9viRb`D_?#*m6BXGltfZD+0IVx(4v5?TP zr(4e@t;BL;AzS7i)uh^bgT%DPwNdwoKD38pd@9PTA|4x&NgT3TOT8PO;8N*3Wq?E* zJ9s&%Zel1sFf*DAB&^P_PQ6LtM$aTxu>qqU550NbmwwP(Y|k0!Yq-;{mQ_{Vo;r#| zm9K3wHwF5N%XoI2^!zKWFc(9U$?sXW7DI9Q4t+&288Kv@wQdu&){w!lb4wltNmn+k zuD);y#dTIvH$`GVt{&a6**|u=T{7ju4t`Te4#L^W;GVU6i6g8CC*v$@TGnmr!vmUN z5)6CQMmXS(YeCm0s<;8LaA*RXDRKTaPI$=ck?mSiE;&=jrB;vzQ=YT|pRvb$ie$0n zd8zV7Mkyu9N<%W`kAuxXTMhK9%^Mu?QAq-o$?M*ghE{2vMs|}{Vv(2v4hX1SN{kQ) zq|ON2#UY&qyo_<4^```jw}J_-W(oQN_%*3-Atg?EphohjBQ(SE?o-l|2|iJtz3NAd zH#I^lk+@^hpq4xWYRFxzGg6qt$B$Y7#dx>%s?BBzZNqn`wQIaw^u{VCU9F#50Ohar zVEHOP4@%~)ZC=)FV}fyBmn2H+K^2dwXv=YI?4NjZKpbo`eEjiS+I`PVbnjTQL}6ki z7$erEx41Dk2a1~k*ofl2vy$2HcXGM)u4P%RW@z6zQ;gO7OYOK}OX3(7OK9)o$j9FF z#Qp&W;;7O2r)Uo3ms=P}jn}qIDw}b4b|-nhD~#$vkBz8(|-XR+GjTWl0zr?Ox?R5y#7WBaT_7 z9d$dxaZ7`amFJD(-9fX40-$daYElE2{8qZ-!FZ?fO&H5Kpte0MgWn&WG~f(F9 z*EI$?X=)eMZy%8{0Q*->J_(!nreyP~eG#|f!lzJ1L;NIhQD|NweKtjcX3eqbpW&RK5DzG1J~f5DdAZneaOQg)SzO#!$j7uG^w_( z=Zy7C*Q429CGE6xMhI6>*gdQBJo_S^Up{#227NXU85~4(+_B#@8Z(MRn)#%5oR+e2 zsxTgzt`Ee+GA0LKO78XG6II+gusNUxb6jjZKfO;XCljWYP`|CP=9$QZQ*hr5VYhn1rM~X~feF1Ti{& zXw5D&#UT{Tq^=pGuX+f@CQUMVMFa7t0g6HNr-7PRG*BNK?Hqt<#kuKB0~ERAts_+w zDQY)lQe)nVL*+rAN)%FcrS%kwNM5<6rvCs+GlNK>um+6ri>$tamZYNRDS?{_Q#3pyzdGDvBCN zq^?*BO(6%RXG?sM47#~r_o}OFkj5|}V~{k%%#X4Y}sQI+TBU(UJL@e1~~U#@Db z{wVShm|I41Ladm3Hg$xkQcJEqGf|g9de@#m#2H9CE!9Z&s!!wHL!F2}8rR+xk?I@Q z)Y6H-7{mTm=sRmtaXr_E8H7wYUexyE||MWihcS$l}e;G-YHnf9pH_&+m>@HY*8n`r2>$?qSDflvHlwAm zTZ@TZG53{-ts5^19Y)zEOWANnahk7XA#+6Rn^v=o9rtj8I|G`9{7I%pr#I1LdRLP8 zk4c+LzA5KOz>*0k+ORW$f>@8OM58$FTv}(UYgc|A)TR>L>JODU!kh}rXYhP0%+Dd~ z%Nq0IGo17FrNFG(xz!v@;<-~h#?^czhXUVsr7`?L;gmoVPgcR|R96fzDMwx@av?lT zN7U|M@g|7Ft%sYw_< zU!O8?#EtEm$$duWaor;k=uKZEF|e$c7;{`$%R=0y z)Lr*FUkTroxMiA50)AYY(eZTtb)ai^EZ^*NT&A1ln}Dow-!;&nwN=Ef?f&VnH<{k% z=QnFD>`quhzrVopw`{JjkUylBV+xlhVMj$erR_g^c^d%jw_Q!V^W_v znYn$btlV)^e`DPrxOX3VgxKB1ozd57#z5zEBt}6r(;IqJD}IS_dE#~GfE#yZZLXQiG|o_h!ixN^YmJa?!mb5QC@^(&Plri;arM;fV%aRag9kodlQVPOmS*EL3KI}~&>c&g?^ zE9I{v9M%+)86BAMo@tq*prL3W%^CKiw*r%#(+dkl9Qx7TkOeIz6u{Tgd5MK+74)p# z6y=#~VV6IJK#a@OA%~?ly?i9((<%-qobVC;8$AMLJ`F-C_h?JPQh_I z(SeFl*Qlc%>DWS3fW;?TaNy#dfH6&F$f*DVkcxH!5;>(&N>_>ydem}&pb`x-ro~1^ z54Ao~4IQcDy(THborVIJ9AbgZDd16H5DHvzMoxI?N-C@&q*9T^DFT%6wMhtzwF)_> zb)XCyml20zC>&FrN>$lCV{S61 zrFQC_@r+jqrbxq6Ni+2o=y4!q-PbkpnY?)_o{kybBwkn|gpUUUy;<4CBCpNGc>Kpv z50}paG;HUkSitwB02-cPE0w3J<$6@x1vwXrIe>&9qh}o|#?U<}3gU$zAb}eWw1xsu zo|R(M6C;f0o|NJ+jK1|wdV!j%cknrqzCdsmDsvEJZ7n+T-4upoKW* zu3n7nJZHUEMI`gmx+zQEOqnAVQL^F3=}*8Si=YL|dYTmFYv}3xCz~x9Z%!l3Wv-UQ zW)=sna=LqMzFha>x~l`bAbl&q&7<$!?ZZ7RJ88ib;Jnm?VDmsmJ--_9?sYUl9h*rr zvhuj~s&a;kZdU|#6}@7Oy@CBIhNEqlX5%%t)*VM_6JnxHU#|kMNUGMJwUh(x_pK{m zp3R4FGgV}jz_V-%TY{sSiRQfzfpn3jKGCrmT#z~Du&;a)+Kt0a{i4VS#?fB>T`ST# zE3Hn3-tyzg+V}B}JGCRQ1@gX1WS2+*Ecvyb(QsW|_a>RGUkv zj+Vz((xEbm>$Du!mY{)lwM``LBxPIzJt-|NR(KjG94{EJn~MF{G1_8pD%k0Y zyJ>L#X5QGVjcW)zAji_9OLUG5sK+X3^soR*r&1Aqu9`x+f0Y2Yaa5G_r(wh@}#C7dV2>>-5fIMsurAT|`nBzYv6{RO> zrZdSrX$X&41b-Io-j&Z_*I(nv2ijwhWaqf9H+DU1^voprsYRYOXxeOXt1jOlBdt^o zlg(HIbU%f57&18qMMOGOrG8A4QR0D$2?m;TOVrR;iY@|Db>^3)A^d0o-KnOYw2U#w z7@!8@ng?1AXcT~O{{T6ljB!U{M^j8juALZrR>|izl-x+e-mYn>ERs4SkUc6JwDRtq zY9qTD2BO8C>OW^d+7~-~cmddct0MnEG{Y(;cQ;zFnyhgu ztT6)JG3#9o;%s3tE2v=<_ zQIv;@kw?w+rl>x(C>gG}BNo66dR6OnFa!+E{d}Q-XWzTw$3@t|aCjz!+D61gr?NJV% z^)$R@q0c;4QaU5B$p%2EhdpX(IW-VCJk~7L3I|$zd^j~2=A=XO3UL&ReW}Uvwnu7W zoYR!^TcZgUNg4bq7aUaI!Rt{!Emq9YU57N^N^^DQo6@sp$ZHNNJXDX<>rCDA8qJo1 zo~P+d6a$Vqpc!NgjiheOp+D}>vQ5zJm3#%c)2O!s>cu&O! zD9lneGB_Uf=j#zQp>H6GS7^fy^czK8a!Y1z>zAV9`bWVVs|rWYYEv(o+15}`Tfm_~Zytu$EeOevpgl3g}Ij{PYy(x)lM_|r^y6v*Tl23S+V`ciPd^zn*C zMkA4Od8heU9qD5r?yjXXYFhq$2Q#L~Ow zD*$oRtxAYSJJNtEMIlWzV4#sCYC?=vlnqtHwK7OSpxyR;%M{U`x%$?1#INQvIOe;f zji)oicsh|C4*QKl+8C9KD+WJG^qYBvNU^(Qi*YorG=^$^GPt?Q zLl7xg6Ka}_uah9!dt$WZvx+`|XV$BjRFU%Iw*sJ}9z!(w`^43o9S&RRf}CtUPHUjB z(VkWhw3R)Lb-H$rmWT$>r1SNrBQr+u^}U2D+dq0oHM9}%0xer&8>MHI2q>&-setckK*10W1RousM!1ksCFCHZy!cVPHiZzl# z%Ai$gZiKA9rn;XF_+sYz(dW67WLe0^dM$HGZAVsOn>>Iq%{eSi@4JfXVv96Y10G8O!4%kDl(3&+uOmOe-(;``O}`YI@k#=6k%xXz3A}f%7YDkVwaaMe$W#oZUGCOh+b}=A&)q9J}h)W=oayMhz ztu?c;$si9}&bUlxb8|q<_6+Tpb4sfcj5Ri2m%T$8?_={CU|3a9+*c*yDb?;s2Z7qU z^KM16zH&gXJ=JFOFJG=#iq59Sv{s{S8-2>D@9A4ttTrTSe(0>76+Fw_o_4Nk?c3%; zefv>OXig@2*r>!*Y;o3=oC=J-b5?SUkdi8_goQa3Vchf;N@gnEc%(ABzCM)3e2h}a z-OfJ>iO;125za+7oKSO~w9$}HGyySTv``x+qZsc_P&W?z(*k*&mL2Jg)p+lcUzS`c z_03HzqCdPc4{E73vP`7JFlvoriwzWVa;yk716q^FBB&I(fr!D!txXm5n}WYI%?lr9 zlpb-4U$T}w(h1$Z?kNTQk^SiD1&exoX42~+PS(J#k?mGgKP__0se!k*u0?fPRpMVm z!3@KLiVSK;sm$NP(96c*+ut>%qUv%*AdTCp#!YGJnqZO^bzHEnP!>r#5WwdYSj6?4 z8J1|n0zQ>uNESeNt|vm)SSq0;6&S&;+Q#uFjAT*~LTe@-=Bs^_uQ;xhz$Hw9Ri(1$ zrah^Fh$A3p7^_yYv_L34dR2)nh#2coh*=JCO2BVf&RAfRpGw=Zl!o*IxqCTEvXU@s ze%esSaQmmVA)OX?N0C*e;ZAzfZD;IyRfknzNuXsio0qLd@DRDH7#ww>fx)0f5QqaQ zL6hFA%^y4i#a`MN`_ycNaX=JVNKd*Cwkm^=TW&e6oDIYrRcT=algHsjfXrw{+JZ=i z!RwmPmL|bv{Hlbg_}n^rQDNL_9lRgTuiD%MP&3cHWtJlas#IVU9@MNCI%{j7$}o5} zrxe?lo-32Hm@gZ?m8%uQjAJwbu_^`t=77Wwyi^cN=C3VMvjygu4Up%xRDAXHtIVO- zBCEI?IqOA$sL}z(Xi2u8YK~>Yarx2|Vugkc77>%K>9NiG$dm)NWF6;u*eIi%1W<)y2-@NrwqZRY7yLj3%_4|=(2r>gO{j=2?et<_;+)8#zS z2bZLqS(m2Mw-u#nb^yWap0z^pRvkuR*_$pI{0o_o@m7G{(_KXo|WDwgEa64^(;kCAB41} zKQ+F7we|Aj3eK8kN6E)T{6v2%L=c! z70W&~!>@)6wUSS)k1YuA(m6lxgHo-n!*qgQ#SMCr+QhvPe=3n;j2-~|tD0PHzRfcK z0I>VW@@Zg_6ShdopK(mbe@g3oVvD&5PzgP&BSg|4P@P%Oh=)HndisnuaZaWUVybA5 zHl|-SU)e`e$A@$`zL{s00>q>+&wlma!4g3jL|iD~3X0aPT_pCl!Nr?JXgGba{{{Y9FfK>8G9eQi2NcE(xCD1iC96$%u z)SvK*BjNM20EmyOV4;e?f&m2+s z*GfDmgNM66fTbQ8v_|>vq&~xnYLtxLHj3(VILV+cJ6BmBhIIKG9%Rf%`&FrL;EOkK z3~tPQT8UF>U6K8vNZ^3SQZr5kagD=1)#?fG{TCnTQGHAQ0QIU#ycPCaSCi~;e4{uG zTwhwl-rVS~uP%{imJqnkMJ~*Y_WD;xHnC%GB$54!Fj0!_s_o)f6Yf~YpJCFwRW$W7 zd7@iH$5>s*%NvpGhNN2yw;5YmNdEwKx;;Btn^2k<ve-Vy3gyrzW@x{_L83)N{E@$CU{mhKsZFn6^%Jl@ zm0h*HMZWdR5$r43SwxOUom4jy!Z&1m_g3m^LE#ornQ!7BO6OZryJqHN_|l8X*$!km zHKNJ<$a&3EqaGKsOnI769 z&#Bn1nc>LC&2a7YY6LzQfsZcP^<#?STavj0ij*Iabil16l|gkfmS|Bdh#p8GRR3XFYf+h#lSJ`EA=C#i& z7j<&1j8E|q^f;yoWnM$IDFuy59DADry{AnkdFpP(NiJp?*_`{;c`mNc8x+=yMTcS9 zpp{Bhav`aV)30vgy8{Y0b;WL7O?t>m;1BkNWLmPV+-KjdbyBLbbIwOK;pTMGl9A|P zYF$|4ZrbRv-pBCoS$76wljblr(_Y3loMVpFhdg*0KZSXRQIP&%C+8-sTt_P@8OoZ| zb@s`qWB`twRmIp$KMv}z7`d{zK+Vr}qQtYX@ul1?ZjtX&$F*PZ zbWa|TrbQs1TIMW#E2!MvBkFf5QBLeGN&RcQx7lqH#xb|joSI6)JoCl2-)Pm|9ByNS z)2AJ4g1@qs#^l2)OSFmbY5x&(v)Gl@oI0CW!W8vuTtOT);W{hx0Q&Ul=6pD_A zmL9a3%_|HN2;>}60h;DC6m<8e55kg{r2{$-3^)?HXYY2a^FxW7(y(-EjD;FUaa z+PWr{C2i}_&`Tp&Lsiv}bY%uJ?@*{6s@NG^la48&9L&0P&6~(&*|nP^YjaT`#GNVg zysvvIyOMLjG@BhyIj>(2FL506Ldm?0Cw}!JTDXsJXFj{BysjHK#anG}%!tK=UNM?g zr6o0HD91t&zabToF#X}JUpgVyRQhJJt{qIosm*1Kl5tv>MKs6R?lbKJCbyC%iKBLW zZRCSo+*c+S+_fy4tkO14KM`JG(01vqA`lse`~+2$)@_O%>f`p&gcy62SNx`}q4tlU*O^^qzRA~Bw%8sd$_%yQBb^)$mHk@vWyGje@K+6QNX z1!+(5pIXnGR=kks&MWM-NbWsannf@sd)eIl(>eTVGb^9sG~V=30%nYwF-wX7P&lN| zGy%mJB+vnxN_xiUqLcVjmI;`QA^fNUDk^hnI0Ts4K=l087c^y0bw z8Hm16KDEf2V7S4%b1U9#FapEk6P`+>WtY{*N!SYb5pYM$6AXS z^sU@=5UMFfDvVO&nmIrKqwuFse4+(ietH^$ZX;q3%m?RLt-$1`8)tAj6H$;V#nNn@ zhv`tB)!Q9_Z)$K9VwGyrBur9)#V8r2$0O36g5qL~VwB|KmmTTY1Fb2bFW2cxMLtj> z>N?Oc4h=sX@zR@)X>y2h>M4YCQV=-LT5FDIuv~5^9Vn*(kwt(hdiJ1kN->_a>;Z~C zl%R9gml!npLgH~j9Cf9}O)27@o<2P6toK5Wni9-KxW(u)WJdt#W;;Pk zy$eKdGSNPrtLAgqZ6mh_E{2}micNquOc$*t-cL32H$4jsC=D}aO-w+|E-^*MMX-Jp zsG}TIyJ;10X z#n`qNsjo&Db?n_!H#<8I11u^@R|pMA>w`gD#%rD>6(?NA53N8r$4Ydvws!CZGdu%b z2{_u~xtV>BJ9aoV3K4-;wG{c3`ubHRI5@APpzj2E^;f)Ew;^s+*Hx!5^FJEo5wR+h z(>SiG#q!bg!LKVfgR*AWXQ`$@4r$?lT4bCxIaf9Fr*P*mxjRm+>Tu9XSWq zp^yb!d|%iYPniUNJU0~V>qcSlW1h;xv5JoIH_&8CaF(L2!hFTJ0l;I@(njt z@g9?+%&|_6%)>t@sUbTrdUCwgi=86M?bb_+DCS|tSaz>#Dw}h0W*CL;+{90anktff znLqEEr$3MM$v)+z=ie36!Jug4pX|6v^eIy=nP7+I(xFrT09@1@BZ+Ga7u& zn$er)x5($(tFnU*c_y`uR-wqmH>yMW4egjImCCsEH7(ZJ@E z{lz_f>45(LIvB@hn2oki=T73A(Z{6#NLvlf1+$z|NzXpC!I7G{=)mH9dkZzWbQn3v z{Oit%)nWHoj z>qmM(K9G!5{#qN7}4sqHP==1q&~){DDIEo2JnasBFiz(6_aPR=Q`dQuo?Jw+MrXajxlJkSA-X+iHzr3dRs0Gb5^dQxYK20R*3QDoAqbBd4@@M#Wd zSaU@HHkUu0H=kNw)UE=WZ8&tMnqm_;>q-u3G4IU)VwJ`?diSI!ng`N@(t(CWA>dKa zP-!qDbJmqQiXW{tPAe{@7Gpm!J*!sDu;V>Qtd%$;iqf`hWBFG$C1^Bk1C=!dvOFW{ z*i_N{$_V12odHKDo-2wEQo*kW6g=}{Bu%}m2`9lo^_f)|`|R7shsreWjLn&%W_jP$Oe^+UqhIPYA~ z@g8$sxP6SKJx4VvjQiAU&u%JY7|nM<9P(qp;;h>aYPbhAW&!h8RWxBYp=g?8RHSFt zn!_fyXu&d^fD_k>j{`M4hzQL_6n-^>M$u(?SBiviYQ)2eg9KJBYHXO`IH{rF;-Ox1 z{OV}opwsY-T z8Feek!)BuIQph=|@ma{)BV1s0sQXloIjFOP^{6yL^XX0;nobWiX9j>}l;Cqu=s~FC zCuygV)6%UF$(NPpn0corG2W4fzAA`CcNod0XM<8Xrh%SwP|Z;r4n66eJ!(cdsOkzr z=O0>flbT@UQ9W&U3jsj)t^d zckp_A7JwMMivnu19*W>uu^5SNXsiUkB;4U*zFzZt>!No$}we{zrGA0}B=IHggNF;O$_W7@1i7$-eyS<@AEIZ&Q3F;WQm z#wultAmgn{v5!uDYEH;gB1k@An$yxW#?)`t1Q{p4rBz&G(!B@arJQqWGP(JgM<*RB zqOQXcHA<6_!)qEu+GYHakT5y{P(t}!SEPJIw}4%vqK(45?{3qIQdVNXRrZkP5U$}- zGUw}70QJQ+hI>>Vmo3V;?MPE1r(`)ergWgq!o+4Q^HG?vaz3?bNIfb3TD1dI(=+~H zc&X!`Y5sL9L6g#>FzwAC_Hv8Rw-w5j(-(Ty`{$k9I`_+=m#z6&29khZy?Sqr{~%#Z$P0_hgP}BBeic z$}8_k5SlmO@=krJM1%oB=jqg$VdLpmp^bWzRTZSq9qLrxe>!H6vNR)AQJ%FqbPLCN zq?y13)as+T%`>GlV@A8Ug6*2!@K+f=wYPt(-Ce`7(Ev;+k#k*$F*r(5>=1#teGM*Fi?4B$26jOvONdFffq_$q-Qze zx)N|bYd1)@x3kh=Kn_Cn??`nhgKRna*6j1;xh%|wA0{zXRfhb7gH|^s$}vXyy(>Cz zGABEDq$6h5=#P-#R)Dzqa7nIe-sHOs@M}y+T>|El8EWF~5pbt*`qeolk%m_Q&|~e_ zG|BGbv5d5hjPNQMNRCU1QBL+IvM#T|ZMajUSPqK>EFzhnjYQ^5Hk+1H?9CqzY3;zJ<)-gBT1byx~tjmpNNt(~Nr>1ZUe=U0%Lrm6bbZg}=*nxig>A>v0|j&Lg6-X)f7h@k<8 zezlt}p{UHqujNkQDACa+3|tHzGJ02BHAT15n$8`pSuw$`Qrg<$T$y_I#YHu><+RHz zEtO76o`h44M46+bCa!GQM6%0?*CcxS*H_`)VqFGF*fDE)IoMA_-xcSr;%_76lGK?o zoPot>&El)MSgP9`V~kertXyni>|~kR_>*0SQPkRa^10(4wNFdDihGiw_a4>B#dS5% zR%>|`y~k?T@cdE@NS9ra?EoKI=4l-X$w!pi)JTp+QT^)V^~ssFB?!l0UX{}7Og`MG z56Y;#d*s$d*ON8Dd;^X#Qk{(CW5e9{r_7U00a*Ig#x*aZDhQR656-oQ%u0OlE&|AWRfIN>{ zzrue2IjppEjt@?idMQ9%uUj*muvve)2hxu@SDKCGLcI-Dc@Spsw7rAYV$I`Rr zMw8|&ed^*%8vW?==~eC}Rr|lKA(@k|TLzgP)il|zP)U-*pL&Si!Te5&-&$Z=ySiws zq$~Gv&3UcVjQ3JA4oi16+3GrsUuASjRF)ON83Rh$`F9%5rl$0CIvpAxF49RbL2mSu zw?4IIGGWtEI0pi#NclCY(HxZ>=Gg?C9zQCFJmQ|`ImxKl{V5QE$icv>Q#M!dt4w}c zr8hK&R%bb;WFKmC_3N5u;%FFT(hU9-xH;z(cc2FXK&Qlicn@A`65L}PRQBnSyPzFu zp`mUPIS*f&t0-uX9Ey>%yqxqjgmG4GknqUs&tBBWf+rlWKBA47=|<8`A(04tvNoEK zg>i;neP|)Rv}Ex>4G|`Kbgdm4;M?B$VBkAv^r{5=QmbttvxfDc8oB5o8DqwIYUQyp+O1WOQH9T~Uc0hcp(ofWxt_rqfdS z1MknZNF4;0h!>7(q|pF6WALNk1qfSTy+E=g6-Oi)p2*Yl{sbz(bIvMcC^Q#O2UwUa!R+x&f0A}6zRBa9hI+0fKj)RH_<0gP8HNVPDR+iIf zJq~>Hq+}% zC_=ljRhC3zD#|*Q=72NgQc3xE%|ZbSfGbhgoPZ5iU_~V&l>j^)y#N%+n0ahZOd3*nENZpPq+7|3a-?xU9(8`3^$8!bJW@crPX??=1k<_A zIygc$O+y)K2-x9GY+4<-?rT0Z`>o!t!N4t?P=;(I_&+s1LFOiVRy?;mNDJS+Ubd9& z#(K~MR|*72n$N{+O&;ZMrDYM0JBs-n{tZ=9J*>W0g@mQ=MrjH3ub({t>L{c?Ps)@~ zFd~is;(^5(1oxm0e_hks{^A(IHqhB-ABPpKXJs9gvc!M@2TGi;Ii<~a)W_DH2++T} zjMXS9Idv9}b4N6l!e}iaJkoPXo|Gg9DdNlxLe!qUE11>(dsZCqGhGjiq}zFG)A9cR zKU(MS_PwiQ^R(CBWLja-;A8&)h|WVN9+g^7Pg=5m^LlPI1b~BIQxnf2J!)k8wGU2e zSo#`ZM#Gay9ELej#tze*9+cl6w8iU|X^N^$XV?Fb)A<|5CR{VA=- zTIQ)nHa3k(9i^X$WxHX<(dk-=dnq3=BzspOq4JE(dCvm6bOB-9Ys;35=;pa_h>4lE@FitayhQ?Khv8!;$l0{r=MGMN}mLie1-_n)B<#7Q& zDHV}_8HRjgf;jiCmF9^PB~KkqbNaN)ET1PBtETkkqGXhn8PUFO8mmFxn266 z%yvF})~!r>#m}bmf&A+!<0Cz5tnodv#o`Nr+~u)YZx|W$uhKA&nv7ZIRnlzO@XCai zHvZ|aZL~YAVL9zyC8DuR;PkI((;P{rLix^CzI%xw?nXyO74A!U9{VX&kKyTF1+By) z)b3LUJNlaX3Q?F`9^$+&#n70w*@5GB@8`$$uC5EKYO;ZzJ$siqryO%p4z)C&bLmiL zKDGLBlA(TopTbbol7V!0c0pIT`(BM+LGdeQ-%>OuE@wHta<)9z3*#jJ)q zh~!g(j2oKzCrW=eNVZ}9-|(-TP~hjDmGlpVrt`c%1N#B=uZiO-Y2j3lOD}%&M%whJ z^`yy{oCRlYOFd+PsX?H-eGff_k)O zUoTq1xEUustE0YLv8)S~A(;BtgpWkbam`nkg{x9?Ri3E{obIa_S(M}2vlw~`+SQ`V zD|&UTX0KX_p&nLquYv|Qrr*TJLk{}Rx0F5Hnv+8)>#nt%EP#> zejl-h{{W9^rfRGmO(#(Fy1&0hQaK zrv+osAIi4U+A)ldYQTXukCamboe@ag5SnV{Hk%G41Cfs`U=+)M!)jW2mA_=t}WA- zokaj=E{6(_nV9?M6r)OoPuV=jbQ`oz;|ZjG~MhmeSQ5 zlh^4{-0DzDpdvO!MGmTM&j=2B=8(q@{k6w)}S_VlD96%7n-0Tt2dF3oP7j#M01I@|+Wnmc~wMsfA7YRIdb zO_HLaVU_0yR4afVT2OIDC<7g;tO49o<3CzaMmY7SVE`1l#USfNFdO_>q{lSkDG1Fg1;xk8 z4K$33ct0*EBP&Y4MmVPd^`HuH98<6j@69a)8dFZea04ctjC<2ZYIr!s77&=l6s*~# z6zl^}T4~KZ{pwISpjQ=nN<+$2k$@K;jVq7co+?1Cjwwe&Mm_03%>@m|y(<1Rq;pCJ zN3|9KJC4-(R~Y9$^v*NwQZW7AXt0QKaDOTRA+t^^?MaLg{b;bp=WNQ|NcF2eXfh6X z#X%}y4r%D40QaoY)C+5pymhYI!n27i(SM0R6~scscFlC26S;J{l^pStkIKAU@|QIZ zZpTIvR+--~N($~hDIz&gc&FmNCFpv>6#!9+aU60uqaFKH+y>%>2RNtTW|Qeo;t_@k z=98%FPhpyjoC;SM%Y+SXz#JOHu{$ox=ZseI0!7>FSu)$3d)%s%yP>aV4N@--;Ufvh z-b}FP4aGbFV>HH%_J(|qYIJ!3`d0^`p`AQLzG^%iel?<5S38H&s!G2$dsj!aa<#={ zJ5XH48=w`KKN{J-Oxm1vtaTqZJlD`*<$6fruD#$R7(HvK)1Pvoz~Z@<9C~}!{*q6Y zJ$)+-$~UAuJNJ$G4sq#Hp&0b0Z4DCVt|?>aJJ-ue9*H9W<7*zh>Kl;|P$TCZ_S5B4 zw~8)e*>4#K-!-#Vrimd@@{VfFsml;*uv`pOkZwtV1B%3Bqy%0v^O6D0ZCXejM;|Fr zezlK2M4`Q^cr^nS)G-1FeB!-4x~yqU%1p|%d6kj5oHzp<)a*xGcC0g~@(7ReJt}!M zOrq_8XX{?e%<${&9KTnQsvT6)`Kni_tY7UCar=Sw%?D6?aT*GTnqm8g)#Pm3x{3b& zGfcl9BYV~)dZpBJ?nHHzCE-RZ8n9!+8QAU*L$vc%tE8djCCO>SzEdvmb>-!wlW3I)OTpVa+qBJ*n{JqQ|8rNWgWb zziLohl)_@f9qM7Ya$I0}jA9`pEzYs;{>9P!SjAU1gy6ljzBiPruUm%jr!5sDD z+Pq&^gu|>|FZ*5V?YMre=(zSg{9JWRsZWdV)L{Iy7KOF^rh-LPytA2KaCwtFcfi0+>W%+b5B2|05FVu(Ta8{G5-MSqyy0L ziWqU8^oVe2`N-`+h>7(ShpjlN>sRe87F$Cz5Lkjh^r@S$$TZ1}S84`+V~Xi@8+4Y} z<{4qqxoA(9GPXK3b;&22r*0#hW17NuQ%q+bS7{*i98)oYQp|T;IqjNZ70?8D^`e}5 z(jEw@00*};q~OpvKUzlVOaL630`NN1L8k`ir2sb=qa6Fw^O|o$DFGx|JQ4@in*GHh znqOW!Py-GDqy~e*{U{iq0lHEgeiY-yG>i{w09;U~2c{{sqJf8gDGfOCDY&Eoij44h zseg`|!v~Of^{HSxxA@X^rzql#98zE~($ILMrEnIL8Ko4U5-EWh;L+c$DWepIDB_Tc zQJOKH^Z?W8){joPr94t&){_D^88iV(!l{M& zK^yTLCfX%ZRN!+>wjh8<>r;?RZU;5xr)Fw%*YsIEe zsM^y?`Eu@6(tKIu0`Ff-WJR)cls!H4UPezmzI z45^{N9Z<&PjzTZ1;o%?LQ_QJy%dVjG|g zYBpS))uKw5i-=A+z^-Cd+i<{v_*YYKprZ^N@%*c^3}sMi)T_^K^&0+0 zq)=cdRNrUP5Qy6pBw`V#lNHPx<7C5Qo zTn@DX>-}pPBWSWYSBkBUYSe(^wO7H(tYo!1A|M#4P<+F%rgzOqoE~}_aS0a}?t#rY zIAKjw^3#;yj+N6BmPOS$UTGiNmNAtyjrrEcIRu?51JAWslQ<{!s^`8dDI36Ri~&%0 z>G;)y$*Sju_Na`KzR&2B-l8=zIX_B>^)&^c{3%w70VCRw$&;sEYD4{MH1*=9 z0DwoWO;3f2JDu-@&g(!2Vo&p~j&65ngXvtCgQaGR2con7K9$$VGCgbZOxirSxgSx7 zcczb@TdDV`PZ`Zj`0PzW-Og+34^CqU%M5p`hvbV3RWpOdT|i`2&w2$*ayZbp9<`|i zdn2YnZP3-ie59#op-P>#Vtvpl17)fMA!FX8OoPd!bYA4ZWMJ`Lq42saMLYihea^!Be~_-+v`7^vr*gVwdCwLI+3r!6j1FUER(&BfVZGC8gS>fPaOvH}mGub_1= z?D>94WQc?^V#?%xT^#Mti9$%Zz*0 zct`tWDx)Qux1J^c0PEFzD=pfre2zOFm2lko`kEuMw=ON$cVSfTA`&nw!K=3us>Y~3 z=;#GfQq26C*`9Hh)6Z<-vcz{C>dNYoNV{Jk_a?1L402~H&uYuMu>^dihW4Z~+;XD6 z8zs!Cp-LdepLw_0S_+Y*0s_6q8t+RNNQw0vmiGxu)aO6s_T#`?lRZ$zNqWRFQZp!FipGpH`uW%bNE=BP1&^?}~+PG@?RV z+Gn0HyjMgtEgsVZLY#W2s&{&gg_tEE%LDu)G=^u7ErwRvSB|@SRd+-uXhDi?&aH89 z`yz*8{SP%}1>S*(!x7CXI~!7`%*KmUNcUq0+M4#sB9OouxOq@JR0Qokt24INGbht+ zrC?bG;nJ%ugfTu<7xJwM&c+Q;yKWw*r56T}=*7V_Tc!tZCavvmQ*GZ(^ zBuLxYSAcSBn72Za0D6k6t6k3plle|pjCAXo$v=GQYxiesf8!lHP9pR zbG3ho`k@~zAbm|ypW+U$IBbwJ+jVkm*)-hIV7a+Bi#3Uumbn=81B$68xv9$EHPaA% zt2;Din67Q;_tVLA-fYarx8!S>7LO!7{7u1i8f*W0o8d9L$7jJ3l_w;OxZHFj*J zXk6C5#A>J*U=G!lDapvIm#$i7?xLtUC+7Z@qd3UPrV>G=FPa;E0?r^_fs*eW-W zLmoP2t22l1O(NonOu6q$B<)Zhhng^YgH&o*SM{fd3_8_N821EoRPs5 z)7wb!ZR3g#YP*&-O(8B~F6uXW*BfUqs{7CL~JXbpz$D-LK{IS6GceJUk(jl(G*ik6Bym@kewI2C#uyth-$arRn) zejlxG+FYxEr>!72<33^nGoMPc1U_fBDy5exyE*mEYQqp#AEg2ws8_G&SG4K;sW!3s zeGNtBw>(sWFbc3L zec!D>B4N7&y&yCom~9#2twDGD)s4EILw`!mjj{l4qrFIE3$*%orUv@BVZ|h{i6hGJ z{c4;Of(AR)tUD$<-0ZN(xuJfXDqd%&m&;a&=`-s`ew1{tkv)Js=M)dE1o27RtpEe9JL^oP z>xuw7&_x9L{*(n~Jq<7rp46GCJeNHMA7zz>P6y*gg1HuH0p}yNP4<1fyr>7MHIJ+6 z@YzPuLffRyGhH+&&a{+Zh^bLUT;n`lekau90A(Z3^u<(|`Ig{zD^O}|U4)H-dSukd zGijeyIIqyK6n%{t$FcL+ne$HPCQr=3@y|-HFAP7GSexazll|jR%sYzrBeBX>J!)9F zQ|(a^QbcfSfJf_5ky1;Y)e)ow@btwboMx69Y{wbqvaRr!1ETQkD)5Kvl5<@S-P~j4 ztbYuJTMlqNYisRMlAqRjae=A#&=Q!4Y~a5m20SpJm$SW z#M))G-lX1iN<#G9c&<-T&@BA2P^2f-R=&S4#;;`8z7kDJeY49Xa&;R>#wznVbgNPQ>#__!l0BLW z>sz$UGKmLp1$hUL;bhjco(~|3^luO7!$gswb}yb)*!B9?74atBS5b;g@z4t7;iVc_ z-dH=PRyAIk=Wcf?s{XZRKtMSaT#EflJ02MDc%?&wO#_3)3J!Rx0c9UHX@~WxCHuqE z)}tqy0SrB9$lodNieq)B#(zpf9uFL1z0bfm9(RVL=PW)_evMujqoDP#V)$n^{UM?! zkj#Ja>iKRfrO$zFbUUyP)eh}VKB8046)3OAne7N^xX7m(LCqj5zZ{-%Tt|pdCZq_@ z&CD-uw!JC10?mYXDF4cSkAA&QD2(eani2+`)qm&p=lv|d^cXaR*k6!7E{;K zzSAt7n~OZ$LeQcI^Q1WZsn67oywq%PYwY)eXN0tqLKDZWM8n#jNJqU0Y_99YZ|RS^ z+W_>eHWja=wqx6z8sN-hdPi0f+C627%aY{}G@i}M~*IoUITmCZ~BputPSC-TK4BU()!)@H*w&!BpU_;SG)aX=4dFU?iA zgHaa>!acA506iGwR)y81_YomtrGd^nPzML&coGTi!Z08o>0GQathX@6%1CAd71wy$ z7e(Av#+H#<69Aqen3tECZ9Hh*y%1UVO7jf#F*sZRu$@uuS&_6#LSJfZa(C3Qb&LG zv7D(m=N^?VS1QDq_p6W$gH;!io+{J_C!f-!0&Sz*)mM=fYCUFuvfG(P;sL?I!LDvi zT=q>`XcT#k5?o%K-t z-n9dDsRM9oHsNqw{sODL{kC#}vsp%yngYhR_Nu7)W2G9?j*+M3StG4EcoYGB^?Qfu zw0#9abt|6IwN}L?08H1{FZZQm^)(ruQ`OJsO~oOkFx-2ZLP?{w6aZ$7^GQqIfDH3S zNurW~7c^&@N+=k)%>eLd{Ad`U13r`yM@mWnS~JZQPy$lXNk9cJy%dxHx#Z%Kic$K| z0h}5E;*yuO08MIfbs6`r;@ED48sQ>4Wkcw|*Lh~e;70WnnG9D#7b3BB1luE5L`NL} ztW8clo;a?IJNL+DJ1!}Nb5l1J8OK`m>_C|3p0r~W;3&laG>^)Tl&9K~fD^C1A*D2j z9qL*rZxyGbzc|fhky;u{e*C9SYnrOiXHU-FPg;+;ry;_Qd8YK{xdvnE%0b+I=;Jk# zM>wsmSu-Ae#}$l0;PkHQKM5>g7&PO-q$FppEo_81b*0-)9G_~Cb5ux}%_(1%PDLDJ ztuB62DS*sS1}M%=F9X(?2u3M(gT*<3D@+`E(-p@A>)wIK9+c?G?MS#U^L})!7b85i z9XO?7^Bhn*(ioV<7|kjC=?Kj`0F>;Kw4S}Gz;RB%H#8D)M^2q+!9Mg@LDrR96a^!b zO(z|x0W@v%cBe@A1a_$6IgkUzPa80m&odeLq31B{<)L-Qq1VJLu;jo!7B z+zBH%Z%Ryx=zzaszAY%U{u-1 z;Z-b->vTS%t=H#OJ|o(W!??#eqywHPPzd6ey=E~0&!r#7OYKK`0C--1!j!~>V2TG! z(ic6r_oM`JKoLs^{3^Ue%;ld97o|%qgrTao?7?&TS6Xk_lFL#@y-yt~lYFg;x+lj` zRpwQaOsz#X+zP}gf1042DSQJ~T`+KJq>G04#cLKKwaVre2C-L${A+SW`CsW+jxixq zo-62b`Cb+{u^Wom$GvQ64g^(@2NkEJI4sHA6}CDzq|E5QeClF5t=5$|rrVv+p7iA$ z*T~5$>Uv|QQehw*Q>1o!gpM0x`s+H8j0PVe3(_!w&T$50D>PR{^7?Pi}JKIj9u#Q^s(@rdt74 zt-H2HdiO;eLY z0?Z?VDv29rZ>?RoY&T5%)mw$zK6_F?4BSx<3_Y(HLWNQjaXwo^pME$>Mo z#F?mp48(&}>AQ0Z`fjpA|Rr8!T%G`DR~}9jcs?G_n^b ztv9bzPS+UaTysF{ zieM=Fy(ze-bQ~IC=71azH0)y?DS-E@d|oMMpD5mLaB7~>rNG@Feg@k((( z4P!_##wcn9ND2?NNC(PIGo?LbDx?aaB4bJPr!geb02)E%z78k=9<*?1pwa*%KmB?! z$E_4|j8bDFZoO#%=A6L#Qvm0sWz?ifzjm!!oHyfD7OdN!-VD^%SBQ=KLP~?uu8e0L z54};eJdutn@{ga4@!q^znlof!YcQyA!|x8Yk^#xjYUuSi3no@KX9oiVu7CYihR5b* zC{>4JU6h}?ft!9Gx$@-OoRB&7BD#ju_Nyh3%D@7= z99J`VxSu1Xbn-6;AlEslDf9El?d)r>4Y`d%veb*zRBCELg4O82=8-y#)Tl7rnqu-j zDeL!#wRObjnRPiGsR-lL)02VI@uUNa+~**WWE!k`^H!w%D!X8PYbhGUjfWj7zwyr1S=9cBS`5Em>!*wIgdHH8Jha6|78TPYK8!b4uI}X|ZtLwB{c-f5x;%T}U6T zL{Bw4<2-e!4n1mFq(lcJG{QOcsRnvy6%p@QvqUuWON`Oi{3sk$jFK^mo42(fWG-QG6QUZNAsFOXo`qbFqRiYUpo;eh)`BEUy{{UK~b*nQg zy+lu1nm}>Es1F}ni5f&kUPm<>b>gNOD~`jOg}GzUR2GJUNv95Zr0vq3)Y2IA`?%(& z&piEVDEJ*JRRbK*_7_vE@O*(}ar|Q^+Xw#u)m_A(ZX>OE_k|=P`b0c%xcBQ`fO(7> z{Hs5YE-jx)gLkBlpPh1gf@%^PrFX%_M$KON>`aY;9cxQXUEt*8=L6caPdUYGY04vo zTe;3@+$bx|zHt(Aaa3fTq~IE5%;skc#?`07nE8%B8kTqS-$XtoJpMajyg?TE+1lpV~C$Q=Q7Z9M=B7u06gIBfp)jxW;QBU9PETm0SV$ zgLM_7S3I~>aFUVa_Y1Z{Jv!8Eqzn;^`qs9ovfET-lOZ#>kULa*wbh%XV$i7`sw-9~pB+DTE<4b!zUOI_bX-hiD1_A*tNU~^Nf><1iE-q?fF z@urwa9@LD~B@$TfyK`0+HxvC|Ny*;QUPi$hdl0X~S)ax|{ z@u-;F)ZG!sQhjSF3H(KC$slAQyZ050*-1$Js5tRDO6ZwMK9w|MkSYIL=7Xvv$a(b@vuh#pfbHp6sM~8&%1z7k?@bwE<9bZG zUn+UVYF#07sPb|%(yGXRDz&1Jmrm?6#sz5&&y}sSIySU3Fg+<6#IFJW02+t;Wf7HL zJ(XfDV#-s4GOcLOIIQ+ks3aWKH;!EV!|Pkib!#a*W<%^LC5kCW1RgzU4CQCG-g!9s zR(;i>jA!_LtE#!N+6hs}=LWFvkcB_ppl2;`3YGzlUeaV#a?Wr)del?HxzDeqK09#~ zIVTNLQQ6rFE}S4dr@JS zS4@#aLUBy8oG{1ptxZPSD6OT>Jq2;Cc-GJI{{RnqmX4|iOw+`N=XC`1sGZVIRM#ta zt&*9^By~QN+dX|jK5Nw2={h@(P;;NHLZBMO)I3EDP^pcJ9QN&0u8ne%+xlKD;2w;N@ftcX)>sO;7L%_#1 zMdsMSLk~`S)woV=#dPdqF@VodD>qjmtqPB=US`2+g6i3B;Ar2KBi9we-KKg8UI(7s zMiq$|IjW7vy>uFfhNgg%6x)#U0qdH?p3ZmQ2`;oCnZ2zkk4>0Q>M-)FLl zJPt=RmvX8*M#eqUf=)k5pkF!WpEF}8J$a~E@+dJBpL$~+4F&qtWZ+T)HzbS?(yKN{ zU(ThGzq?Q|#WA6TWc}c2pmXm|CmE#2%Sd+v&uUV_72ns|oTKF|+$gGda`}t$XY!^r zh@_Ca6Pj;OY9d&6$)^WzdZScIt%{Lb(~5;y6VGaP?4F#{D40D+t)AdiBLmWu53k`s z%K(lu%_uqN7^pxw9lhz`@zaVxN(lAEN`oXS_wP^!6?;tq?+_lD=9n|2(`{1P5X5A# z&P`l#p5mF1ybgnkXp^-EB)2tf8wvNb^{obprGNp>M@r`6yV)>O2_MR}qq}9uSK^h( zGPO-4Ou0nEdSja9CboE8k;WN%gI=7QB?EA*Od7D*oqn0GHi6nE&q~y?yZ~dr zrAW_Lw!MkS+Tp!LXrsjIfVJm3Zm7stlZ^MSzfaWCbW^wn92#J2W#eFD#yf*n0c`H< zeX1Brzs;PjU4$+T03>)X=~C_leJNTXS0nSNSTgz%Km!5|F@|aR=8S?fOa=jg?M-8x z3VkNr`_KadWc2)LS{&r#@Tqp-b4ocK#Q;??dj6CwVP36yc@zkF9P>ylQ=SIfxj3pu z7h{fcW~a)!^Nwp6KHT6{nC8OdpQQjvJ(ve_3=c}DEwLmV z^sC=%1YlGTGB6{*pr8lrN$naLc}!y%t`hbyvERG_vZIk*gI*=HFC(~81$o}7s+*lg zN68uPDGeL;(x_jpUWthOYnigTakY;i@m&pxFOk>1NX-M5$MdNKV6UxDwO$}QR6#)E zm=xVelO3tEp~%3^OF3k5#|E-Bt$uwfB?%t#dRL#B;bn-R;~mbdB~?yWWziF{#?w*@ zS--jm)Yk=d9F*diUPoFaJi2mpTpJjV+@}DwdN$4}hbi;@0KZ-;=bb21VZ?xs46`KQ-)kubuJ&GzBx8wJZ!ob@4QJJ zjABKCGQPa#ooTPheH?CxBgp70p46ZwEU@`UIK@Y$>M_MCMqAhn*7Y)6Ej6Mv!{Q}V z;yXbjvVG!yrmINK2?eo=b)>5zoxiO%<#zX}SSk_PCsod4#B$Ds8acZ4827BDidhEY zGRLVs>t|R^(XMff@lA$3(XRslSEYxe1s`=Db}CIs<@Jk6BY_=;2XRe+6J?B!7Poci zcj=D9jC3`DYT>QAm&<(Krxiuc7pSj78xTOl zp7iMWG{)>{$@i+nE1qgIQc2dLV@L_0Jkw`CHapP?!KTQ-$yiqGX#=G2{l?orEOj4v zn$`fwa0t)6bJ_!b@uM8%^sbQExxrTCSDjs2M)4fFZO%8N$m>o!gV@6-5@X)FEh22L-nGrjesV|UTbe8M&l#?hot}xJIek5WBZlc$ zzgo%g?3+4ldTvf?P-gfk=t;1r!W`n#>o?ti>9;4or912X8G5hwJov%pH# zT0Hv7@gtBAF}u`kGC372tFmK~aC=lloY&o9-!&wB{aq>%?I3leB-EdcF^9DX2-}~n zUea87<$GY&GCvxzr=7P$-nsEny*7=gJ4n{J8Be8QU7_4-pqu81)*ay8oDasnRQ60s zMjMK$CvjINUUF)q_n`q!<#$F$Y*#UGHpoX@dskH`AxP_7&F~95bA#z#h7w&2Y9gT= zQ%x&Vb6v((6gSOQw7ERJQYOey#{{0$Ode`T+ia+K;N+i5i3s*9TiZXgC-0Q-I#j=J zvi=D{Ca^TE8VkKXH+PkZ_r+g24W8uYPnV`x)QEN7uJKF+5yZ>ie_Db~V)>*3HHB33 zf-_d+(yb+6%%rmSr#+>*u6FV%=m_(l7i!Yp-82rWJg?TdVsI;8#B!v%#Kjn6Xa^tO z=QWZ1t0v76(D-f*(MtUCdYWBY-KUQM)mb^@)|ZAY@uhEW=e=U<<(A-$-!HeVK7#63 zm17aAd4Qhy=~gs?t8nO!PaP`^vCmUl{vU|E?Bkpoft?UI<0Ca<+~x7@Re;8GR$xE8 z6wr#A{C;JN3gM4j^sf6@UDgudXXLI4#u$P6QW_XZpdZeXmXSj4Zk?$zX(*%yx}KnqAHqJS5@6qHaQNIsNy85F;zAw1DxiAzQ(qQVq#N40la zWAC$wk50A1_pZZ2a{7E@(A3CG*mH#$ti3@uM1AW~hDW7RyFy@YYg!N9L^GRlie@Tl z7XT48R^JCo~FE%>W_iG~U$gQe)|w1R?sA#W6pgRNFI zEvpf7rvt5XR9Xz{q9m^r)7F;XnCO1B#8FF8UDoaHFxGcrUS#_Hi~9( z)|{jt{rgVQvGGC_u@{W59ncYD(h6p9zGy(V!> z`OpqedY}XAklYIzPvdW4>F)`EbFOdRu4S-`gg&&Gr!dD}X}HY;9%KEoUH`<(74aFDIE1bTIMVOq{qwjrvX9Zr63!Uex8)Z&MH;LDMI^F z0--|6Mk$LImbk0uYN=!TRWopt94;$(!fqGnCPsOoe)R;ON0@3ZXicezl<} zxM&)mDSaYu1hWgg=O2dj^T?9#L*g4{eFk@nR{{UKLk<3MN zjQ6T@T(lB-SRfO@tD{BLlZpoHPEX8zDoD9pR7!L7sbR@{de&21x(rc|%A5z*lN6v- z0NFm^IO)wzkKGE5hF2c7A{@kM0yP-#`BaJb#YQ-%uU@pJunxW-D!1oQj1(1O?RVRZ zaaB|OU-hQ85d@h@LG`P0a;j>yqY@8lvg0uW>057P1amMOM|wgsyi_t|u;!#w^5d;t zT0YE4+>l_!NIKJ_!H*u4)1PXyM=(l2(|f6Ap3otzoMZB)SD-;Pt2>Y_G0; zYQ^9!A5X@q+X4aI*1a2F4$R)=v~8{`!~N|3wNzwnt1fZ}9M_dC%>>6jl z1|t026O2=wWd8t-E>7>QER+mpGmO^>hNci?$0z2tr)=C4IK@A{7)T{pc{G`2pdmYMLcJUQ_%LSM3D};rS_yfXrT;T z8cwu((M&>$UZ3Gj2adGt(Qq5h1A=KyB^Ll4MN9=jQUjHs2cK$|2wr&vQS#@ps0qbs z=yGE5xf$C^a3{a#UVWPp@4RxgUuMEF>^?02ilC}bmou=Nz`*ooYGW` z2U?XEa}0iU7kn^^<1X$nC{xclNIqveeck`$+HHq;IrQ`bw!#3zxURD{WqCeV z1L;(56ttK;VzsV84t~FtW?YOPdXOz?=Ly#xOL%U%gCDI5hFrx}sqs z>|`=?N@*ecy{YY-`+HXFW1p!5s0-^=nRP- zkZWXfy~x>d-0@XiwzXMokaJK-GTEq+tO)mFp^yM@F;bqD6ZIdZX3da*^Glp{=9)RD zXNrN6#f*=_tm7SOs&ae#Rgr+8bDw(FCUYc+;NqUc@iiJ8p0z0+`K=5Y6Y@Lb+N(El zRvZ8-7VA>YA~vF7&O7y~f6q#5b>g#Th-V;wjRU12%_!tlls!2$IN*9!bm0AJ!nSJS zXChegxXnyOK!fHLIXqUV!bC1VF0}(ynLh4uimbz)^)fVwhowT@dQ`+_qH%`g)@;=Y zo@suRgRLh@LnVyk+>X^a=brUmKk{n8#yZuaBuN<}r9Z=iQ7a7QpN=z})gv+)2M798 zM}z$;cLVQ!m0X+}mRv&_^{7~5f^aHcqpd{T9(nrI8X>P*5x|5$uh>TRFi0pGrEPX51x$VeeBQs*OnnM&j6yl(P z0xtIasTqs6dM;fx%1ds$pFWj;7(8$)I3d{|r9AP^r6aDIvJ@JXP8*71t}0|9PDtrN zsya^%S&5uV4nXWHzR==WuebCqjMqKkSmOHvJS&jHpsTj}nTK2QPug{Do3gA&XcQ-*~I+dXR3OaaGwp#x#U^%=k<)~rxx2l-PtsJ>zGxGU173;-15hYAKNUnpac zKC~UGEfDWeIq6rer$roh7^>zmjwuTHagsR4G|`=V`!;JW%t10w>04eMF-<#?GCiw} ziOlf>#?xIlg&!9ZMsc~h1P-;V50k`vEbJt)vzPCvKT%nCx;?bK#sas}wN~0wzz6cF zR?vfn?dw+0IO3+!FKx&AEX))PW3^IioodK!;#?l$yXhf>5B0bn^+si~8U6B&-t{9n zA>y0FDkryY4?;hcP5r%Va~{{sWcD?ua++{pUC{H4S3jv+>2hvtqV3{=kladwPm^me zu4=T>xs2zE&7B(1pDJzZ*Cv+VRaseLnSckOpa=OaaW2p@d-tnIww4XKz;{u}JknfU zq$m>D24ly$H1yFt$A#{lvRiRe{HcM_=ocSoi_S(OA(AG?lJ6fz( zXfOsa4l6yhJwZWf2M5raOb*u5SF&@B#MZ=jRz-Ig0DIS)rL?f%KJEvoCbYEeGVcBM zEK)3767RsN1G-I4%2_wQ`8LkP+9?q^U8JOy#x~CZBGeVL0cuJJL%FM%i)i zfGei(wvRN|0(M=otA7&pre@?Oi{V+WE(G@~5;6P@*1A(?e`hAx9TpzyYf|cVv$K*! zK+LLkfx-5!CgWVyeB1_8pW-}zl`N`K*5^ZiJipm;`OyM8Zvwe3J{FAuEt6BOzj-{r zWRxqcgS}jq*U1XQkUjcWO&Hr#pA|IB%l2fGJBLhGt*gfNsEH^gMo1Nlswi^vMQnqfzSP$^;~ZB6{v*?;@RV*Cjx+Om*DU9`_x$-f&8hOqJOk!wE|#A+|5D=&$qolcp1pWJB*iddyl0&C?sN_ zSqD+iYH$*j+#-!S_`Mx!c>b?V7-q@If0oG&Ln_3KLk=FxR3&QHKD5rQrYB&AsT_44wcUf z$mC)b*K+pHHCMUMBxpQ@NGf#Us7$Bja8tOTn;iw_haKuOMmD$Bxl64kOJ`+qlkeKP`z=^1 zfZ#CotpJv~gnJ}TeQA<;T#ymU^Pftp-ehb>KVECoZu}z@+n(L|J*%6(@V(4T-zi`_ zgy;FvXm>fd^(i1AlblxNhPbZd5@7Ig=~;8=(;RL`8TI0-eTG=u06LNCw2D0z-^7v) zqDg^IKx=l}#8J8g1c?W4TJmdqiK4*CIO4P;zhQzIhB@m%9?fH`LplIS-Q7=W&?QLq z&3NUOvpiD<5)irFk=DD*9ehg?F@4CxsqIC;=`b027^W+QI3t5plKoup#f46!O1rWM zqTo#?%c1X3t6&Aa$k{_oOU}GFVVDb08ekeB6qzE~5u&{&dE5 zAng4p5qded4x@?;$Q!L@3!tn=G{?L^r@5dFZ!u4PwAFpBft*%2y5Gv zWISVbYsjuVORZ`xhIa}_VT^vYUMOxQm0spnBpl#$t55^6)%?RTI{{TE!0cml#1^cJ@ z*GZ?|x&=nTQQor|+`}@u^{1XI8p7wyN7_b5Kzr4bct^_I3SuO_b=n4Njqz0A#=PXH z?Oj#Nd6A|+8uPCeY69N(%MFlwRU|ZX(=c`=h7YwscC%ugB%W_P)L8k4TB{dv<^rvP zIjQYo#KWKmjMb%#Is!#SbDL-x#|O1L3gw7(JDoL|5anAqtKJvX#*2v{Cbz!#a z(~h;DBXL@~(8bJcoSsh=l_1D!?Wd{{2iBEN4I$^&m3ePU)CWn|gHalqLB~QW6Ol*< zN6UAl19Km0R8q$Sy<4-i-#FfX0xOoZz2jIRuso1BWj>hZySod`@%xd@a{|-}m2s2p zTaZG^s>9Q*dG%f0&C;=w-be2xfHr$i#Q8O(Do-8NsZ% z{`VDkOMS8o*Gkyuk?6i0lNSu6oR#TYq;p)}fhZTL$1JtdH&fcaABdr9>7I@i`-eH> zILw+OoMf*cSCu))&3gxlV)JxaI`}&@7ldy9hK;`WsF*(kpBR!UqfBLgxCEw zlykUr&wAou0L&|~@U**i6y);4y==l4!^pyew9(e-x{btoq?QufIgc3R0Kg5xF+BC>V@Se5t7%I{F>?D=7JsOJeXMoB!HaZNPVyd{q z6IZTc@}`kG1Y#6bDKWb}jeglh-U#{GXvPjGJPHL2NHwto@JwQ(JXE8Y`qW){paAry zj=iZ^@z#(YdFkm$WP`A-x8eNWSBR8u#_R$;fUZb(HMikee7_M{wttV4_*V{L4tzZ0 z$=ia_O7fXxoV~-vFFwt1>pL1tr*VPv6{<@MT%#SpOwhYJ?l$=%EO%3+hN}=bB3b# z2i-1Y4eBbhRm-LMRe|RfO}h85y1>fx?0o(zHki@%ppXZ>M%)j)Y8NlhQhh~R(TQq_ zn1DGTdr@mD$8@=6!KzOjvJO~d(-e{0GO#S&4@!!cacI&SGpLsK9hfiMoK_9p{3NhI zWj}V(G} zMdJawRFqPc-J88(Y6`+(xYtNy!t>Ix^+>q{bt1a(&eAifv5MTET5c)icg-eoUXg$R zC}ECAS^=daD@lRr8V;{&nsj1on9$>m&x+Fi+tYym0FUTD@3CHC3&PQlG-q!?igA+E z=j0u8z^qtU^oQ{Vn4NE9&$Cu`r{cQ=vXjZU+}Q2ZR}gM3*OgA6N~wD~N~3D+BiE^^ zxk(i#m(7{vY;JS8fb41(=Zxbg6cQ=XVXh(vp>h1^8R(ikA}t{lt_vs`70CF3!MtuU zitjCu$EHRI0k-7Vo$GRM)FmE`jMHST%+tkm-WyC?J8{co8s;(0b-F5uwB`5psT(v% z$4ZhPyecf^YDk+0=~N?nOB3&{Pc- zk2I90sidS(Qh}3!Nl%RJkQxSd8dRd!Nf63L<`tUyOfM@DG@Sh^TO;^RH{m` z3~)tY>)KX2V}^2%F;3@8cpwiB;yul3>6&zqX{|iRbHAr*EhL`u8Da=Fj`g}@jWjXF zIL&m$-5ioub~xL}`u??#;QrC$h{O} z){6}@G}2Y4v~}zJsuql`CWmr5DM-a7A&W^zQ%gXEqLe9P$2B6t-`?Y9W%6hH^NR~2@p1(mwfT$r%ecI^sBZziqky+8{YUgr!!>g`U+GmQ877q`4CiJTk-Om4axqsfmu!u|s(owOrtXYbgM-aD zel*{uDLFkWK@Jqw6syG{?kE9oBkNd9qph@%7!Z@3 zfOAv1=Bd~b_IS=adR4a>AcI^Fa)_iG(U;n}h8U5@q2{`>xnI(`sm9xhIPPn&4#djG zniT#bl#cY(IIf}x_vt|3(5F06)~G_`G^^=HYE-~(^+-doq|>$!PAR+gjs|Hw=IKmC zsF80QiO01zRb9l#_kHR$lP%6E#Lxspbf@;9nqC47W`G)aG>5NBairUxX$)_@E_gI! z6qx6wFbw`w;l(tcYH;F!40GvAv<{+!#U^u11p^%^gnQG+T1KP;G3!>5cSH^| z#WeFw2QS1#aWHMP$@Apv+#|_?#ci# zyjN(4A4>C&4NlQtY|7!jZ>4%HXL5qwabE+Q(&Vor*TXx(6NcxlE^>L|n4ob=aqC`5 z&`F$8yNX~v=-tP)07#~nb~90_=9hL4tt$Y_hCWMUipaHB5|=x+lUrEac>DZfURmN!#^PrF^4>g5`Ik}Fq?j&O%8R2VC451k9SyRS*)6%;z@w#b}*oC+i zn|zNuM(n+cB!ESW>P7!At$9wBV}+$T=%bTYVkOc z(pr#M8oc~BQCXI(N};V5KPaz^#l^;}N2^a*il>TP68`{s`Qw3_YMPz{wqe}nu!Tnk zRf^LgN%`(NQZN|BOQ?oPgB;XEQJ*>FU^c`Pqb~fIK@qNyW2I> zgr6l*NnH$8#@>5#PKe?2nnlYlJ5Vwl9M)KvT5NG9ZX22b$)>sazX~^Fj%%93B^*-3 zdv!GsaC%dra^&q(`Bf-M^Z+9aPfvPso^U8JIVWl{_oplplbwWBdm5k0E0Q@cY<+5s zCo7M7yoYpb52aIxeC@}2$6z9zurpTBd6w86YQ4hce!XgIHfDi_KPuKe0M3SHd$)~; z00z3>~!W0xM#tm3LcJex9``Y`|A1r63@QgDpn+Su>g=f0&Lj z?M#urY>`(H7no)adG)IJQPkq6gA!Y3ImoPOUE;Ypa@pt)YVO0q&N3yMN2YxZO`qM0 ztLCdlxXAXYk+&sq$~Gu?Z)$Kk#X=4mpPUNLz&VaOaZ)kdyi^3|H7fFy42+YS%Gcua zbjRa46{y@*OZDAm!>}FruIvo?D@Btvba+i@b1f)6>Ux>fC36Aq;}To&k0Juy^! z{{UM39-F*VJZY^*p)~&h*Xc}CgHHV`WI-E!>}Q%OTpaeM=l=lLNCiKI8Kl9Zy*q%k zpi@Dm9=uQjw>YF6QuUYR4wvw_D!S~~k?;y%20tgvxYN$569)KagfT4z)JY0LMx>06RJ10M9l z)}=ppoPHG#N(3K>%^drRPtKREA&NLXXwFFV%_rqYZ1?u0GTieah$1dMYNtw3$j7B8 zeDtIN?fj|AX`T3`UPS;sc^KxR#t&MU90S)i3xW?cm;fK8C-k5mDG8~#>@IOhnoM#2 z6rCvrhv$k7Go>jwH8&WYXgxis;*&i4RDcG-9Ac~{0`B8ARFVx$rz$f}8i5>#=Iu(S zG?MUWLUEcFj0q^D2A4VSR)hwS()G+%~wD*>?GO-dgSq1sgk+qYYx!l5T^$|mAx4GRCC36 z_?2lIM03Vo61{k=m~A}E;E0@_{{YgqRZGXWceZNG5G9fsbBQueaqC7KVx(=^Y5rZh zDJX-|tjVTItGYQA$EU4f#d#$1h=Y)ES{vlGKn%>w?_HNODP5xiK^Q&#t1{(BsP?T{ z%YSqvN=r?qIe09JLQVs1y_T5PyQJ&gh(a7|4i=9olAfHZTFsIjI+|Fb#VHgu^D zGsjwr+yV_udiAb_vCl2YopNfcjGmQg{{YW5UGtiW8bpk*rB{9%nzAYh6laRcM)4y9 znsEGa?MNv{H7KHJxIVRG6<#hXa56joRkARVG+nr<+nRzgkHfW24nW0fj3v1lADvfm zhUr#cimxEgZoTP9xRJ1^+&|L^g9H=!)`-SLPtu`mV?AnjIUk35uEXZ!RLHoE z9eBkx`uo$cah!2YbJwq}W?Ca4cLtaFQUjBbOVm`9Ie0ZVIqQK{*Y8z?;YU2xM41vr z%XOr*1)1DcJ%$)|%+$Od}; z2D3IpdI~#G2c<7lnnNC$`U;!^7OSDbsqs{Zks@d7Qjy24M1XqK#N=kI&5^%Om05|& zso3YOM8o`wmRv>>a6#)(zZuO++|wL;ii1Q(I@5szwKo~1?Lf&CfzqY|tD)!GryPt> zBL0@;HCP83Z z`-g%zT0w%sk@M^a)|eTU>$1ntxfdlP017RlXOnU1Oi*P59qUrwAc#2IkwLs8cX3GC zNTeW~Q`;b(X)}RA(uGhlQ$iJ`jUSNA0jlf8O`IqoxXABTHJxI6TlKe8%y=0gbDze#mdDCfZOxrll5M3! z4aib6(T#1JNF#%67zx`I=J%IZ5yQSP*&T34O6dGCsa)MfnEAU?G99Yu*0;nN zB2vTn_SY+~=&`Mt5ezUK6iVv6M-}YW47O)$`U=I0x2*X?7_yA*)%aD8*l4-`@iRW;mu{xvjt1Yxn74HZl1#yym0 z?&I*NUc&~jsLwggI}`(@2^ni^x4A!Bdd5??<61ib#V*0=_)toumc>O6+N22i=BI2g zJPiBOm2!oLE9;&pD{iHKEaL@@LvbDI-xg*Q7nX)sGx&E}-G%Mo%T#4mv z;D%F8MYEc=CX`c7M;u5=Hx5AO>soN?F6aU%z~i3Pe^>CsT0^+VTo4aT3eK^$@|$a` zDwDJm)~UkC@s>5IS`2a2E_Yx?Nj(YA^UV)tl^K^)(z)k#`XwoHzHeis^yp)OS5v zZBpUl32O&FtWR3Rx|dm*NZq&8VEnau+fhGeU90>!Jn>M=sqGyz&o!ew`)XiMrfM@C z&2#?%eAO8=i_jR0nL{^F8-w}RMB2TuY)GT&N&T&AbMl^kn5nSNU;7H-{`)^ZoKhVH zBU~K)J6BUCqYEbsfGalc^__r7$r$=kU@+yeK&$}z@ruB{(^GRW7|(NET+&SZmR_<_9T7WVLN_xg?p{t!GwkYqdX8ZRDZWM zzq=j+p4`%7Jq@(IIxI^z#UruBX6jnatRu;WL|)5`S10FcEgtFa3C}oQDj4*uoB0@w z;QG=7RzqQPAa`|X4;gZ5t<%}t$B>K;GsQ|Y7_|7BSzIwAq3N3D^$X@%b01Eaq%>q} zSH5I~M0my+3abt47*sJh9COyBx@47!C=?!WYP!M+;~720BcW8WqYcuS*+&Jq%{?@q zF^@RUJQ}2y(ka}H$mnZI$>xp5=KKXAN~OzCXmdyh$}l}mbXrt$+hJrFB>otx)@<^o z<*R#&D>LT`Gn`Omb2r4=%GM1~ z`xFw}cQsriaQ2+2*3y!9DRx|!BO}(kNW#r$$oaq+1F1E~X)>E-3RfWVd9IENfWQ@E zGtU*)m5zBkk+eY~3!31c#Cnwe6k*@K(noPz<=+b3b6eM}H#Remdc&SKn|M!~9OAX6 zj(Xb}56L+7rXG~%7-9`Fw>X;+iZO#u#UV6=J_sbanPP@Ekclirn>nvI(n>p+JC%`!~(Kdm@7J^uh2Y=blb2?Uc$ zvE=vTsi%2l_596K)Gk6>G;6~S^bC(s)I6mr3HiIWYZ304zULvotwz#r`lz_d(P{SU(l7z$ufrTMoTO@}zr8RF0mVFea19p%>Rmc8tJeCy z#yij)@seu{x#&r!2lb=}Sek?qbLD_)K_m=5?sHtc7aJe%5n2m&I%lmRn$9hcB$4!} zwr)Qojic1nAv!STkVz4K8w`DD0h;N?ktjdJ4^O3egWQq-h5JJCW&J z69KrNeznm~KIx2^xn-*YHcg*m1z9(7vgKQ!dgc#W0AbOO(uV?0fwcufcQ~n`*3uqC zocfC8*>TdF)2%L0JqpjnJsBm>`#Z6U-?H&a2Kk83vsaJ_8G11lD89Hu{;{~}%_|DW zzSww%JB&KaoQ(Qb%vyvO1LoS;>PJ7FeCGzab8gG?5Es+s{#DRf_~Lj0551Sy(vYls zMAo*G{E8G0TF$xf>{Ai4LB~N{Rgc67ShFFOmuNMaE$T-mMp=DFN<%m8@0k>WRNh-~r4y)0UUfp+g3 zea|%@chTw!$Cm?+^nYnbkgo1olB)_^@mM`80jC?8s^+J&qDv&;`-1$e#Z zkFRFjsT&39*9Nj~{86Y(*p5=8uV3?;c41@NFFaFYXj#@p`F{59YXejGhi4NPM>su` zy?FGOmlrMj$()bwgNlHrdb4rUC#60>Jqr8cOul4|1G{{@DO1H_&Ep&Esd2b+IOnBu z{#ovN(~+5E$l%lD8L4rtUdo^A$j4$&<5`567?&l9>z-&XQ4Pa5dVSWV49N-bfYovlx)bm{RnntpX!>1sc-Hug1baCrIi_>8&UH5<#SBUt6 z@#NIzG7#MSrCSEQXIHvtG}hWl9+l&ozT1nZa5gg@am{HIG|O-u(2Vn%alq!GvSJ_$ z=z7%c^)$-4w`zf{k-fhzb>52a|OWBdO0mmD45elXIiE%SDamtayIY?GlUv z%Dfz&^-UvrVN8+tM{4bSC#EcD7%0niKK0KirfW{ChQ}e|m3=zn9F6|~m1lT2Ol@CW zj(G;?qkLC&NHd zxS%Sl8sl%$xf_^T+Tuj*oc$}*pHE5T8;RRo$BDcyv6D5s9o@k>CbLFo4Rrgh@J6ZuqY;Zc(LxH!c6}hgiQC#5X zj0(eSV!Ek(A}gQ9f!36YZ!6AgU?p+JI#fpkzAL4F3z6aBs660&q3~;!bGkwS&p50n zR?9-7u1y@GHp=y_n>i6s$nG`lrEOk0Cy&;-=Cvq-JGPC<%YGGl4M?<$lsNBMUS4y}U$%o{hVNMcujYqb zftmy3wlP&94ZGXDO(cOS0LkR!jOMD3nA2o&l5>+$3%KKASTV=*$+I9G>!Ldt%X7WbBq?`p;QMB~2j#1W(-<>C+0V=?w%l11`lzpx;#hn# zJ8*ACikhr`W|cm9!kY29#@S?E2v*x(({{V8rXH(aH>fE~>xA2kNKZ6y-2Nz!7_>zZ z#DI)~4_fMcJ0>sSZsg-WwaR5fa(nl#lShBvM#CI1JlE7>73s+wFm{qXX%10OwN}*A z%+uu`?3$VqS~X+bQrxL~cU)v`JXhv)-?PO0&t2+|o^?fN^$Ue=&TBSd(zpCc7)@ez z+5;1kN7k@q1Y^B^=YgL+2(#yFD@~COv>rQBcBMS?U4}!{E@WVFwX;}Pjo{I6(n$J3 z(f8Rx!x$^nRi)`!nlzqnk8IwloYs<@j@9^1We!YCrLljxuFKCvB0ZjX58~sdi&SjWwN|a0~oa%oV6%GJN`7_IO##;99Lx5ykQ6K zjAf{g2Lhzd1`RQX8S6tuCU06D_N&hzRXf%F;Um9uQ)!L9-1E|#crr(|e6}t&s?T1N zybgBdKw^7VbfdWyt#r6=t!2u*lUN!Rp8~SAG~Eg6J*!oT=Zc|zyQ4VfwxaDMO!hgl z2wIHi)~1kQkF`X4SFUrh2jxmf9WzJ|H1SD*ir9^@)}k$+YLN~y4KU9N=Ogm2c2L53 z?@>y_H8Hw}(A8;JGZH)0jBn>w^vKMboC}Qn*~hI@&MRZXarxTB1RhZ5>(-hEclRz~ zvTk@)?_Ou9FnhN>vTM>cXU3l(#s=PVUSl(dna`=Al8D0PfEmd()>@A$#W*0~b*@?! z-EkQI0BBcPaD1y}P&y8VkjpW#F{wRGO&=9b)=lvG`_-uVJc^+g@E#s=E6??GE2zny zr;}a$JVpLB#rTpinvr3^VN$^ur>ztdlSxuoQQnF%K+Qcm?&96Qbft%-Uy|bPa6(#z zB;?>^)qNe=0VAydFhS40bPI4=J){--9&3udMHy^&(dTis%qwf_jWS7g4d6MHC)aOrrs)rt?nz9I_ z+-YUj)-E_dL(N&3$FX(lhnj+0QlN$$4tms6>(fZTA=~SUqWAMVeD25Ei;RNxS2+Xn z6_X&z#c0nsU{6n4&XPcB0bPeYQ)%Sn@F}K{#HXScIHvchp{9YBqJ==|Qi$0^#k+e{v1#H)JMIKy&<<*gUC2f^ z@##$$5B=jn8ZueHhaYKT--SfcLIz9p_o^mL(?g8ni-Dn=ao?Y6UpfUpcRx{@q8mI= zTNGRi#^y49Skz~}DW>a>xTEl@CQNkVnq<#)NYGxO&k`SCJLQ06nu%O=`)WbM0Bv5zb#B^Eu8>YR_ofcO2H`^kGWmbL&~p zBSzT(epT$y_zYP@f~|stQiWsMr=C}khHTV3vMXdD1Ds@iX{R2vr2hbsNZo0GhX=lC zryjK9O(PX7Vh}Oc@urYE^GZf(dXIX_MI8p1b8fgKiqe0()Ye9j!^>6ALCtEjd7uXNr5sapQbso~ zQANN`Dau!2rsIkMA#vJ}0UT3E?@PE+6N6L%ng<4q=hlpMpkn%SKsoJ6+K=Zz4hIw- zX*>1JDL9}61M#OJ^rlj&!9M(Y=4xdwtT*rZc~#Rsoi04T;N z29WgPfs5O{A>%Z?`qB~j)P;veyW|3yDtU7-BLzzK~Mg_oML`;7=?xBTr=gea|iN?lwUo3OYN`uTCfCWsmY5RZF z+!DP5W14^45b%~jf&5Z8_*bNIm#ovxiFSO$rxl`YrYZnKpQU8m>NkM^x3jlZ^vN}3 z-Ro=)-y${bwmxgkt(L;9xsI4(IaQ0M-dM-Zr=HlS#}vhe(7@-Yteu+VyvcjFK8gqQ zrT)&;AMffiuqUSMS3Aj~-sSyh+rPDvMNTqm5pFT_OoP_528ixIdvPlUJsGo3It{5m zIVbAIw2n_rZcD`$qg!~V-uJKt0~stj{&bhRhL*$web1sHG?D0*BMKqhed@yL_K^*% z5|31^Gk1mL6q^?I{Dl9}ZbmN*}z?9=SJt>xm ziy=qn+N7TgZ~*9gSHQZq4uQ%spB5hm=!uo zNAjl4z@?OdHV5*gf0=5K7OY=%TYW1pQeCo^0~tID(6AsmQ~A{mRJWQ@bBys_*jZZW zmWZO5?EBwZy#wcu=ULGyRT=(uZU@6)@N-+cL)}+rB*o;Ouk-1C|}sOv?*GfoDYC>YqDV6Io5zO@m+ILH+6*gGxTXoeXGB z{V3zsm+_>=KmAoB6dVs)F+e!#Y28jUNC@%Ay(m1>nLX(TOi%*jr(9HWdeqD^GHNLY zG^eo8z<BLU);He#y4=OL8y_*C|0@>xE1l}8!Naa%&s8}BGJIEf=%jAOnly2KTv zQy2gqeQKoV_ie^bIvSql?G`|t`+{m03)wL&SA}6uRg&97*IH#{4(wgd4XCCz6YubUs zB4s9|1Dc65nwLF4t#m}jMVJp5?^B+nRakgE>drZ?g|W{q#xMl)`c-)c&EBjq<3G}% zkRM8xTuA=_&ourjhhX%RS@C7 z#;pQ&_N`)LG3a>!e=4()fzRnxk+5_5;;e(7GDU3@2@O3z#;dsG^vzf!E9+1{dL&dx zhB|kqH{I(_!N?TG3TZM@W}E zR%XU9Iq!;r^WQ&}PX7Ss6$|isQe{Ms@cikFdW?0aoaUJI28fI4Ksi0BPh1L8NgQ?h zQW&ZZef^DCP8O?zaw=p8uRPEq#0|FU78u6h57V0UJv8pLA2v<{1MOZ?a#V#RbmUj4 zXm7s8GRgtiI(Dyy;;MJ$k?du!Mvn}WlbUE;upYGL>r>gqnSo)zHEAD1BK57l)L)cm ztz8On=zRr5e|OWIcBEH=_)Zutp?J~qdXjpY z^F0b_Rwoa*C-C;JgGjo%v(_S-DG!pv5(YF}gU~f4SYc^E$X`n3to56FtCqJY$m)2? z<8^e`sx>V*qCYLjuRVuGxrbOlQIrSV>{$Mk0yaEHq$SpwD}2KXkZZ?U?QAbu9Rb>K zN3DGhma)%jVs-gsUiIa^Bk+%tsJVycQrSMW6OGQyEoBSFTO3W@#CK8&5jKI-H3Vu% z;AiPwj2;nZLe6&o0J23wo*qc0!ZMMbaansNdJ8d(J=mk2NM?PZB6cm@4AjqUEC6}2 zNQ2dv73%sNdUcd4jEYGEsOeo?x(1!9S_cuUag2dg?1e1iYvD)FvF2F-!@=6s64y)Yk|he+7hRF9lUd1->ThPUfHy;?I;xU{uSf5Y!gwJ z%}u4710Iz!E}XSAY?vtE@OxIo7a78wWqm6y#Rlb7Bm8S}2-I!u$9mwI=|$*B*(z~d zpNNz)I3pm}TOxp`p0&$sOO|C-9WXQNQ%~X)*`ML~W0Kco$~P|rAEi~+V20g+j19eU z(x^=L7H#s(OCG#cIi;3&V(v*j$7=3JG@0oBAG^1{)6^mRykz&Q_Zm`3^B392BOPmv z@T0my;kxe4cNXrG#t^nxRWp)Xln#?_2>H3BeLC4sI49{&)NC$Sl#?iWtdpDCMx_`Zj)Va8S`DVCU%bH1BB)&82Kphu`Y@xG(rPx@L*18nbtkP8vo_$uS z_-+vTDwgQn)RO5c&ATTV=~N?r2sHc93QB;tLNF?EpaL@#h(Fpj&Rghd8*e0!b?aIY zwZu6-e7}!1AY48c-zv4u%Ce5YV1GKZGg;}76p48Qpf#S?leYw%cdA!1i9Yc(hGXj2 zvR}$^keu zlL9+TGVN}@rmp>-L|m>9J?f%HV{D9P-n8wfblMv~g-FvU)8#Qpi8FkxdkWFit_`)L zo#b(heQLalHi-^0r*=6dQGoFA=Q zhA-WPWyjL0-h#1_*FCGxd!DM&Co_ECe<#0DRgL0XS-Oac-PDm*Z$Mc-ZZlEIWj)=9 zYgi|Pkt2AgEC?hPg~TO8Lf;k_X==zQr^G|kCxPipL}CE6K@zyql@ zDczg3%LAU(n5E>v^(~soV~$2ES6N{_!?-+(#y?tYP zwrhLCmg&8&WKG3>@3jLuSfkj#G0uBax^$pFoA-uADJSXeP|FlZyQ$mPvF4zVlB894 zC40~!_n10Rul`MEi-r{8bfoi-!ixc+xG~2{UCKc_x$RUw&<-$opiP577lfGa&(f^L zHht?P%y(lIAe@8O9@GrlS0}&cPg(HTagps=3vdV@HAp2MS^2*jKx24?np>5_t_P)a z%z;l@($ua2xNtg*4EC(!xvRDdL!It04r$Dtg+3^YJx+^Sce zK&Gzf+j16D>J3?BIX={eBaW3W1Go)B^%#+G^<_LksvsDgjCyyffhaNKy-y(SXs3y_ z6&NyP`qTda;V8f7=*Da#KdJ?P{SsC-YU5&pApxD^xlhf-mWKk??O3w&dq zw2c-!Q{)SZ+Li2#OI*J_vT8p%QZc=UuwzmzLxWNXxT@p}qPEiDWR}ONq}h+d(ybWw zU`cWz+u?eA>vl@uHp&&E;;oT(uwAA^JP?V&wArEsr>1iJBd?Wa`;I{VPXW4 z!k{w|fnJy4*o0_+sOG%Oz;cVLt8|m*T#x>}dvaRE3n@hdy>k>^j@1Y(S2-A|5+qTD zP(7*9N%Dc|Pb6fIT9(E+aJ8L!o?$KNSIE!!RePV3-QS=c&lDyWIK59tjhah{kcY=X zUQ>Aw+4XCP$RV?u_KV45SX+FGfR3fHURUBmM%x=TwBNckZ`^AaKiNOo%!n8teAOnF)BUmHA#X=aD z_RVG@;R=!90CC=_%;fzlSC?Yrxu~O(J>R|!k6}_Wz78@eo1+bhaBD@L)S(HS`_&tm zV`RuVZ)yNz+a!NHZSu7(u_8gxRXCg@><0p@MBls|;<&!*2FT|Uo zY*jEYNFx<;(qb8b9DCJyMka3c_jz3IczDR@M@_~JI+}UwUbRDpp2J&_nuxa@DpmmT zOks+W(V?Y2cPHsqF2@<|RJ5ksa7P0ow62#cUptsa)oyy2cX%A_*vm2eGg(vj?mcT} z>}5z^D+UOrJRj1A2(hO}=3mA?8s609+ZH;Uaqn3gDsR8f_eN_+Sdb)PKOE8qS<HD#OeQQ$E&gSfug+5XIXQgr0p()Df?V(yR zj;02xhs<57NhbkEdh4{iMz_;dTw%8Sz>2eNpxZ?td6-Qg=m_9d=~FS0#@ttBIP%8K z_|pN)fk_}BW`(E7GPHzKC(z=M=N)*d3iD0JGyubz zFlqaFqiLW9;--xH(=p9S7y!@&gm5ZLcG-Cge|7UsJdTu$%c(qodKyd*O4HmunjGZ% z;-s7?9XizwA@gFJPZe@=}9X;0FTxIJhlfD@3`qtjuu=nj)8cTlsqMlDm=>XilGh8(^Wg)7+HY+Du2QiYMirCxp zVzV{0#h;nS6;xfM49GmTdsI)uP!2%A;*t7Spk^<6G0%EI&|;h@0eYNL5ziEJ){`gc zRdEZ~){u%&MmfzVQ%>LTPr}L>HZKsh;9VvT?0FaT+1veC9k~yU0 ziej*IJ!uIvcgIRG$8W-z!jAn#1bfgjXt)YF?@5Y!j-r@PUPTueccuOwn5G#N9$0>K zd8j{#QFIm@GuNP_@aNi^g`fRgQa}5vQmw7yFxz8td;b8dBBz-Jg#!ngV~(b;MWt#| zk&79Ar;4(CH>tY+0IH1-yHvW7T|&k%1R7E^TMOY$MTaxnC*xLA!V{61FOhTo(VCZ9 z9m?d9&V%^UlZxrn!SOc_eKUW$wPidXVaDdVZ+zBo6HRp~Qj_R$!NAQl$fNjx{A;?8 z!rEj_pR>Dm`P!_mkEKPDY~UW`)VyUhQlU4{^T8@-mg(tEZRZ6NQ}j&Np)7h_Uocx0 z1HREuI-P`H^6>~i>@I65V_;~om0v^8658?jOFM=>(VDkyqv~?Yx9n0N^(t$$ZGONL ziR5GGqZJc)j?D)GcKmBUuP(-m16JD@F?e%VW07tY1KqGqcN!j@b8l#?c`PA-;|R(Ucpc$-mLnerw3Sfaaq&HVeVIk)N}w)P*#fzNpvOEk&b267>}Gs z?5HX?k5+Cz*&z1X1#7gMKZ7+HxY`cbdU~3_V+GKcQcTGjUE`AS&oh6($Q3GS8@YFK z#B~gKtIa&G&dht}gn2XkHEIz;=4EBjt+?OMu^Fl3(QLrMA1L(Vt}gPRlS&Q`tx$*# zn*dR;e_BCjY`iu;gjJo*x6-Q5miMJ$5zA?22tHUe=%csV07Uv#Db`nTs^nC*_U?=c zeCO7f8YvPe-~sqlrM>y6l>)9ansx>$fM6d=P(c3x8g6(r5^?uUASDV|cf}^!bZ$y| zQXH{7;+O)Bt)3~^$67Ig%`V*c{HOt+tr*2WF^|4+_2Q{rY8Ehqo5+ScZlDVcbNpmd z#xdNtzgp+!*5DHmk`_^pSDMnZylbV%M^TLY%ZdQd&pkP$&&}*$4Xnlx&i%b<1+|y z;u-1D_y}3DnaviA1;#lU9cmRIrYY9!1ml|F=xR@TnaTcDm_sQ%5C=-uzFpf1B}aTw zslg0((a3`X+PXcmbkqfHZe?#IdQ{=JMn9!j;CH8?%44l(VuuI8sa5hSwsA_W??)&W zgJTt8n7$f zS^`^E+c4@WZ!OI1838|DDmZ`>F7H~>JmVZzk&}+7Mk_?hagLOzaMfz|-IM3f4OGVm zu4rfpTZ2qIRE!B)ZzBSb3a6z_ZrGBdUOyUqY*s}*su&j-dVWjGI5h$U{r?rzVJP3?{bQq*mQZAm1%&dC?53Dk<+C)Mr+td zD-u9<@;^F=eidQ4Q`_rR&r?$%3Omz)$;VHvD<&<06x>Cbv6G#Oqz{fPvpIQKRc&51HnvgC=X{<7OQ9Xc& zbB>g|X~9lCYFNHbYZ8bG;Px!6ZA(9jFnykx)s|3_C51Z>nP(!0Q zsR8^d739>Q)kGMp_|bunUuspxYE-v*e(u~3xvCKlT07I32qaP-X$Sz#CNL>Lco;PKR60Yk-_{clb=#!AvoN`?q(-BHRv~TY;8d=nK^lOmnS_d zbR0$pwt221*7c;gRbk(X>}~#Qb@jmSK$z7h%;T-}mK814Af;Bn1##KJ_8WM>AgV4A3$8n~n7_pRfx&n?Cgfz4N!BaYQOaC&4^ zG7O(eOmQKor3V-TBBmmulkNeE&6~u79kEUwsl89VIDT~ogVV9ADa3isDySzoB;u_h z%8yFYCNmzrf2~?xP#weRRRQOUwH`JPde$Z~1DsS3-!(ZE1fHDG!X!ZCnqzgR@to$G z-1Et-*{UGO{5|L#;Lt}s%_!;q6$XGf1KO=ZaJlsin4?i;MHNA^s5o)6{<0itb1gNfxtC8bgJ#p3K-x= zj&LcGWO`G{`HeC0kF8|Qkr`iVQb6>i&NIyz$)r%d#aTg-z^d8ir-+G8LKm6U-QjC<2?mV-raLhx#~JnVG=JDeL|;*64qwL8>Do8K-fA zKUz#=(vFmh6n*UDBBoDF@lXSbnLh0T9>*x%{!?C+;mJc-E(s-9w_5X88`Xw7*P(bx z^J5>(OKdqkGhZLYFuf$v>SeOkqsK9mfIkZAd@G?zs@^Io`9?z@O2D&$r=4R&C7kVF zt$UAyyfHSFrL4gNT{8T~7^hAhS?t%Z%c40wN5OMJI11o`I#qP=HQmH!Lxli!#d!fQ~=DJ&@EM15kTR%{NTZv?v>V*{!6tAbdjkM9OU+*T&7rN~=) zWx37;UDG0x8*Pr?g)QfXA5nb9D z^zslDc3uT>cDgp94coQP+&RW`n)H|397M4B61fY#b|HH3x+;R-D^eP4$Go+8r4sJK zdj9}+y$`}^GHHX&R!~%68t0&v2==thtcSL1v(lx8TQz7%De5VT=2wZVbt{L4O9#f& zxSaI%tNL@!EYMtI&d1G#k8)~Z-v!FYk0#6%s3s5Itue9 zysZnIh1Y}iNmwCFjPT=vwV@ZoM|i$z*yp+)wdpH@2YQp~#d{xxYNdue?uuDMS#-bKy{7~;7*;jo{VBh=K+HWHQhG?mh5w+=z9>&tbKPDWcC z98^{pyCm|M;2twt(#5_$x%V}ZXCrlCo}y1E{J_K4G5qZsGDubH{q7!!1Yy89Aw- zIeuz2ZYpGtIB$9Y(sBeRJPcyF3(Z1!uHPRroc$}J)GmCxH9&KmWLGnE%jJ^X`cMU1 zsnEx?j5Bp3*0V{$Y0~NWMW;yoq&BbZjzuG=%#zK*kOw&9+HPI7XosjlZ)YnF~(WGW55CM+W zGx$n}#8ilUnZV6a)P@1|>IG{HNkPK>?DVSIj+=4izsr}vBNgYZU5`!Fjkh_yKSrNi z)QmA9Fsb>UHSAs-(RA%P#cejJ0AnY;a#{;p>2_ywkon6HDr=7y3v84lk80?Sh~cR2 z%x{Xm7`B2Bwpt>oP)-1^9AzHW>mDibQ|kJ2!dDxYk}Jv_Y-XTqr&i#f#+ug|Jmc$Ha~!UniT4BTO)u|NWVy-XimvmV)44v( zywe5#AzAktu}5@N&!MR2n`A71iMXtmI6l=#O;~)>nOKr}J!%4TK{S;@4A%FD9Fr;% zNbD;Fo-3#D-MLG1D-rYb9@Lo8&;|KclLIF|ohqDC6Pkj?FaR2fhcz)ioYZUwGzhNa zf-zAvWd8vAs$#hvIHn$)XOZ53E3%)ZAl^SZoPd7{ZU!g;f!$7X^{G;3JQ`*fGy*X| z7E(?rWs~(ntQ?~O@DNj`ACYXqTBhwz#e8>L)uU8TfS3SKmNL5p> z6ai31$FByYNK_6^Y0mjLU(TAKvgar1NMbT3dx~k>O#tV)`q7G37!aiN#W9kk3z0}h zDr`HEZ2alUg_v+D>ws!_ky)vOV+s?+Mq(wnAEjHBN_{FA&T>yCnKvTxuzFL1RNemW zX{>RIU^f`eLPiMUq}%`;^G#w3p1)c{78MM{{{VKNlx9;?!b<0@R(8vpl8^(BN^oF1 zR9}rQa5~Z%F7t{Q<!m|J#&uLM2&2NPDwCEI@3wr_4cKXCXzq~1s4KKiAc6)Ju!}bYc4y7Mg>nI zuWC%O+3Zux8pT#Bde=Q&S-m86);AYH6vpTL4RrQ1YOKMO44UM8KXM&_Ex_YpuTjv- zOBf1q$7e z_->(fDJBXASf8zW%#z@B#bVJ&(o5mVGAixr4OG1Gj+0`*OK_~-fvbVmbxEStq={Uz zNfto#`d6OaOC*<4B#)2@8!><@DHe}#xcG%;5P1baJ_9|0N_`U zX)|wvOH+c#z=Q2xtm-a&5`4@qBj&J_nrPJ{%hy}Iy0zHzF+Gmz&x-2mTcs1W@HhuO zD!!XPm8wY-@T|mb0SuME^Pi=2Jrv`&t#r4mx(D>fKGn@0 z{+_kjM`IEee?%v0$+xeqbVgz2^}+V64HiJQ>JLm-q00^iYnFSGIp2Aw zB4K#zOoU!3OD`7v@mYEJM+nfywF z_mNBK`q!I3PfGQViBOi)QdP*?)Z^N`o$yb#EA;Lcsn3FmCA zD)g_WIK=*R=HU9`n@&0HOhY@ZHtn&zwkj_-~O3hcaBADN}IWA67A#Kv~rA@{GTz|Wr!kPcpHTmy>OxaBe{4lX8B=zG@do$w<9er2y0G>+0e94pes9oXRd z)-}T9oL2SN%Ms~Vw=45EHRPRUa||C!uOP@im1af3s_)Mf&@-LX6ZgdSHJ;-JwRJE& z-PM-on)Rs4@JBqBq<`l$qt=>uIiP)WT3kbzWrtd@Zc$?Z#+mwaRnN6SF~>EGhD~*J zl13CL81||Mtto8rO#-thU-O#p{3#!mrVMpqpX*!zQdlVNabBUKLLt)Q$M<+2O1Kjv zobi3gGKk3P0Q_r`>T7?+GVjzjmK<|j`5@9`TN_#c!^p&YW}U3aH|-rwOQNBM)V>BA zo@$1xCi(Jv0Z0pa1fM&mM_%>5j8(Eadsj1|H~L{8!``|)vh$7&0BPDb82vL@ek&X7 zbF?3NziQm|>M9QrD19;5bRDU&BhQbuHk^GaDhm>pj;9rFD|pJ~hJPAhcG?U{{gi~S zBms)qhGdO)ZrBHEF+juumyzp7Ph8Q808X^H&w4si&;Y%9bg3A8oj(d->r$#^Kl=2< zRx8h?I4bw%oN0{M_xe%-MP*)!DSXfNSMU`9lA2^E+JGjJ@;>iA)f$hQnh7Jn6(TA8 z=mJa}Q%aMZ9%@WsdQuKe0Cv6}aQ34kr&`sVF2j!1&iG<-BXlQ?-79_0}!H1(%v-kVC}5S}T$DcM?U99D8=7PQ92@cM9l>#ny(XhF_vjj()QM!iWj-P%XG zCHJm6yOfH|xNd5mtbo`!KXk8e=UVc_s@Xgrde78RL=KJp(m3zMC_P4T=*JYSa=zl2 zjLhVDZ@Zj;Dpa+*lz#5c;fG?Vab5S&hq)N`{VDm#s|%y*t_I5q{{Y}a6>>ieYYu>z zBahwR6uqQY>{c^(V~TEi^II$7JxPzxacdvd^Hay*+4$e6$NvBTOw#ty?pL#CJ-B9+ zkSnNP2V1ZD%h{O!0J1So9u(8m^7l{v^8r)!nro=lDL#iOy+?o6kjS|E!;aam&3rke zAOyxwyGc?DJr)o7V``_>h&2xxO%|~AA47!`DE=W&MRt57Qn5aWYq&{tSV#Q1jCv(V zHJvUtA!Hx$6auq&_#;(;toj^iv%GWiS=^tZaZ;|4s!DJyB_8ZCU1NBL(0$)D{vcE> z;#31GZzFwPrREEwG+AwD(7;a(YR-9zBp$5wI(SP{WAj{Ep!Ez*Xt#+ZC*`(5?&hO^ z5#6`kNSEjY$0%`nL9Id(tr zBU!w3*|c(Q?CKXz(V`#m?`ARG@lG>n@Da1@DUU@J$>5x1^!KI5J!?0Mn>LP54y@}= zv8Eya0FQ+K0Dz@L-XO38D$=)Z1#0FOZ#+X!- zl31Uqq|F&8){B;*70@s+cn8-sfPalHGHGdCc0yu<)3+4tW|Sx*ns#E6x;-DlQg73M z1RQ@l=)mH*&j!j&Oq;qk03U^Ridm1{!q=w_Vtj5UJhfzn+r>0+dehHLQg^CG1M!ur z?ASFp;Bs?FVpGrQKoJ>u^`qaR^<;Kt0K-?{^C} z(Da8!w;#tLA6j~8u*ATC#QV@9SXHDM9MjS{Gsy2#K@m}bfm4L$fFTO~v6=)fPc2h2 z5HXrnT%NRmX2k=kH5({BYQ{01l@y4?=Yc>K+6663<$*|5)w^PVPI)Gn5}_eaS_6`4 z%EPDgrj|M4fFxBt=@@ZHtmNZAjYiiI2HWNWeKSZ42rwziK5H{0YtCzL&R0%~-IMH!KXeE_21RfkNsf%ha)sr3uZT*rS-)bSWUUuuc% zgTC#~HuepQ1Wb%J^Tip*Y8Pscr9U3jfM}B)sNC4jKMGPk1vW=0yaG)jl`cu#81YY= z4{PgH?jbF;8)7#@cr^=^f2$;DK8lx%9R@u155)9eza!{J!{Hn=rv{= z)eSQFGi8iZfz7ZZwLai(vBp0ds!_ba=g-ShLe#Ap9Vv^D{*}Kiz;Wx+fk?r(8hB3l zp}+*{Drnm)%|*8ZrAr9OBC?PPyB+G?yn&88`c*bwXjUk|kItdS;Aq^gVTXEl~D>+h&^aaKmm}zj@5l1J91AoLltTql)>ct)q!hM0NN{Y^7SIIaf;r#K_!7+ zrySz3%w(?us!u=wGMVc}DrA6|x{*xs*?Q)sY6N)Zf!93`)}FwqG{R`G6PXUdieo)0 z{m%U&yo0hO&MnP%SH{uSjnC}X;jPX~7*y>n1q@W>A%ZFy#>o?YaFzH^%U42pNA z;&5Wtw<%PyjFId0sE4tqp~)GqqDKoJ%Y#rJ39BSjBvTN8bM>i|29MsO#t5mDkcN&> zAYt^RBOGF+J$i~UimpH-0|)V|8@$B}=~3VhN_w6s9Pv=fIO$V3 zXf(vPkwRel)a(Y_RXC5%MO=>rb3`@=xd9yH(bA=O#(UEla5$*7mxBCTWZJtDo%@iSeHG z6oa3oP1Ju%jmI4`RW)=pMx&aPb4&~Mr+{iuF?t$)eJQ_zr5p;PMJFS@F!k?C){IjD zI*LqUm!%lR05!5YRAl3=N_*2Aipof&Fdk{^)KfX9sihIJ#8?emR!yC?f}U z->Lg!ZXLL&6-%5d*QXsxV{HQ^#Ct#_uH z6#`MuR;^28x<7GQk||f?~1T^KD7k-DsfdE#Li;y zAGEjfsD)b8P^5_av6`q4w>9n3e(E?XZb+x`sZ`)%pvTsy1B&a3gC&H5MtarFxD`q> zk_}u_^7C6n!edxe4m;I`=bn`egE{o3!X;zZp`>zl@lGQ&)*N-LnX)VLDSDa+!Ju*1 zii1JR_pw%xWjLy;G3!=iJCoY3CUPIwgVL-a7#XVg!O!%m^{6^yJom**5#Uy+%0jmTjPHvquO>71CtXaAuBa=vf3J)LSKsYpt7p^LF;0lAaO%bX@$d{_r z>B5{XSN$qw=hm$mF<%Ff-lB1zN|}HQ>P0}^dE*o?i4n-irm&|sT5EgMGgL&~XzfZx zA??LUKn+h3?fohr;r{^ZRH@D|4>SprDfJ%p+xR*|_INw~@_#0cO!hYZP0#BY|H%=r&SnTCyTJMO8T? zu4~zBFXpj$(r=kg2Rv41p;6u3)zs`3P13XB8~AIHeGcmG{{Z)C<-`sP6ZeK|y|=!! zzb=rF{$2xn8fE^WX{W|FoI3-+9GVQy16qswCo#kr$lZ@Q`d24)uip!U2a}#~0P0P8 z;@w(bS{bK{0Q3cUta&t@Hd~Lh2=L@|2a1xeaRTD!$`TaXJAyh>jr^*c&PZOktDYg$ zV2JrK3}EtWGfa?PGb=Ao$kMRQm6$vmz~dRmddY`bGv0Xu0Eyq8MQki98iZbpS-1DL z_HEHeOq_E_2WpnGT-yMIk~7DxWa&27Fy4hAZC<0jZ`j@?;vKzL?+Qo0iEq{ql}Q-p zfeoBpMI=oS1wV`$k5ssp7`Gr~9oTiNdWFx}p;LkLa0wM1t;|=@?PHVCsfEoC4Qmf@ zq8TvEyl2pR*GH&o_x8&Q+QYwb$3B(J>6Vb%%)%f!IU~Jw_SewEY&^}a=sVCeLR4$3 zJP(z~>0W(s@P?lzlWOq1&meAj^sJlfrM9(shA;+y3Op;~FE;6|reT(EmyXoH>NWi} z?`^!;)W}eBqpmAI!@4xKW$qv4-;a~hxnAe|GB(~j(h+Uowy~Y=6;w0v^{!9G z8oW{1GXl5(j(gU|qorM3>ak2F+XC~C%ZlfGb)+x$drK2?Gqp#!q{fdrR`Vm?oil-& zy9vUa)ms>!%T(*{S0PYj!LAyco~1RQlAHm9pQT;UQQZ#xXSus zx`J}1uysiBF(-`rRLrQH#ljfQS|P<5;0W2oYTX%lwm+Mr|$D#*D9JXI^_ z2&4`wxoQ~6PFE28oMtEmoD4#J{X ziZJa_Ndwb!1A z0Ub%83@t)$u-PK60etnSG|SlKDx`qfJ?fsbarT?WMJHnL0Uc_LaWZ_-whlX2MI~b? zGr2^Bg)1N+^vz$fvNsYdBIg|Ru0KGE?@+rjw37KMFzipQdR3&5+C;IcD*NZHI+b~L zHKRwLRx3~CMk8a&imz{V>{{K0`-v5lS0-56NFzST^Hkz4_vyXtE))Jc7OsNAo9^;1=C zlgP=`oYz_4IIX6)D{#skn>Et~q03QNuc+y8N2i^!sK`0U>t11cyKbak_KqvwJX7I| zi8Qy8#IvwdfDL$Fp$yjdZ5_mHlBvT6txD6I$&&+6^ z#nar?j^UCrH=KG@K6^Ze-jf-J>s2$g#(AtPbr#*m?*9OdM9-7{6&p7c-Nu0qX6L;( zJo{2|X|8s_&DyCEBviVWdjJmuim2Ub>~eb4Wb<1inm}nOd(vl`WS~4(Q{n#rFj{Ss zBb=^%E0iSv`zkdySLvD=UhMqZ$%OSln^^n`*l%~ok} zbDC$KI%b%O&#|b_Q|KwCU9IXpsSKIzOavmBPX?5};CoX^$)o^#(U46c&O6g^a(=wf z1exp4G~#l(H5eSw&4ECS`LbtW+K>Pj(w!&EA*N?F+_pL7PZ$oMXODi=TqfLXeZrq> zZzSrwSLG+II_5Np>;#fJ=Bsj9PkT37Q8TEg9BuZbr(q29<=yE{-du8jI$gA+4z#Q> z4>{?9OZ)_Liix`MO=%7=DS;>=kdP_@AC-WAhH!rh~;Wo=4V;fp$p(qG0tDi6_nT8m#S&qco`bAJ&A)XxD`| zp1H+H$;L%z!7*H5@;Vb*QO&)2b6p9UvM(>3{*ZJ50vY6Z42hSb(uS4+euu;?ZgmLL!Y3|P4h-RUI;bnVCr9U z%*E5Qx*w{?3gP29&w9ym^Lo~%qbx3quo0Teat&=;bCnu8S?!K%K>gF2%+k-yaqC)t zg=B=v7j}s%6Pz07FNle-9AnK#ay-Lqk`$vScxZ`F94PiaetW!Ls zOd!_0$8oh}`Irv1&}*{AErPwdAg?01o7D3z?oUvmY&!Pm%IZH5#3xG+)s;Uohw~V zF@adxDgOXQY}TxI8y}3~xo5cywAfYaRm<*d15KK3+|)=5bKbLHi?Jkc^33~BsHuL- zZrD>JW46&%3vT&vbM00j)900Ut6@N5Vj`gr-yfe%XsqK&7r?=1$d*4u10tqSH1YI z4?jYk7w>H+o|WL!3^M>R^PlHmX~ESmhH>n0W((fAO~x6yrBi{5Bp7bgi}$PTk>-Xm z(wu)kdQ4H;m<{jJhWnJAX-OEM2CrOG{i&mZaZmm)T-33hx5HU{t##8RZown-uVn)U zyeGid1}_srr2XN6{(n06U^xVO3jDW>>Dv(*_dTowy)sa7N`91zc%?P)=Wx;1gUux= zpbVXTH|WzS?kmpR?U7g>{cF?p1oJfcm)g9-U_m{(HT0QVZi$Ue&46&I`Ri6LK4=v2 zRPE0Dc>a}n<1K0(YwNPAn;vd0T@<}(y=laOP3YD364ob&9V8*9o zFiQFw-hqSLt~(4@J0!6w`JG4OT2`8XYfXwWdV^kOWUm9W3%JY0`_+eZ06w1erFlKe zvkj^j9YtbXMI&xIo9SK==oKcF0p-SOq?ZFfDEv)K*5n_XtwQnh$f`hOYD~;BYaz#_ zbQjSNCAjyj7F>3(PY(UV3GPMpr30D>r5!7BE-4%uf^{BVefm|A)2~{JQJC7Ys5DW} zy&qaAtcoSKkIlJ?G5k%6^_xh1JAev2H$f zKc!8p!@EqAjNo%nLUKo?Y092%pCWcE)|(OKBoKWmpN&|&U6)dh!HB4MsVxW(HGU3I z9Muvk?Xk*JLS+3-Dv+l+q@y^d11=*Hra<|JrDqYek<%5Z47$g-*p|ni%v~4W?&N1ch7K?ayB$gn~&grIo!STvpkN!Fr{`S3k3S_X8qe85nU~z4=iyF5nx|yYXvm z$et_4lCW=*lT|U`Q`;|Iq z)3bfZka`5Io+Wk{Ddcg(aV7+I@}GURYAqXAm=c<8$JC}joqE90B?IQ02mOvJRnnXf zn&M;hV^HxPLCSeL_-|QbgK4mOvjI~lgta#rd2Nt-m#I-8Mr~(MU{{VKJAZ5 zhc_~PYBO;&pPp$O*s-QkWOU6Y%~cv}pro;E?mwL&&M5q84J($R70_L@V~PjmMra*_ z7^LaNI39VVJklM8l6`0#iYY*#EGBV59`yAY=ZbKTE9+LFa|)P<)7*{E19Om5TQrDVa15c|Cn;!vN4# z&bPr6fg?qb4&$8v07~>9`D8t7%RDc7wz`lTU4a9I9qZHMkhBOuJv-N>OW{6CFpaCR zz+m%84ti83Su?_Bq*D0lS{y`!r+QrczVwPtDGHGJ&lCX@?#)ITPDXGl%OH?-#Y5z6 zJ%2g^!_|OXllfCw(6%v7BWm+dxgCuFSWq!a8FN(2ga@3{e%l(iB+>&&Fe8u7nJ36T zQJk8i{ihH(+Rf}LSnmXbgfsyS(bOFPw-Np|M;fV+26%$!oDz7gks&MTnu+ELF}8ps zKtlY@lSzPjWKx*`OxAVH?6Ec?LJz6wObrFK+<9mE=BzE6?H_obtz$u|&7HC-W%ghuniInwY11@q_c~GnB}Gx6(u}7$J!u$i9+b}A zsJa4B$&=QA@q#(1z~ioJG6?H|MZmNqjei;hh)Cn}s)dF+(s`&lxC7Re!o}v5KpcKm z8%yj3S8KRcald!dnuy*;212`gZKceD#lb1ZY}16CWYq(B#Ni;5>rOWl5yW4eE_6Op z<4Geh*^E?f&Oyl;s%<^MJOv+(HQMmDR%ph5*{t1YE!kX*j`lejL40GcTCrkE#8tg2 zgK75?${u@}2+u_wD|#rAVpUMzh{3O&&FaCl;?CSUX=-D-kt1gvbDE8^YURrO`KnSJ zSC@O82D~l4+m6*@FP_!Z)f)!PMSE4K+zhX3Q22nPZI0td*#fvERrLV2aZYH*29v2~ zGMu)GtDIG4fSTJe2_pv;6F>$4%00QDTgb=m@mp^K@$!NVAWWZX&Q*}i$fIbKzBc)deKU$jEvJV|;yKva3sQuIe#DMX(k>e+d zd|XLV6w7m2Mc8E*gL2h*ExYB3>w#K(M}D;3p0%==ig7~Bx#>>(H(qMoJn>Ft=RK=F zcX63lP=4=fkF9xEiQzD62LlU^4SNjWZ6~PDHRZlEhh@sJ9Bw%^^!z_k)j3XFRBr>5 z@6w#O;+xGVIOjF?DDv55l~qPaB=)N8dFP6MOlLJ4RT4Wnr>hO0N{oJV_4LhJ5K)40 z%^9T}cB%m}%}53XHjUg+F;AeVoae1b#9-p0BPTU1WD9`&)ucG8?6_)`dscAl47&_z zA;Im^nQ;(CgrD&;z%Hk4g z(%XX`>|>7fhyggoO`V7U9CWAb#d4WW4>WDTs~8#nw1f=P;MOvZr6wrkcc!q-I1iSBGAL@`3TU7MP5|xqqQP;UGeAF`J%JR@%8&<2PPC-r zlOR&K3II5x0QUT;0i!01j6>5L(_5cPd8Uz4#zcD4m#qy*wFqRue~oHco;uc2@-hu* zSs$3MIjpe@-2`u2pO+`SSsa2n1ZSG3ZcAVR`PJ0G<2kPmtZdEVVP0weWxqVsOY&y0l6 zN`m2`GmxBt>DsV0KNa0-1(w_8i#X3r)S6Q}Mhmv)Jl2G=?B^_VpK7;YduFRk>r&Xa z?+D}TOh$tcO+@D-9nDPK)GTR;!PO(f1CDc9%6+S2RReF`W3S~t zbfqJjPM_mhGocU=LHg2+(zY^lMtJK|Pz+-gEIgWsocdIe5D#3_LS=wzRLKPQsE2xy zcsR!uqA`%-Gwy08;F_55-3>(igP+QV2(EbInn~Jtr#ACK;7 zKx#`4)hciWMV{uRL64`kGFdRk^sbA-FaDc1bGc3l=yFYS*&BHot*;CaH9?L$pU8^w zbGm%kc6H#TYKVV;?dF?QK2mOzc1g#|2c>$`X);{gVqiiqZM|!g_-Y`q(>%u|q>%0g zy*}FEr+_z5Yk>5Ooj*vj)2?KYzS(5;JW;4YU?(%lhiqq)owZ9;@b%`Ssr{j6WkTSL zG2nV)v}f@7p4LPxM69F&DniFIed1dU;uzgA(>Vg83}2KjwY!f>h93mYJ=rdpRls5B zYpst*OM68{1&WLU)B)!@mxr3>3Bu4aPgt8L2gz&u(Kq2&(=c z(2cG8OD1-&+{ISX^(ii4%kBr?y+2R!8l7NS$sCFg8^^6su6h_q=8I$UtT29+Qp-oO z)24T}1Qz7v)DvB_7IH|LBra>7gI>9c@NUZ}IU}y&?MM#7_R%k`{HN{8{c9si(B9JT z&66J^9e{KdxfFq;SvlsjBJm}(y1B4rVBq7Y8Kg5_NY-dtCmBWo!D4HM@twub_F%b;?umfu*1GL~ zPm=N&-V>Hq(;;ge(32M1;@>>pan)R1mceL7Z|9M*oR9_Yv7X);lXBIJ-N zoUj6?j%v0S4PsT$)5F@HN0rsx(Wd8d>Fv!s-WW>R?WdGq>8}sUCK*qDkgTX8TYP| zbS#IAVt_IpUFT`&YA1vh;B)U*Ufbr+H2Cey95nz?jwjqWIH}ta$CH8WS0`w#qC2?y z8t1QX4byB=0*`)bSjw7~s+c%zj+K`dsG?8_z^iYjGi2?^&sxs9(wSF(BOHp7jrb*o z>2jvQG&P!gH;IK ziMt}bv`|XGxa9oA=cuiiG|OwH01c$~tJ*G!8Mj$Hy}dSr>03ugh+u^w$8pxZYIO8G z%9UR+n{1ZaZKszX%DDVMvKe{c{t{{J4mFsyif@$xFlD36vEaJg}V+bno7rHUCZup z*%e0kv5dBPs_Ut5kcQj&({8V0@|Xe+MM^20j-rL-V42{YX1bpXS+%a2x!9I&0rWYp zPWIz%_m;WqjN`p}R)Y*_V-RKBdg8jH@Sc5F?-wn#-A36RB~^QTU=!B7hsIY?UTWq< zO|Oy-drRqGX@&OiHuSF)@r9wY)}1hZZ{qc)w=riofN4S6*#`&Kkn>H)HA15{PkMxkvvV=HndIZXT5bEAd#Ix zb=uhJS+}WZ1r<0S`tH?OdPV@l-<2mCdqG3*dm+4V%1oxl-IR^rjX9KM; zmHcWp9sAG)k2QNznQ(oonHcRrbL~JEJklRMy(tWb*A-Yb1&;&008i#0!jYuH{Iw8r z1x94!7{TKJ)3A$M7ik<)c}AmIn2u@RY4XSpYST=S#@)_%rWhP{t7)j)1|L0G zOUpS+WtSecS_s5+bv%lVw_~BMf#b88_-+SIYPH3@c*=l9CWe`dj1Nj~ea&5#6<+mS zlbX$znH?w@_01_l2V+t1AY!4hlBDxM-y>jCo^s2R_o}&b>&+(abDEohC~sO)_^5Yh zy)No^0sHBjvrR3{ChAR$kT*2Dfi({7P+J34NWD4 zHvU5PuL!ZYHtra72D|M8R}#h)wj>=u?_8B3W6`57bayk}A(Ov7>z39u8LsX;`wmt9 z`j1+@JngYv4t;BPz#>ggQMqR31V91D0M%jJQzsIaBe~~ST5R^C6GtMR`?^&JU8cR$ z#<~OzqCBXpy;rU)#4Z%6KDotuH8s@n$+XY)%sO|iP6|A_)#}%3rIn8S4 z%5aJ@Yn`|u!xr!9TOK1&FBIgK#bJ}jHQP>|<91EX{{X{qfuzQtfFia9myqIMPT}cP zG&BQ7i;!@gN3Bae?4}aE03743c-e!DWSc#lznR8K5$fya*~ky~b6mZ#-)zxz+DOH9 zKkMxMbCu7va&VT1T9OhNqn-{puDCvGYDnXhA3KO>_5tI&x0&(IR~@T+!`B82Sv32B z@{hVtN~dLSCAO`ZG7yeOV_R!wZkIk`Q@g126{IQi9_AY_bApwQX7V^b-72De)6NA) z6d(tS3y*_Y@~;~UfO)Mc#>bPHU{yGC#La#U5xyHVOTnfJitfnqsVg$t&5`d?FC&_y zzk3;}OzfX@{#DI$p|ab)7t*M|4eE1F`$2BC8Tp!>$+^;LEEeCIypOt0D>q8RA@*LC zs~TW&T=U$K*&Bc&r&U}4IvT7?9>$d%769-oHU_P_+rq(%{MBYlgCcB%jQ;>S&s$WG zWH`+W1hBX&dVAE2Y__*Wj^#gqs9k4>?eb(f_N{SwBMdpsF{hUqOk>`V9KF)9VoDX~ z(wz}I25VC4Hjr-ParLSmUOMrL)&$7Wuz$PPgI%_a;A#*a?eg(lC5a$_KPv2Wx7$1o z&kQPY3!0RX5YkBP&186vJ=#N_PAgydN7AV3=wD5ccERJ{75UyD_jsl1dh*sMkx3pp z9@N`nQseNcCU2SeAc95>Lj!-MCVgx4ntH_Xp68%=Vqf&dUscU^fbrJ29Rf|aNORX5 z*ME?4k3r3RcM?P2jE_SK{nD1PADO01zwDa%{`-r$R~XvtG5FWf7fZg*%K8l)zfif|behHQ9dLm!Ck9Djdq1$_e%4H}>+Gtjvz4o3f$*<#( zY7-6Zv^N#&m0V*1ua~M!G2b|^pvmR#$r)89vXFh78R@{yYQ)>^@toELh#Z{$ zRkdnCLM!UB*J&IWg>+S6hR3HB88~W{#vJyj9FfI+tX=7&z-rTCNh59Jnt_%{4^k>% zxEVC%QBaYoL|c5^^PcsyrCY{PfKgN!a%)3LkSzN6nuaO;wP0#ax(@#{#NINgnk=DP2dt7Orwt+Qb^^<{!E_ zu5#gjczN$#*j8mwsz*N5l;Sz2itI8S)Y1jq2&Z-nFDtf|2`{{RDCgR4p8X>v0E0CT-@z6pmn zFE2O;j8{kEdxH*_AqN11pUSjaM2ETNb4X;F*s*Mr)|Ss_o|#I2m>xI{RS zPob{r%}ZKGgW7;)n7J9PxD(8?e`Ph53}Luo2Ual-VbhYLWSRjl%jrTBYk+ z{vl1ew47r+=CThJB_PdOwLDc(R&7oXr8Eq;)N@W9X$Rv=x2`IHPMxX523@Raqz;*+ zE{pt1KN>`kNx>7#C`?4KkF~8Q2GK|j!?bM zR+hUY@F)l7)It9Mu5lWbd=+Ax$#Zi4%AkKbT6Z0vV~C>z*1Z8dC8MYX*5LmDy!fft zL(t$H+rlyb06iql7msnOb9*Ds)qtteMPdL1=i0pxN1{M}SZq{#CTZhW(;?wr5$v(i z&jr-AhpP68=c{dXA^9xlVd@aosPt`GQS#~2{ws>@o5WUUg?T>#fl#-Jp;Pk3JN;i3 zKH8b0!PkFe<Ew} z!p}O3!J24a-c5BU<5p9_`a+H^rhI>S>(E7%OVJjbAVJX=@}O5ZnEW}XDvg?KfAB6% zU5`uI!r5A={{XIa)%i<~6jJT!Kpg7W&x|TYpG2vXO}TI5{J5>Xxb05cjz<)%1}M^8 zjI@#g)9+M^q9GZ6e!SMX9nB$`K-v)J)_^nP(IMTO0BXR}VNBpDsf>;X%DmN^W-T6N z05_&-0Yqu>BX$CwEu&vdQ{_n{Ew%7Hsv%~?WXR(_^bD8FjYT*F2dyz}R1W9rX+#N- zY1{{8dmPekr4fwgowpRM14HplGN9t0fzptwnk)ouI*;Hq({uj-Oq!)A1~>+rk6Hj~ z%EW!bKD0E14u+qCeJPSDGyw}wDf^@k!jWEbe)#;UN_+E8P8xs%9L>*~!;aM(+qqx$ zulO3crz0HHqBZNlG{B`Dx%af}~Ilz=)BKp7%{8@C*PI>+%W22C~C4l8Vo zR(7zyW}7EH6!BTr_zsLCwOF&rTZ6}HZh5KZj3kZJe8kiQV!YGrqp*UI^`$wa_MoeV zIi)$I9cgI*1M5W{I`KsV0YN9)ieB^p+5peJEhkz4k}@%hdXNt_5)cI`ZgW%|u#(R~N) zq`^ID193~djwlXUpxfrDZ&B2Kxg zmh5qY-RsuvhIBr`cj4jb53c{E;y}^EM!XRm@Y~6 zH1_0m=9%UJ-xL=cbNs1X2d@T)8R=1pTR8~F@TC&Ae&c>MJj1aZi6I!yDy*Nngqa)< zdbaXAaljtts>$W&4?GHe3sUDp1 zVxi)xcOSB!V@S-vV+sWzW@DFSz^rHS6ibzg$=!j+&e#;6+P6}-%LTX%+>=v0WjOB2 z_7XLvbbgLM3aas=cO=$S_xJF|#Caf&auT_D{9UX0j)9eMNXQiF;v-Yx6sb7wdJ3Wp zA1R6T#Y~vz2;Yr)dw7#qbwBBBGx}An8&JR0FScD>&QM{14UE&NTarA?QH9-)OA_I8 zh5D0G%XcWiNnsrHtou7FSBRI1S-o54H8NX68Jn^*g)X}RaxnJCOmKN`>bUT>jaRz-O=D^v#!J9~jhx}~{osFF5+ym48Q5DR10 zpbv>uf!{T!*XpqL5jr70N`VT3-2pW_1_Wd;BeiEFyS6&>TB{<<0vz_~SW6jQ#k9** zVc0;YZ>P{y$sXj$b_d#`C*`T_`Gkt|s$+2$_>Dc3I|9T3>S_BIrxbBUa%-L9YQMBs zBzp{GMPc$UUrM^jn?Y3qsmO2#TCyCN*N&B(s!8=9DjpjPjPXwcJmWQ7K22GO<$dcG z-r_T_6Am+3)2=IO`FX6{i1Qw6rkfDDYv7g6YH8#!uoX_o;%xd>g~Vc0)Z)5n^2U79 z0?Z#YVD+h(e4g}{skSgVshxgPUVP>6GKWGl2*}MTTu}i92=u2PYL0dT3W7bUj(}j) zqL||;#R_j=99J>aL}UK|)l-gRsGF@w4B8JhTH-tqNb6S9lhUKPT&_iF2VofZCI6u^Z^Noq%I4wV~l{{W3Ojwyi2pZ8>DxE~nXsf@nReL?MA)Po|q ze->Mpvt!pa?PT>iF%dDYuLgO0c0B)5j;ZCdMW+O~pKlOlE*1b;;>UqMwZR z6mgoHSU?VG$&PcHN^%iY05T09N^lB#H{nk(vW)hvVX$}oEkSGVO06ZLaqcni#kdQi62oE%$l_={$^rGVd zNO_`@y&xAnPIqgM57>B(fJoTfHO)Ve*aoU1u2NZVnpaGbXOv%MK(rv8R#*>pr zFZP?ZU;*H=*4?19PxxKb;aD>cK3E~b)4 z9;b@xE?4(JFz0P^gb+_Pwi(_4#8unE8rag?EHXH(jw??}Y)C$CM{jECGiJ1dv)((&)QmI7 ztwu(8tfXraC*ql&^(2E0(xduxs5C;4K~f>+qVG~C280Z>I(Fip80YCxjFHnc^{rxK zB4dI&R7^qSihE}RwK2yPOo)}wQ%Sq8r8&<|I#Ul^n$4S`jB-a@QgBTxe8-$qK+b9k z7p*G(wBD5Up$U^ON|rCZjN+nDeQD{#RN*NmrjOE~v3pdJpPHitA8LGmdmU+#%OGKC>&_{e$sBP`UJY6@ zWQV`4F!jLePjU6A-2PP9kqiCfOz0_FC9_R64ABw4C#@Z+TZ8LO9Y-{a6q=GT&#f>T zkq!yuQWGTrd*Zb;6Sr7SzcQR3ToGA(AI7wFcG;>#NEkeRHRtAW=AhBhg#IEszXe*8 zqeHxq>UhboMN86+#|8>b(z10rnWD5t6SuCVFROc7)pDawlR+3F3^u4cP= zUP$p8oGW7)HDgoNV$&51BfB>MD68m+6k${0F+t;b||grE<=LL55G{VP64wn_YZwe?_uy7W#mqWL;ym^^2 z=cY|+U&%eTlf6-zKtAeqtX&f4QM;07yo{m~@`Kb+BHXY?<*}FU3ZrjnXq%qgbUfmh z#7!h9fpQd@&CmtQTst}a$ser)CDk;)wW5??-YLk8atp3gBl>l|9b&W!8J~U*9 zaAv_HwMj0Z*7k8pf*JT2q%)z?bk)-=L?}ZJrSsmXYT9g9z_T1N^s0I;tu)g-Z<3k& z+0H6$c6)`fb8Lm5JW@yoTHB-xwO6Ne)~(u$CA|I*I~AFx%W-jLOsTP(u{DKvHOgu@ zMR6*gG1izKp$jar^Nplq6;eG0A%3?3j=*?NN=-I-Ud>s)@LJCP+tlONMX0us;3oyK z&{70;F{*?M+MpIzM)%ALqHJ~VPV<;R8Ae+jD~q_)ZvNWxDJbbC(4n)cU{!`e z>J4Yx=(hH^W^}>H`@3qztgP0^@At9VvBsyVw!UqQKe#;Z$7%+2EZY#VI0C9!>NeLG zjc%@@LE4>uuJ&#dIUL|uDWKWSCaf+o@~>7sbDn4eufDrWD@UGR^=sC+t$S65`%m*A zCu!r4TJG*`qPw?}IhS;74r|VQQ4AInBrp&Vo}Tp+*tl+BZf0JX=klvIQZg`J-_ENm zf~V4<8j@STJ-Z6vl07(^Z+v5_|pm77JF+Ktqjbdg*_ zaq|F8bh>T)chboOQz!+Kh~Kt2Yr9$Reu(Gg(Nq zMJ^a^#sz0x!}9hdR->*#HBG=E)D&Zh*&7FpQ>Jy5Gn{cwyo;Q!c&Z!O7#`gzf!TOM zAG1PoPG6sD>|`6GIIdSrA}d&19eU!rn`ZMOUWEEkz|UvP5t>K2jwHt6xYQb@yy^3& z9M%MvQ==WqanB~C3AIa$nTPI|^Y2(>%(8sIh85H4*YMm&v54c>tz4H*x0yl42el?M zo3y?ug??*5>~-95Ml(}Qq(FeU#~!s#Pn7H&tw~2es@nj;)p{P)9-DIUx08+=j1yY- ziX3gMW`oL~a-3~B;(#}x{o3cD^{N+-ynMfpy-d?Fi{_g6l~o}^ z5my=8S|SZi9YIamsdUqJk#8|J)f;vS=`5|IQYB^#*zaDN*z#qoIN2_q+DA*Y*fYjf zvhQqcC4|h546+bF2e08?jdNvha1QiVBzLY~QSg)`q>wk4gV1)RD>Y)FCl_;@({#kP zoH=ihkJh#)w-Tm7%T_(iSDJm%h=yhCaauN4Qn)`MC3}0brzRwMdO+TK&Nmt6=T!#G}I+eJ*r=|ZR=gM?9qglq%5YSj$fC{k$N5)o&BK~_bOD> z?FhrJKDDKyPNQB2RSY>_QB~bT95*$5PipJ?sTEJ5H5o9;{7P}@P~%`oq4sUZ<d2R)Q>~XC|6nm+Z~gbsuJGR$+0u28`01cJ!cI zw`wfH;sZ;&-jrK8rkGrJqRccM)|f~X6=Ca9wsXxUG%oy_3shp9PZc8`r_l7LQwOCu z57vMRQ^f#Lk4|Zb0OFJ0m+49d4FEI_X?oMKkxe6>C;T8%=!ec(|2^Ko1r4Ubr{tcR1(e zJXg;5{7Tsea3mV+dmdvWvN*UEv4dE4pYif5bOXStTawOG#EMPAo@)T`K_k6%o+cRC zisqXode@^%;2`v^8W1$t`Nl^|y!uy}YR|l==s>Lf8bT}~X3tJ*qLx^Vn*=>YdG+W* zqxX)wIEm8ICR}!l4Y*Oz3dp#(i6;-RZXD*feAvSB-1=5k*cmJ;;}n-FJ97EnzrECb z+4CTdML&&66y9tqx*Pl#?gw}p6A)&(!VH|ExIBHQ{J;3NUay= zJ*u386{OCo(m@x_n|&(_T#p1drENm^kmrsoBU?L^@zVmKGsMi}`$T(+BvX%w?#as#DCA*tzjXth{`sRL9JsCx zyiasM8OZmklf)Mcx$_2b(DbFq$8)ch!3XDBry-({RSL|<%$R&u#9jc=i ziIX<0oAY(PKzFpQ*^U+D7 z!S~rA=hCE@ZiT?^q*vz^*Cr|Yp2T&DM|5g^tIYI?HUL4-O7xpkx&$EhubbjXd$Ez% zgnOcA8H|rw@Q)S2*KR6l7x+;{H5~%hw4bS{b^4)rjEUORRD4YAFU~*??4DgG~j+(Y3oj3&XCC= zZITD)gI_~f=DVbO?+P%)4mZ)%=B{i?=*Dj z%{+9d)byzb75Pg&ai)XPgGXvWB7j^Edh?$XN9F46w~gIv(Uf6@a9%P(w~@)8uf2PD zJN@H{omHWgVBfsOYuhjmRMr-sIvd1XgS(2_LAK!Miu#NjaI0o?1B1JaxZKN`^z#B83GC6jq~h{uj_Y9cY-mNT|h zKH{^kuLg}NJ4oKTUNhU)urF7su7+?L5Jh3$0l+o#jajqUxq)!GB=iEQ$S`XCz%@=l zPu74cO1WS0u730ZDLBS!qHsv8O-V5zJpuKuyfgRgXHd#vO~p)CnujBr^cjfd{3+>? zBA&RYR#?kpaQtdTkT)ro=b%$k#*UuNOF+2E6#JPXF__r!Mmp6iS?>*|$ZYN#+$BWX zeybt*bouk!HOb3T=E>8swc$%M0!sM8mg1uEtlKP>F3rY&I^WRjE+Di0>Im5Lw3^EC zE`xcgNESPbWkK1GHL}>pspiL%TK*l2ecQGN1HEb|f#q%_)UDL|0h3!ASB7mg^=~%u zr6-@2aZ=T{F3p%)+Yta8xF@A@+5ekM9k}uE(ufTOde$r311jYM*HoQp41J z38Rm2`@fZ5hT2Ap9$bg$D=~aTC2}Jy2eRU;$>J#kkgqQti&VPNG>#6d=wSGVLDa4_ z4e(jHUU{t4@Sd#vyh$JX?klE~#1j*cnLq74LfYi-)gvE;Pq&X_b(Yp*7_d39$Ruvj+BsDvxzV?X&>xmLkNgi65%D8q;@_(zPW$BJD>O!SIPCI?^Ddp zRvwbs4tXST^GNJH3sX7+=}#bItww0Me$ES^xu9{}^GGP5e5hRUNktv=NOl&qbZJC- ztSsjpc{Q7gniKo@^T6CHqU_A-#_(wM=%$Zi?P1cbM<^e_Ptvlq+jVP1X5^8Y)rCTR zJ6EceI+K?RcKmatMyMIanqZ9z7@#&gF zz@#TMxy~s7y(tgB6bzG2Jb^&O1dfK6ITXM#)|>?ZDKwelf-y*Q=|B!2jVM0<0G&e4 zM@1ymZ8U?AFCSAt7IVchv5e-R^Jnd|@uobNEx;%}IHUyo!1dyj%nW|%#Z@-fvi|_f zWL)9mB@q zmvFc{e!u;CEC)n&D`Cd6eKyt#8?__uCX)1_zM`GgBy3i z87g?Gn!HUZJ54jlbp;D~Fk#N_l~asyTDsf|4x=y~+c~Vit$EVi`wCHRDcoiTdQuQS zyHCv_H73d<57L9vr7lSwX$j_##L3MB01!d%zS4~5mte)0!Of>qRIA%L7Gn0I$B)0!a*Vb0D#nsrRp+$%Q;WfVyoH9u@1F0 zyD9P3lxDP}@cykK09mm2BvqC0rmV~JMvL#7e#%{p-Y$~+Mj7c#is+NUm+n4mm{O)+ z1-hS~QH&3zKVu^|kD$7o)M|ykeB;`mAYQ4EzV*@n0KzM#!~VZlUw@kvzu6uejemKl z`JYFs_6*JDRFTUZQ+F?R0=h{X!PdtOBRTZR%|>;<3PFP%tgnyuYLyF_ywaazpWeUT z6mA4%Lmu1;-+vnD(PTrWGksK4N8$`fF&37f`{J}%R$(mGJrG&=XH&ekHwG~hb`904 znbI{a?x|%X;jxe^+4zyDGL??jAUgsol)gOH82o}1`U=zPjr1`7)tV-c!`j51ESP;* zRh00auO&*Keo)aK|9pv6^x5bE#2zm$CqHG?JQ)97_$!Pmh2*HEQActDJq zbvRS$+6 zAL}(D$NiSB6t3=DpRF#?6M!lGSsA>2SJdt!pTahi34YSgAUu4;*1GunMTJ5km4c2i zE6YewItp;%cohAL?sL?yDxVSQa(qhDRD71wu=f>OZ;8kU$*1G};a-27ic`oV6x}4z zpE2qd{w=$@gh?7(s9~O&r?$U-RDmcN{_5hmy$<937h&p$7_GE?o@>LcI+2r2osfiD zxuGVpsS~&DZI7iybu0GHZsf<-p=@>h>N8k-Nj{~hq$6BhyJ6>Y4}8>tvb^N|YB0Rj zsNl#M=i0NCLaauQfsWMRyq>jV$xXc~5}SXB)?D{0!-MgGPE(J1gE%><6y*1$1c7&S z6?)x%QO6>p({R%;VV|vCG3|T`#-&F6(u&uLOiVC29czZWw*LT2m))`jdIiFKzT0b& zzKDIXk4^_l^)ks_G;`uMGL{jHVz21gituz4<%khZwFNI!f!e(sL~l)_nh)MPtv&e0 zep6F3WSmtUIP8}M^&RTmhYWjjUm;R9lRY)C@N?3XjH?f7iBBAKsgUG>-lt)hQ!Zt2 zJ5@&D){VmA;ehYjv*llygI$nhGfo!*-#vh>J7oRPZ1L+@w(YtcS3{@bT{qclI+YwD z>IhZo)}^(40uE}b$&pgqzwh?;Jl6!aG%V*71E2oAG@qJ*lg(xVxytcU#@UCjN{F1T zKHTm@p2rjbpp5Wp&8z1ksgi0~Uu*ZNk`Ze4KXe$@Y>LJftx3OmYH{gQ6mE%!@~VV{ zWW$A+0b2XMW&X92ep$WqT0@0KB#P-`HINXhY2;O9n26B(RLc3TN{Z4bbO#PaJJm(&@bl!kHGnG9m(>DUDDHzWcDe0co zqtyW`Hb-8SChW(WgE?Aqwouk-0K2)PJbLD%Cz?=cun7-6d7!REHG!vR<)j2mzb#<+ zf-xnV^f(pJH??N!Q3te;5&Su?LjhBkv{^G(M~X@|%IJTEh~}6&Rjc@Xi|LT?#O|ut zuhJmyj}l7EdeWYAO#l<^P9qheBw*6|Pyhy$o_f%j37<+k(Lmr;fDTWsJ$R;c#wp5i zKo1xm)U?plpyQ=57pdl$#AcM5Ve3hN?2k%N-RYoYW{gk-fxeWi<%izQFduq8w8ddT z=8ebRlOB|S;;P|c%rWcDHzyRN=9=7|^zIfA(~|?#(+^4%;+4Qw7&Mfm=R8tl0~w$N zQ_gWg#yO`%k0XRZlS@1=1BG#e){|gIN(N3xN(WkeeDT(#1lxg{WlG#|IH+<>ARG_j zNP5vh=}ZGO5sEX-8K48D1b59HD4+u%3PaO_ONu^}n8e0u4@!19q$38PV^@Z$Rd;=A zJo8c^=9q*j#WXK9J~Ai^_|V~SxeF-Ar8LB9$xPB?1FcUWT&=ehZKseypmn2^cOxU3 zL+MfwJ!zkyp`as>RAV(OoQzams|UG5#aMx{Agbxfsp8;{nf0Q2#0~p%xly>pAWUM3+MMUvb`THN%`ILWS7;B2@m0ULUcdg}AOC(k@)xt&3F z-4cI`=EtQh8~Y_Prsg=sUeZn{8STlcE7GpmAK#9(=oz!6Wx&RBP!1(uP-@D6(Pd71 z)n-4u@797%QS&Gy(^zD2(v~xrhdHG@Q$ce!@D_=|C#M({fI$zBO6jK?)wAhbWY zrjc41qO<+u+MAs8r?{pbxaSp{HbhbmIjHbDV~UbaooXK9vu22Y6!`vA^`-;OIZr(( zh%(M;@%`-k_oidz&mdEm?+$BZVWVB_$p#&SI=P>@G7kTT+)I#ZM7IPFY~@%0qo z4(iq>Ot5f4=AwQV@Toz}eR-(dFrsT6!qg2(a9o|aqCP)l*TOOB=)N%4MY3gx~O=%N37Dq~BQ-R9#roK;3YRr*Y z_|FvIdXdI?rgOz)&WMn|Ii%}PkPOsd;PPrq9s$Q%dJmX%rVNi-a`1g9LS=wxhr`K4x7O>$&HUSDH~zk zrjMbtt9;EFPq`SyXr-;g>K=2;`=$G+JJSusI(?XYU}CLl*Pm>*^LCZ_vGuP3p0$Q* zkj~bafMt(rt)uA=XhgEU=c{e2Ks6C&GGxVHW>iAQfl@NAr7gr3toG3PvUXh5b`Nnq zvc1egIXkU1>sH@sSa)^r*j9)G9C1Jym-n&RFFdvjRV^=5T}7l#g-GOj5n39Sn3t*p zKEe-C>FG&rX$6#fAxwIjE(2#|jx)J}k9x+6%H9`gp@~6eB;uym^r`h|5n-6egYyq+ zn!`;tmT|)DUueN5fHCzO=xr0{VT0SfNvEtg5UkMQk-Lvt%GdPS-uGhVi=3#&YimK% zB(bvzA;CQC{_QaZ?wxOY0>wDU&m7}5U2I{uk7Q^79jcbOr|Rv&Cek0m`pT z&;*tmWL7b-UAw(ji_4_9jf;*w2YRcazM(2RUmzbh9<>jM;FQ804k8EVIq5*lc9$^S zD0p$rINCua$C${W{cAJBmb1kJNa#lMkiXWGP_xvIs|(w?Sab6aN&xF1J7ep|wJPd% zpK3@QfPTb^fjq~yD4d<6uUg}zg5|ILyps7U%6P!_qzLr%IUc#HZKGP7<9D!cZbXLDlNk9%J-XDf ztr^0;q+{cg+wrVR?MVsy$IJw+Yh2lGVicSP{cD@oBKt4STlk0TT#agaN!c9+fv9=0 zruNG9&$V{8`i-!)*jR4#uPxJV8|?o8DfvTHld4M*#_}*a)Ji3(9qr}(cIPJ;Bdv4V z(ob`3=SHkTo~zoqtDR*-!Us6qBkLRgit&f$*L(D-k}Z3$azhQgEAJ!__wUW{1WAGD9O zf!oZ1)Yeqclx_uV#OU~CJAoBe?%zC*O3|JztYwpx#%iR?g*?@kIQFX39IvfN8Pju| z)iZ8okx(93_N!M12BguW6Y7Kgo@tEf?c?(8(KC{xt!miaZEPM1s*ZzZY7qD|*d05n zTqxYRth>z-Wnyvio+Vwp_a}(3*fb_Ru7Z-NvJ6AJ(e)FjX@(y0X1OS;K9# zd4TQcD~Hll&8j4MWmC>YdXAgn=vq9?$1FO7UWOh$Pd^hQrm%Y>8O+h(k6NAD*nzTT zRLRNBWVUt^9R^`MZs&T52LHq%^~eAO;` zdQ#l!i58u;0Wy`^cAjfISlgnj5>$^$1#r~t5>_nWWkJCe&NK~ea;I)1ZvOejbW>^a zNg}jTxK6`4%~5L`mA*j#05pAgtm;8dHaaL)lqI31aAA)|Z?i=nDCUl|gnkqZ4L2OqyL!?S zKn%y}TfQ5KJmz-*p17;UGZY2pC2w?VrXRCj&s}Ismc86{m}WbR2(11wMI;?%be6_j+HSWH$3}PY%*vO9x^FBzA5J* z4Dm_3CV&~Rk5VZ-vMJ&7OTnOIB{NJZj`cG}Tct+PoP8(}A0v@Rm`CwqhFlJFQ7|Hy z5{WlAG}#n>6mE%zXSFoM zUrWnA3qm&vb6(rB{E<}@hn$neTZ$ATpTiYGB^Suc^25{Cg}ReD3xInHPc1>GsZrPp zq#<9-d}QLHXiI(LRu)f}6x{PvNdULo-!%UKD<|nsCyz>RnYX8U1_l+T`AhhUkVr6c zMMh=KI|||Df;v=kLDSNt5)(*6H$lY~3zc3RcB<0Caaubwl4>SQ=Zt2eP`OE&Bo#D- zqsfUa7{1(a%l+WkLOAU zGzEY!N}4q16vP!Wjib<$h5FS2t)y7B+`OmAqa>QrmrRA*b$2@ab(y#3=%4p$j&Td^6Gq?@Mj^?S0V{0zfKPl{Mrg)13RPJqj$o^6DFRf`M zbX7TWyPVD3L(T%p!{iKC`6 zOv}}D-|YL(yYka5;|($qT6*2eUq}x^y~ldXg^EnL%|3+Fm%et|Y^@!bDsh9&dKbe9 z!_9VHMBdHPyu(kNeVF#i=xez6c*FZba85F6s4Fu}T&|KmS5yJCslj!@Q_{Y9)P^pm z9eF(~+^_eYK7Fo!?Rb8uyDugg=*GI9$DC8O;^`}V@Nr!91TD;G-k?&rH9o`0KPo#L2V73t4DEW8<3e*1IhD<1sD*Kw@2&Np5 z;yI-%DYBD0v#LTz5~=)Y7f_C4ut*6t!>gW|{0&*Mn5FD{k9x{fZL!&dtIJj=YYdxY z{*|o)hl#t^ew(MwsWbhb1g~o7wCyrz$Cq;GjNNhClwGwx&+9blyS8F9G5~Od^Hk?T zgDuC_y&^9U=-x`S_iRWUk23bvz?|PH2@#vMOhER>ztwiMV{=?%-7odKO4k z#tM^Oi+etY<*(<)Fb;-VjiZW*hGBCPvK1&Ay2p5aKwC| z^r~JY)l&B0+M2JV~hAL#4(nrc%It)bCs%JKQ^#=c(^lHGPM2Zy+z-a%!Wt zGm6_UV9O|p%4592ISu?ZnkwF%^4`X11G%;0YV0(lx-S0!O5?5mSpnj@ z?H4BllUP=M=+@_Hr5xBO^d_ww?QC*-)h#ix6EC^quAJBB*@l>=&sLwpd3T6mE2~M4 zH)Q^`gvwRDYpU@~B{gm25D2bnSlF@0KGpZQ33E`3Ji5x$X4aFD2;&@ArfJQ(#xtL4 z^KBUkhyXq7(DZiAk6iO!XAnmCdz)c?BSlUKuPOMC0bNBHovV)B>(!Lug?Y!sxN{QA zjD>IMUQY{D00i<^{<@>aUr7Db47~#S6_pfO9Yd@Xg@W0(8bM>znTodhHsqm_O z*0V*DK5YKA^L$NDp93Se1np4th4iThJk(3a6(`_p@y8R}5rqSqQVH!!vAH}Ury5gx zAh{VF=D3fDaS?3{%e&?4j^ewvh5PLvjdOl5vU|G~NX%vXWw;gXWb|so6B$Z67}kE{ zJhw}lNc9-ls}Y|{?WF$zTBqKzQ%aIH1+J~rY3NODJ6aT1`*e9I^b1zytBv4Z*t??74PAz#xS!y%G6xtbVdNpDz55q zx>7z%IWyZPoNg}m{_f2`;6k-{sG>fvA|gJA6y2qW+Jv8_SXb1XAM|LK+$}wA^*Kfw zc+=>$62&IAE;Jf@n(?HMXrCuFn{#D5=j6cp(^pK?3jErHfO;(lMt3=u?q@!kuOd_w zrE|4P$jX~cnTgB9nDuI_CXfNkU)!Mk>!JR|w_^VHA-lFr$f5Dd_ft4=WH@EsU3}VmbPf?`_~|j)zA2{ z(IP7%WP!zJSK&JFTGg@2yS^}8kJQsR^v~9wMk$0>p4s%&=-5zk(vxwf_suCdG#WZ( zi+MzH0^JW>hh(t;yTTZ|(Vl)0qIskypv7qkwRIXacmh(nxY{B>Do)jI)s3pIGGnsV=#(&$T&WFm)uQ&>NN{793XI9d~eENzUb_Sw<5$K7P`%^YJ z;L>#v`A(8ssG{oJ)B{k3!wmC^<)-nLg94oSkGHmKK3|BMTzL>#NPh})U2(s)-EAl4>Q9{yqUYN+@3vVW|*nStzDtznFwV^#G#_3)*VsPpwC zUtgOUryUc+kg)T0A(j6CrnToA+_vVG$@gkuMJJJ;tv{=oymeR9^mb1OTc4WbG5-L2 ztuggq2-~;%oyXU0dC*i1ouZ^H4^BRUnxp1J#ngRH_55Ao%YXG&On!fUwsxTqc zXGH!t)+AGhL_XCBk}sWGQIqf9%t!mx3tikfCGKT! zt5t7m4>b8vJj`=5Gi1Ay?$q6*80X)bJ5m~UL2(EGV*?Zb2TneeHwKp+3Xr(8ooFL8 zqpeVd0OyKRK;oAMs6%_wid<2O013?$rB2-Treul$c6-yam8ikVr}MPZV?zn;LXs&l zidCo>>QT=WgXu~*G+0ILE^j9IE`C-$y=$t8gA9*a;nj?CEB6Mv?LKcd1S6pp;^XPs zT*qYzX=6|vfGNQ&$j1`XB`b_Jd5US$T+Nc0ZFphsoqVp0&6+a zzq}VO%5uG{n$(jMtB(9)w;DoYi+^DY>jwroOlFmWqAm|CL8Ar@bWZ9j@KTa!Q*P*YE#4cI1da!qi7~-r&_k~0k z@u{QXg>yDhopzYITF<;spQm26wS1VCGmf>Le;xqG0Q9b!QX!GpkCDE$y`wn$BPl%z z&0*OOoxA&1o}Qabskq^ZG*yQ(unLXWJo8gP+b16N2wXAx)7P04^IWruW%Ku`MHr_K z^NQyILgZ3gefA#o@Cl~I3eCj;3_fE{UJo?)8(7k9piH$J<^z+?Dy_2ak(bcau?(pl zsyI&DmK@VbSVl#{`F95&-sd%4=tkB2jsHI*hItnv`Ob3z0 z3-?Vos?tW?YHR|N#}!iLH^k$dZ8d1|P{=-0*0!MeW|*1dJ|Kt5)uzek)7t{GYoqa$ z20cU)IBo$Q@m$*;I#=mP5-FXyr;1<(gG=pA&JQG05VY2%2VjYYTIj(>+d)p#3h$_e1r>+5w$k;f;cM^H0K!KbHDO~wxt<>)8@ z&yJ(5MbF__o z_2zx9d6|HR8IPKoNj7&{p zT@D8ao-tTDv}Gk?InNcjoS)@b+R5N^&$V;m^qFlLS-|3~S;>o}9`#JIAYfGXU-9)9 zJh3(Ckj}m^&j?~iBeg>yA;+d_dvlvq`gW!`!RbZFF2FMo=j&2q6$P_=n`&(B`c)wi zOuR52mCoG!vuy&pDOHM{rm$}m3Ap;#r-OYCYWo#w$;qVa>qLz zrAraZd)Bbr&SjkEgG^&j;{urD2dCv)86qhTO+}iK&JS9TtwS|LQgiQ74AjzesC)2h zHfn|ZDaqEF0H+}%)2#>@WCM)T(>tlFgN|q%9xGUxNVqu^)*N*dh(_8{0Y6H!5-B}# zlTiJ5sh=3fPkM(n5;Q|tV0~%>%N+Vt@5tt$Bc2Ur%}@?$z>;Z$uO^gm!`6`5YCK|| zIW-)7U{l8pTExahg&!_yt=62JB{B2wR%VD?bJnBB)}(&r$u#6{<6lI**o`*#exWJ-DHde${4c zapTfho?20C_7V>;L}Gd=}M=bdeDT+Dliu` z@z$7!pw0zIyqeV+vP>PHhe~6NkLgkmyHT;p>560!$a2*cOCaW>zyx7+||i@Ct8?K?wW%}DI_>9*0MgSn7_|m5f)-FR7Oma9Ht_G9 zfV~M}S-u?5C4s)tG4=cfY3sT-_O*|aB-mG;JJT6nDPl2~Rs}m1th=p#7%xO;kUHbj z)~?!VzhJcxa#VkK^IYZri#(c`+MgqT%Sr@xcG5>QQOz3-j5h;MQ)c%ecSdFDj^?Y_ zLT&95FHV)42Zt^bTo=aR?ap>~q%?I=kc*SR9Zgjl?Xul@C9nq@s!8CIYd4NI!!Y8w z=yZF#olHgLH$QpDL4!ae(NF@uqtsN9`2uXIQ7_%&twn5}UAm#k!s4-CN;cZ5z4P4g zepAwr&W?M8f)E}j6iE8Fl$#8DxgGIWui9J7W`q;Zdc?BO-qup=8Qh+&+nNB? z)~;?}Pj$1&kl?8t)>ZsdHj+)i!W-b}mX~+TdHUBc;#WfH2;rBUS2~5{cez>ucz!gv)3-nO zy(rYI<4Flq(z5jX#N_4j}T(-qLp2NL4(`rOUdR(((5HcKc)zU>PSlW(B z?Zt9-nvz&Ck;yDO0bM?uZT-D!vx#<-`~dW*bmYyURx4Iu+}%k$%s84o1RM}@ z2(GeU2XB0dis!IBYCrfw+#i-^&$*}Uq>n~8>O8i&cf#7-_X^QT&clzbcH%^lFl&&| z{5vk4aAav2(2n@6$!2IX?ONK)Q^&w(sywz{~p zWh=Xb(W|n*ggWml&s>VkXklUVf$vCVs|{uwl|^+So2F}9Y*^iZa4VZ=;DmyQ815 zqLZ=0Ut3)yjAlnX=QWKoHctmN=`&j-!)uI#SrqDh>-8$Gg+)nUsit3OE&VD4?~{BxFnuP6Z}wO%x#1Et^+X5A#Wp zS-QQCm8(38enuTV>b$TZyB7#@!MHWEtXsUWM{u1=;;@;~2649&GD<>`$5UOOg{CiK z$>cUOToX^Wc@U04#diJ^lXafmqdCvxSxx(<(cJ5i!l`20ccD(x{Ne4k>q&dQ5O^nHSykus(I5Jdw zRuvhn2jc@6qi=J~Je&$nm64%J={{_pD?VNiOrEu=a4@{qbb(m%D_EIGro(m(KrzOky+YW%9<<=p!f09qN)I(WZGbAUH1OCw)gnu!`0i*Db5+A`qdZk6BGG~=3E_ziGM)L9RP?lrB1lF8(3AZkAeW)VZ0CK~MU{FYAayFxWHDPS# zJWzFOc+{$?II7ZWbIXw$Rt%a*3V8^*nIMQ**$vnt~`Dt*imvdr4DHwBSaR*%29w6Enr;0 z3!XU@(=g!U(z0$K4#yzkxiX1!L7HL}j8ksJa5Gh&3}=em5MW?rR5Cyb=Dn*N*E##h z(i>SF{_fuOlc(u1+{5O~2m_kd))&vchQSXXd5ERC{{Tg`@>8pDPkNao7qQOVK&qvY zPSrRW^s3Os=1IqD+AH$yAe@THw{NrR1~b6VA4IXa0zdB;;+ zYk|CTn&0sB?{9pPMsdjLPAbE5a@_UH`wOFKCOI2VO7R_9HcRQlj1b1XhTFv?T0B<> z#e((4c`m(i9mb_Jk@PNWSFr{xCle|6u9+~=udQESz|Odiz&W-p0UHIXOM zxTE>kplcS!;>t{NM@sYZFzh>u?!$ZrVVu-$)}Q&)58^9e0ZLe|)*KK)8T!*fG^deC ztCbm9-1R*VP_nbMNz&z2n0);8sV;TrVC zeQtHn87c011anV#yNu6*f4xinnmndr>{&;4%~a5z_ak;rM@rfa*U;7+sKeSbm_y~x z$&vubz^Zz=%qN~3jMcZu)MfnYwyHnT!5+0yvShh7bId?GtwJuFp)KDek zW4|>$wpQsqGm1@A19S-f?Qqxl(WFf5VwV))xTmUT(y}Oz8L90UrPOEMlV`0e;bm6N zFlZUw+Ks^*K9$&LfP?tgC#A0VBjAJ9yL}!OBmksm+Pu6~dn0;u?sT?aE0KUI>Fd&} z!x@c%U_h%S;|Jy@zEcx~tzM@*B6h)~tZ{xVjEm&YMnPPgF4+k6uFu4v+`5=Y;>V?O zlIil7JFcQboY&Z8v6LuAGtrzFg?Z>}_;EuC0q8ncYoldhl~1m5?OYa>vc^JZy+;S8 z(Oo6Ci7f3u)s}Cq8IB#-qUoTZ`DJsg>Uvib@fI+2&Ck;~{VPlU6N@Ow-3LEjD-XmT zEYo#Me6BMdTWOdc|;L<#)^(x7nQZSL?%B`(0DRX(+T2PG*v(ZiIna*=G zoc{o|Sj#o2_BD=B-t5?44e4qAvg&z0gbL|AGkas<>7VS8$sl|UrL$ZSkc zn4L(gHdiA6*CkwB>&KFNGiR2281trjdw9O_n-J-W2>$VA;Ltk=N!x)`?=MB7?qQHS3cZX9&eRoI3K8;}KxLm1311MV0rjg<+_a~0&1EH^ zNq7ex>uTN&$_VHNDGWU0{3A5*C2`)Y$83b)@m4&rtHvpToNZ=2jkO@ObssZT!Nofn zJca_7UTO8}_8r=jsierI&w2-9Xl4c%VWs$7)P*#W=C1(lkH@X~vpQ6jB)AF-eL}^q?`x3V82K1f(LAaY%VIfI;=6 ztt}WdhAlTV>Ple5qL&n6fer0JrJ{ieMJ*WOfD^uG&w5>?^zBGSDcDy4X>*>moO<)= zLEH!2Z*P{LD-)7ii=I8`2R$lvu)BCf%WWr?MnT6~a%tDn5w_M$`Vmy2F2p*p?spyu zm>o1BJc{cxisO7EX?JN0t;M^irFFoP1|xG_^z@FW%42NnHxd0$U&@{_nuwMiP>;r# z((OMpBK=ygnH+X3?j1W*mjv>0S?zso82Rrl*Xq?-^}RAMOX_fO=tVAcK2~oaPMFOy zQmTGY#d8w)w?sqD`Q!VwPJbL|F&z1mIURwi_K19p>kBO=^&IXM#L4j!NKu4>RzK}k zNq!|;q5aK)Vd`l1gXBE~T}98%xgE1XxIyZEg1pK8CSD))c2O_BDhK$7tI79PH2Ml& z(T6GO4Jyh%)w!mW1b?VM@GA0IylJh=_ij~3d@d>oyhp4_a-vJw3Lc`Dw2*S1#k3&e zDAVz#J;Fu~>xdKT)#j7l-59|)GJ)tCv*elF^6uF6H43Dd+DEE3uV)gGCZ}u%UJX&3 z#F{Kz$*Cb9?3(hc?6Q2vHI!8|)A6m;Tk1*c)A-lJ(T;CqZ)K`a-u=32Per zkyK>y=C;||@vos3%+dlV_HhfF@_55qkYwER?NuAZ8nmb9zLVSrHIxlM(=?nAT)5X) za}2f2r2hcDO;vNlv$r|PZnZ76d5CeAse=67DtS;`sv<7jsr>4ruE`3HK=n1S6P^LA zyQL{|z>HNu2*KpiWcH)df!4Q3knhye^fV~TQ=0(Q2u{>ukPd>3Py)Bz>rDU?OT_?Y zfq~J^rT$V*br&B=Ay&6qpck&!jOujgdsWNx(y0#{{Xws-RoTb1!(B96uic9 zn&HROy*ryxm85pDE_!F0m?#6KG69&^p0#6cYvrcTK?sSJsRVw#Y0;)fT976yCdwiU zfIFI9hl-tJ%{76}IqOStmE?;H(xKWjT26z>=Bfn2;+kS25&ZN>KX@}!mBFS;xqSLo zx4c9IWh#a0W;)R$3Ncjfm*i|#_!(NFBCo<`E`2HO!sopU!S|(Z2Q~CBW6n0LN%CX% zt;QKeHG`#{&~sf3V>aTxQ!tIHv(ljN5sEpf6R4p_9Ey=fNB~!wY(c38+ZzG%2Jclh z7`IynUV{~-s3!YOz;Y^~LoJpMVa;n!TM3zVicFdH?^?D=iHPV=HJNL~xc>la6{`>; zY}W1SAiWF@T&5&M|cPW<~3q7ha6RXKzVY+{`IXrUnwPh zReyM{dgHYvnao>HH7)4#Al=StwVPpxtrD^V{{TqMLWd2Coeosg0AYxyQ{g~~7}V-_ zM^&?tQ%B5r&0xkjH?==G?NNh_`cr|;O@LN4BOU?fp>Mm~)QWQ$%^(5Oo+=xVS`t56 zm>WzM`LSgl)(p+NO#hE=CK|mh5kfkGv~Nx=n~=KyB|*uX=_I zZ68XUU{qWN4yKu(-ilMihMIBaibE!DSo+gOOBz-^I~oVIND4U5G$FyD^yn$0trh{t zhN#`J53Neo45J|P&1nEQ4;sU_58Pv#;u!qZ=^iq+GFUeUJbzmAR^WqQq2+T^!=uW? zt4uwqc_S3ibJCxh^p0VUGuDAh=9&)}pa+hWgi?-_hl5N2(bukM&PPfy%`pdIMrml{ zbx;U8)5?6ArhXNpZ)$EJ%KM5<*bMMJ{{RY5I?^1Yl|5AAjQ5}f9clE^aZ8`2059V~ z0)R#{NznAF0YJ?m9C}mGWK&N+g#sFQpdZ4VN3}GZ8US`Uru$QdaY@d3paL)qk?uHM z!zQ(_nIyLPc{$G&lb#2?YTDVE?HS9S{d!c$43aU79+aTx+K{dtho=-M&wgkD{S%(m z8+H6@b-`XuLck84C^ zPDie5iW*GR<~O&Y=B2hQE)ebkL8uAABi@8^8GddvUFe2)Rwp)*_sFG~5Na(ox7)9% z994-&b5v$YXmj<&3eeo#hJH#y^)gBT{Pumoh)axi^r8KM*)YE|jQG;``HbCXDAr9Uq`15Wx=5amA( zlLO8`}WJ1H`$>~tHUs{=m8K?;79V%H!Yjmg^8;*Y} zu-!hD1egcwSu1<;ECz8?0qcs^CUQlD{w_*QJ*BN*{a z$f*wly+hu!Weyw~QPz{UT08MTnPNUgNH}3ki-FRg(-;+^Gi2c8d(#+aH1!;F){**S zp{gXUAiz9wDlFjC&N$C^%^tj$+S`*B8A+qSeKQyf8k1}i2#QtayOYWA!n9Em$(kQa380c8k4#Gd5UeOlu7 z4=mcm924_s_6eZ>G#(r)Cuw%qIU1C08LlKW7$uvIg*Hy#JAX+>&~#u7CFM;H}PP|__m z2T!yiI}Ug>!o%X(Bw^HW!!?zw->tNJP=I}Fb~qL|)evDv09G!ipd0I@IsMV(iU6gf zr}mN=Bp-FQ)~&-@Y0#;dqJ!&KY^))%fJYMIs%pADwx-dvz?M$H&;+O=c$K3AW->8c z=DVw#U{V}#-1?g7qk&?GB7hZm09QAu_;>9W-fr!v+>$!xfd!Sv+w7J`Ql}N2F0E-5 z^4c^0^^Y7^M-7r&M6sautZR=C+CHK7yk=l}dQ$=OTqUF>$>~{|e~A3c{{SJIdUQUb zwXSRh#k>t zKqDCyou_DNrd-J|k)(MJcN#!$-d?4oF79!(b*@U=#E*ZgeV=e-&KP=o*2bl3*VeBJ z@^~NA>t1u>dzQB=0DKl4gI=SlY9bHZ#=E5EyqCn*mls#; zN-!8I6#oDhY|u2!X*@vnQqaF?sLfZs<)Df z7?t1}Zk?$|JglF>Dc8)Kh#hlTvXO~*7;c^GGD1^|-eeEggH$f9)byxjnMPc3ioK*< z71Sd>p0%AkMG2&|k=E@o$nQcK-TA!wiW#%(S=ws1#5#%q^- zUQM}Eg&nI#&sQ@>suO7G&w3CvMJkZz1k(Wj0PEEEQJCc-t7PQorFKVDb27!OMo0BN zmChIaD;`1ZO0swA z4OF|FM!`=2)`kVUxubhVB!W9}T=X{&9#x4br@y6Wwi?)}<0MvKwt2$~V9&LC4CaBQ zb2jGX<)8Os<=y#;)YKviYLTxTW|L0Q^$Ux?`0$Xbw^BM*-Oq(JTbq#OHbSa6C#_{U zBX~ulg1LymHmUi8XBDSx?{T3&nfKHh-Jihj13SoadY#me=_zFcL`h|C=CYKNHm4T1 zJhIbCn*RV+`O$< z(~S3}80pP07XuVvdeR@Q9A>y&1&=9ZAxFXzxH8`Z8^8*!iocg@!8+Nr)^V z{cBxMHO)QE;)@}uY@TW)H6SE|S(Za^GM`GxoczZbt(jLVSyQGP2e_@EXCjf2)aSRo zBHaG~cnox@9Ah2oyo-^=QJG~fq6&D)sSV6~FjQ7p`D%FBFrW(t@;v8mDmJ@}=W0-6 zQn(rBqG*bfng%%C4E@i>qG?%=Oj7Ls0B5f>Z32KGeAFkcO(P7Nhqr2CB64?+O0F3aA~0n3^GdG3{~W@UaoUl$59G?Mf|CrebvtkoK>cUW^8?;)(&#H z9jdIl&KQW0AFpbpmNK(`_3>5~3ushi-!8$i?N2IR60a&<1Vz%%J;KGtFJU$DM$90;vImTvPasqp)@2 zlyS`D8x&v;Sc9^J` z3X6}%uwsjT=~(i|IH_Pzm2iHQji^Vm?m2(G^5(ZE7?Fl6J5Y;aDo`WYB9BSBv?X?vx7NIi#BiiKtjQVq zGo05^Z#~i`P;F2;isUtRXS{cAq@F8Ru*`x$V0z%!OK<+6I^wy8KQ}ehT4k+M=};m< zfyo}#=Q^B59Y$sCn)GIEtUFf?;yAYIOyK?M>%%^TGZ*!wJt^HjwAS~okqj86KAot| z2Z{hg!KcFCy&VNG(#CNA0Hr6e&gVj4eqQ3Yh{_t~v^h4hAME0~C307#aXrR!x2j{* z+w`j1m& zj$d8$GUD*guw_oa|1plO;6Es+ZG({U!U1F)ss$E8o!8LG;yyE?mVa@y4bM6qFdVRKfO#*#)b zj>G-c#c_G!ipo}f3yuaU+nDTR@wME88>Rdk6;f{$-AHq}`R-o1wHf0zCNMEcX|cD| z=`GDUHS3pS$T{_@((2a__edXwR3f83l=+%2IBGqM2T{2r@0yLSWsr^T$MLAKgGEi* zy2I052k&A!nn1*7Cp6kj^F_+`aa$r$$)qS3ts=2eNX$(a7bu5{N(M=%5raXZu+S+< zsao1)i_9@L&rwj5k;MU{*gfbJb4Fs1}h z>#Ngf_6X$Msz;?f8n0^Gt)o54ik`hhd~CNAH#DT;lYlx?v5`RoNh9ABnJ0|mgOX?i zCYTNcuX<9%=bB+Xu|Vd49;BaoaY6@5jAT>%#xwyOfR1SfPo+OO>&+%Opach+Qhy3> zdI`kP6X%W~7~*N5HJsl$ODy1LA;8{BSEuI6Sd|)7qi5OepoMgQWu)PAFM> zcBe4;bJnBVpK1V<6+cRI91lu^rVS%Vt!+`%k^sO;)qn@=EqPy%|XB=XtTBBMn(@gStlMX@bY7#2d+U>cMj*i3i zs>EZ~yvZ$3v8N>9gdCbsJ*haQ1X3-q0MVLJgVR5iIZ@dBvAOyRu2y9#i3}q&n5zqG za@g4fjr6ILO4KADEu){U3Y?!n`pq@FC=o#ETG9A_RFnQ)7=2Anz7y2gebid7V=^8- zg6d(6kMOG|@Sww?{WBj>qA{3>7gL-vo}Un2X{_A)Y-V?gDPUX;^acl;w7 zS`p^op*?>6MD`vSxBK@NefgtbY*#A&G1jC%HPQSysUp|)E1)-APFud#s#Mow z7n#+4PONw)RUf>*jC$0g!diS|_u7(w-&M-TdwRrqk3Kql)nzWkP5a4DuOh8eU5ure zR((#9JUO8z?f09{v(x_ov%EJEnttX6i z+0It%sP?KK*f-?iEuFr#D(D)rkNEWK=xOp2=W){bgISaiZ)F+o4OWu>08o%(OUaMX zt3n+UR#Ss!2=C2WUkqGIz_Lh(&~&K_ocm2X{pqAR_ofxx+?F`$lUwt6R{J1Az@PSo zG&G9vxGV15)w?eO-P?WZglzCZp^YPkdnut$opODuu_aC$gYRCOCxq@J z0JO=EOjJk0v9jfvAL~)fJ05czf(=}=g5u(J7V(!OziRHsg9O+q8Yt^m;qZ5t4&OM( z>$8d+vI>19jzza!Vqd-e$g<2zo+<)K??^jI4Lw(25lVUr7i&! z{8D2*sO1Zc$25g=+oeCappGf>fe~6o6(a&gHAl@yD6SnlPzFsnFEr&tp7dCE6R#t^ zC0=sq)5u3M>RbeAO{k*mK7e)g9<81LTb2oq&uUw1>WF`O9>q*hv)mL?8s8 zT9CxsI#YR8z%?qfFrvU#an5sl(A8LYh^mbXB9W3_Fhd0P0Y-t3w^Na}{ffD_)O z36q+1YBwG@skR8+0FE0xh(7h64eHPu;i zg?+2$vsl`t&ipg?Mo8<(!$4nlTrvif_=canqOPGpW;PP{dxS86uz3#w$(&5(wttQ`- z0;IX*r!;_YD;WVSJjc&!k$LS=+xMwJ#{gDLW1|?SxZ;{ReJNXzMMDB!v4hr{4G0O3 z29SP~fO7D9({&NL1#j-sf$vVZMr%`^aoVn)l1xQL`Rz|Up4C#{i96KD`&O$$Hcz)b zPg?7!xmb~=oeyfS(qbxR4pbHIP;wiS&1Wxx0WLBPJ_E)npa8T)-!T<~D3F|SPF#v> zee+5P_xvdU?BrA9KPNe+deh-N5#FQ#U{dz&Nzh`9=N^>e?Cu6}c7o}$PtDIYY1A0= z?Ns#=Ov#Sz%}ont9D0iH#zNe(T}g<@y*pIkbKaqd1!6tw#yi(3MR`WqX)}{ca6Wz1 z!P7Lroc-EpI5fRusKGrBDnOSx98-IPKs-`0=}y2($BK!#YI)@aH1*GVNDMC$L?p0c zYslG3{HHlyGHcoOXv5e(S9S$>_1Xlukxp_O2Q~K@9PdYz^Ra7NmHJYOKN@<0n)i+& zhov+Mk+2697kpD-NW61FRtV6TJhP8;S=sz$njpF_Zmh#ZVK(X^+DmaZZHb z;)zBGIG{ra%_ceKmW+E-033r!fIHHtBme~%pa2ZlMWG;;#k0>PNc?M^&l#PhWPehocaAB`iQZfSuYdUvNO z#WZGsd7uX|=cPCBrxBA)$3I#Cbtg(X(ZwNyaY#5l>CMd`A6fuTO#+>dm!&eHj0obI z4LtHXQvt^mfLt1SC?}pNxy~s)s(_S?9<)tc?ZK+bHT(R;+}O4QPlK*yc*M-A}Dkw;^X-)xyAz zIi`fj+;LetlAWK8YPmI?se$F6rFCItX_-}5iHsW~(wq-97voP+&-AZmEaH+U>N)F9 zPrXbWj8m7E?OQ~~MX~pB(wf;LgT*THJt!dK6|spEecFhewlPyl)0&08^=BhUjVF&< zi2d%BE;HJpZV$C)Xn=8^;+Gg6^mpQv4m#39C5-SrY5i%D9y6MG9M*`2Sb*ersgFJC z2(krED^y~}u>4I_b;BNN+30<$tM%(r#}TKe^{7wY>zq`~J5)?SYR#IWGJ1@DRC7u| z1Gh>;#Ys$-Bbt~T)DfH-pFCsrtq}~GEQ*kx4M!D7PD$dlF?*0d4Ufj4JRJ6`4r;mU z?b4z~kr0AcKD5KupMnK2_37TTWrlN_1tH*41JCuK3FGNffK5XgH83RcR)}SY!2Idv zqKstYo@!R$;$}`usM0)yEvMxqy5^5xC5v)!sK8L+ZPI>gGi6@*^Wq_s6){u6k z>U)|2lf>8^>RxkEM%bwjBR%UxX33-AQ&{Ge53M=4HAEHPr9qr_spaE5=Abo2 znO8Vm)^3e^d3C5W;Q1KCXQq2%wweguB9bU5cp%ia*3sL>5+DNl3i(6a3#+*7?b>-V z5qjWMb{dQtj6QTcu5pqvQ%oT-v~pmpbq0tnqJlkl~?Ho1v<(TEP$cq);=S1t29K zEMT{%YRR?NKGUc@u(p)|{x%#|w6dgWmN@pR@w8I>>4WYmfLz>&Au=A^*Cu>Hb0(&W zgDbnHI*RM1g=USB##D?}ZKjKFX*Zeoo1&B0QUc*&~CAi0thicT&oukOgFEy8IfR<%Au|bAl^FQJNpKI!S^Xu4@+7 z8+bXlMMcj=rZV28tP3c{0StNfH5QAlo5@-!TRp)QUr@69Y-_juV)UtWjWulx9A(?R zA(}e2sJeBjlVM}+R`ffk)a=sXk&}00LnXVat-w;g^}A^lDQ=!tHW9`>DFKUrXLl{y zA}%8XC6BFXL>EuB2u~xg){^5{vWn;Itof6s0LiRR5?{!%?2mUToR3-oBU0YpIpjAP z4ZEDvbvr8sxASI1R$P@PqVVK%N2if4?W}hu?x1>AUm96?`V7)}g-AodpiJ!_f0j|3<{1jTDNG}mU-jH zwaT_~7>w5c0EX@V0Cw(1GT$%16`88T_FYa`x$BN=d&BMKS!dCWUg(ox0;8cL(y_I@ zC|$-TiE!u-*0!JNJD4EbF4Bd4WuRgIaf zSWE+Esvz?26OJ=eJg9n9TlogEDBO+6BW+I8VR@{WuT)?fl6m*G1_1P?1(v%iep6NC z)aH)|XlkPKbHS#TElG^AF1PamD&y%^^#1@5!yKDi8&9obNSng~D?V7A0T{@sV?71o zu+$fPQUK(12C}X+xuEE!)SjZbSZ=1a{{U3%htL|ractvH78P6;G!Ift_Ub0_gx=4nHc!p4p(23@cYp z*KIB=&c_~SrAu-kxsT>-vFD1`6V}FZiAPLSKY0Dq-nL>;>=74}#bri{fbIP2Lc--y zkTJ>NXT5qb_)ZFo-!);f=PiIJy3*}u;kow)ta*TeQI_WdvUOxyqXN~QgJJeyr8ge= z=C*9DEiD&pP$G{&Dvg8wF+nzV6&j&WC&vr$C57v>c@s-I(A(lrWV| zC~KUKd)8&h0<{heWZyQ@G2HW7K#3IHvejLVSaVYoP`SlfnG<04$F(#awB}rAy)f`` zKo(({ax#A!v@qSltgYDTR-m~f(5CyICQQyUb- zLgPISE1}cWNdj#>IK^N$9V=@=olK@T9=N6=-OaI3&DyfAP?8OGw>FGo+%f4`lfku! zJv-Gw*i9HM<_~&dSr21ZWX07T2_qp||N7lHid`8jOUI3*O-)eP1LXN#De+of>X~UdV0KJbi zqLZT2faaJIARyOC;cYJB>i+=kFu~@cjk!HDn!vS#?Kcs@y8=fFPo;Zyi=vGR!Z>Zw zn|R&38LGX8ku8Roc+QOABB;qwYq8Q*QW;R3hU@jNe%Y=IF>UxKp%v3;7H$mkK5+j4 zcPFJqNnF({85*6pmiw0;^_3!S7{@iau0=9kY(bSBb6BpY9`)ekAm~?(NSnjnR%JH1 zjtJe`7*Uh$T+WnNRn_Oz8Oe-s5Iw0pS$IY);ASr`8%0~uY#P$lLFxxe_vufbH#p|3 z#n&VSW3~f#m^*f=Nd^=zpzBUD8?92|zlJlk5my!*in2~}?MlpQi-O3?IVQFBR10u% z-m;so6%s&ZTCfqae-v+u=rpMSxrvGrxz81Z(fL=UI(dU|t!*kzvV;ebPzj!qYjI~H zZD3a-xUGIQi&9{XmF-(`0wY#su76iz*Ez|-tvU?JZ@tsMD@jUt@pEC4w~7u zUrbbiJb)ezaegWv>EN$Tyo&7Z8)OXF=Nt<2?Pgge)Ffv;c)&H$hxmzRaml8?9kWjd z6vhD8VYhb0+-bwFO z-|rgePMQR4%y$u3Hw&^>UrOS|UFy$wDQVn?>(+v3Kb<9U9^iDP&M6N9f!2T*J+n$W zQ%L5Qr6Pr=D5ir-DWH1_Pta3GG~hU(jMl4T%c;#8sBj<}kT)OJqaO79)E%y$GfYxx zy*(%+G!exkWUMDzHqrhxVvyStZho|dX~V4q)pD6itXAV_Ij3Y&XB1c!Sg=!rO6PIu zNuPQN%_7rG=`72}KJ*S-{AkA%0nI_xadGKV+7h>rk;lwAred59##Y8kkkrwYNhX>-drxiFQ4lh? z#a;`ND=S8mcAFO7Yft9D#d=YCA0Jg(Y<4-tDHs%snszd3jK-g8Ok`7vW4$QBrXn&k zNxUxyikyHuR4#?60R(`Wcwy3_+EmlW&DV+sKOFsOamTGj4;{rnJa?ucr|FtwXB--n zAk#}O4ox8y=aJ)xlUP>LJ;l*4k%RhH`@9XqNTQ()Zl7=i^b`!502KfRtOJgjs-J7e z3WU-2#{-LIE%mA9NUIk;b5S&bPCu1F_Nm!2VhDZOtDAzXcTF0fb4#5EDR<1>&{Kx& z)>G(&T4)PeR|TPbg3pxh*m<(4nFNpM*`7_Ah@G7A{j5K)g zJc(rVJ*egj9jItX$z`bCYgOaTO5#_?R%S#Cxmi~BY(halApx4(G~;C$Fg*+tIrearZ18~^$SJVSssWk26(rS`{Yz}Nb<(W zV+siVCKctUU)5w7Gd4ZV5dQ#b>P&yqrrV$4YMaTFnny`<;hS@E@;&0NNLGxr1PC+*TfAWWi<6%mq`%4LBXX^u&5@oQCERCz1-V&TBz5_jMSyL-<#i!K>d} z!R1A8%79=GO4+gTuBB=Kd`bYuXy##KxlJgyCJ2Z81XI^YPNpaazS_>xykBj7fie|* zR=evK$D*$h zaW;KxzKNSDFuCQOXw>MHu|)+j;9s z7n)q5ahqtxKNzGma)8bS6yh_AOj57{`q12(P(7&|tyP2|sWF;h>6(-btx`ZVb5A^q zW-;3pAO{^O*h4xB2&dzk0OFr0hJi}mDnS{?Ow(9morXfnNa;wR=By|Hobyp`1-PYP z9gminMMwsFQUEhmVGUkINCs&E7^eaV>CHO;3=XupJ*mo6ADCoN#1p{9I{?q)rN^~6 zf@tr}I|yzl#(inTW11=02+9*o#tlo1Eku6xD*-A2xKxa#Tdg%P7-O|bJAA_(DOd=} z&otn2ywhpwnHlt=z#^$*@`?z+=~6@)xLQ|Dj&sj?b^^E@;PFmjhU29!cRx&1h!_~B zVF;;_lR-O2JW_%qZ(3n(?av=dECVDvhEH0L0;MDJrjESQaTvkYl#Xh6!j|bznHTs+ z6uCumt|`HDo_VKj_NN5ROrxPmou7xL4{iYHyjN2ajkU#iY0lEQ_r-S5WtTPZnE3Kl zX!WSO#Cj$grYoM5D%7EW$*(!HVTz{}9K&f9K0DM`Bkr6U(vGZ5f>?v7&w7Yk?C+Yk zK-#=h3i?)(sQDB{VlcR0T8?r1v6{IYMbzS?0^ z9JyZPb*d78nv#akCaN|O2BMp875nE06)bUYjAN#1O-e76ILFJ)Ewd94UrzO0@0141 z9@JdWgDZ-bWhN7zqoqe5N>{iKh+(QiFvg=^7;{p%kxxoj=M>OLsj$b6Y0+@h zz(C@FK#*pDCOvURawuX8W{~uxkQDDAEh4^n_o<*&$GuF*k{mZmt`C}X#pailv7E|QYqljPptq~xn0n(=jmQSt;8eL<>Lju zY<`vOGI9?*VAqy-sx6wLxgAu3YwB_emTo5=EnYV{{?#Cig;pow0l*EmNWAKQc5_e zSMOBpeolMR5eOXjrx?oh6*ix>ZiadJO(pNkbB)~=gakbR=94sl@&;*7CpADOc&nOZ z!a13LyfIX2YiSkL#OQrrJcJRycc|n>Q_e9~;UB&p)S7_9De5a4jHFQ_o}(h0pRGB1 zQ2-~6eq+uuFq>oct`jwsJ*FWgia> zNimVv(zfJWk3sKQx>kX#>G5v7w=tp5UbUt{E6)|F79xm#^i|{jMNv_Q6?6{t2w@o< zb*eY(m`~HSXm_fYe8#{J#AoQ-mMdnTBc(mu5dW2 zvURIX_iD7CtqdYZ*R4eSl6q8`BPOF^$6Cpnp@$ghNkAOZ1Cvr&EPlPJ$4_digo?5E zR0_02i6TESs|-d4KPs;o%VW~4WaFnbsxV{{R0jgAKOIF^BNZ|KPtwsLAH&&|@OZV!6V88W-`P!Y~* zc`=__fsa0wGBk+NIH=fSq&+GoBi^$t260AlNDVG?iV!krx^q?u&wLuK5y{3X#y~xB zS|d3UMtK9RNZ98X`qW9yNcBV&r;{P)p-8;uzS_~FIR_X_cCGzCc(qS6?_<3| z=RqXfH=&Sr?^coUw1!u?)h(^=65dwY@_pQnwQ)9;$mvw)g4X6$c@bIH?wYf}Ob#dk zlFtryF$Xl{RSE(QJ*$+|VZ8fuq+yu1KtIO1TP2Y#QDyts=7AOUEjV7P^MVaKPt&8a zj|tSA)E9b{#l7-Ewyx;R7jUgT-zMq+tEk$|cWz^fc8QPi3VnsU+S>@8Mv#u}S=U;~ zj^$!Qmd~YYTg)biJ~2QUI_I7u{n%rkn?*N5wYj%Ol5NAx=!dmyOK}3oB6d*6pfxA} zFC8cYJ5{*4x3g!pi_CvYH0drSvsb!Jl6P8`;{F(4YrZqbHDPed7;+DK0Ox#1bv!Zc zk18?Npzzwx#pQDTQ+74cT-!l#swP0ePFFO6Ry5kU0)R3+L4R{&Vj9{LBbLV%Qo{D; z_Ru}ldmX!0mF@HqVmB&FQlx0n?o4ew=9nB8iKd;d%qV+hSD>n%9b2-lBvvsFK5n_L z`uj(;)I76s5N1R2IG|>$Y1YzRHNvX-r=8VdwCj10d5fHS*Eiw4MrrPw%+Ji-52bBu z7WdaS=$3N%XLd;k98v>OR4VOJz~hSGJ|=7HXJBm<=OYC{``vi{Roz)fBsS5BiDn$J zuM_y4dM4IdBs~T)I%hP|Co$o>Lw~L=@=5|rW4R|k(!FvAfh}Z)Gy#=xE6@HP+6R(b z**G6{djsoTNRm+ftMtas{iqXlQcAovHmVk|Dt`tC3xo@pkX@ET{s+^EOsTwjyanhQ1 z8EOlbf>7u)&2%wb31bCYHOj_D>?sDcEN+ZPXKdCrsoh+-NZT$+!0S=GkJ_FX6%0C4 zBq0>@Tt>uVLJohGUW!JQN2siql!L`S3${kbtpI39`6r%gAvjY^BXBtDRoz}T!vZM` z)QV{2J6HjphNNqBameDb1F*qUQ%89sbvdL3m($gU(xU#(Vtwh$s9^G$%{b}=jwuWy z)37-|g-!NUkFX}AO-BT07|%7Q1ooSh%2x#SG=@iLuD1&DXLqJ+wbLy(!VJv7uqx3~s3uL@ zK3|lI!;43Id(~%^+^c5|UX2QujgAViw61q5cPKwfF@sHsvl3^L6bgB$W~k7xZM zD@j`-vTTSgx1K9e2vbtZCmE>~y=pXIM-=>b%}W9)xd-W7)~=kjbnG+Iur)}xGY-^- zaCfIJ%ZkQt-OHa!=xmIAS)d01 zx$8j-){|x_jM$_hS+=PnyA1-#7fkaCfX~fwv8k3+Kr&geiuEfS23;)#V+4-Al^snN;=ZOdt|^Q;8X* z>OCj{0_X6jEPFsC)QK6uay25gGQWTO`zMaC6##Az_cDMBOS@UCo+} z*9%PvkT+VM%6Eq0U3(g?PEYvL;y7{Wd({Z^%{A9hu*&e`s2;VCsM@r0vDimqO=f7i zl$w3QxciNO-u2hqBpS`D$!`AuKX5&2Z)P)wzPAMfE=D?<%rW|k>26^t&l|5j2sMK` z?2wLe>T75_naL1@0-U6S=|H2Yt0b9Tq(8Ue_s9Akk@LvRHLicY_sA``e~ zfHL(HnW~LwYKj);iqFaKTy;Jpcx)YMMty0%^q})umO7j}3TQc{80}0$hczOOK>k$4 zU&g<$M-3_%Upmf#{3U%mU?#eyHs~M zIImUF^*3v1#LOSCanlr3i&~pS5JeofQ-+Lf0kGhXYero|`zAF`g}tj%&KM*P@RZzs z_pMXDw-Ua`h!8pxS#DVk;A_Z4$iTiiKGn`$D1^JWMI6^vZ6A~scmo|Pjq&87($%eD zSMx3i3yS2%QFUNkB$3MLRw=A&lip0n%8j?@-OQuO(I9Mx8#V`?L}4oA%Vnzb4ZK;%}4vAFWo3t2jK z#YrBUaw9A)WY4BL*I@@2u1B`uuccy@;<~MCM%8XEH%DP19r8tGpAGAT@uta-_k~1| z7snLgcO>Q& z9l9y{)Pl}wI*eC9wuv9z8KcYW2kBcn?UG_Hl*b#Kf$dhK)1pjgBvzVQO(#UhrfPWf z*;|B@e0pHTPgt542{!~0vp_y01aZYLn4dsEF($s9GiXhCrc=}dz97nYLo zgH4l@_*Chof%o~Xdkrn-i5N+=5uTNObW`3!e+ptS6HbW+a5L{yh*#KRw+@bsc-$M( zqZ$)83qA<-6zmr=cCL8EE&;70qOyJI*CX1Ydj?OsLwzY&WfBI~9-_Gm^z!cAbH{4! zn$^c@~XD)3KU!NO`B@nrU8Z&pwEJEQvBSi@7t%6>k1ZRwL}_ z7mn3O7^NdVlqM@(+-ar3pbQ>qXe=;$WYNf{bfoJ*#L4YOO(>_ z9Mh;NX`t@Zg!@&yEjHs&Vz6!8Jxv!@7ZxwF;XppeGzT)jFH)H}G-ov-jgQ@2(+D}~ zK~@-Zjw!ff+*F%>w7BA_O2<7)3QUYI^B7$9+-px~Caq&1Z%Q+A<}oreK*!Rz~Ts63zLt=x<&BrpBeq-_#k%8Jv8kSKb5XfpZ2Pj8fG%gDD*l{3(6+bQ;+}| z#dK;HXgj$2*E6AM@mwj2z`IA#oz>8%hi7H`$h?0O6H!+iOAqeUm5&yrJ*?cKJhW;) z_!S#mz@K_#{OZDZVZr9&EaUs8ryd?qK6`>seWMk{EcXi^v`^KhW*hrlT;>)U||>g7<85vIzC1^|qIz-rZ-wajIhfPIE5G>>Y~(z$6D zJ^EKRDwJVOxSP?a+^op%Ln$M3eszm+D~yfqG3aZ4@qT0NT>a9J#1GEAPG)x4&zj;z z;7H>>^-5V>oR=i}=B&@fP>|-SFtJ|ki$vM)$*dWlb6{`>O5B~kR_C8e!I*r+=M~jK zq9j7ipW-}w)JG&^JW{&_<ygSRj__K(PkF{yxICY=Xv`GkppHkDIl6AV47L)N(76 z(zL|4xmRFJy)&BYWnh-)o}RRUqOIkeNoHkXhR9cd zW=>liPzS6m*3NdV!WQ(+0y|_o%!&`GuQs>S=C_y3H*D?otCC&a78sbQ>547~eD^k_ zY%;0reJhCZPLW{2t}Wz6kaYvSP`bI9qhM|@dtlZ)@-bXI?0rQS0*M<>G?e!|oMxHU zki)GU8Yssc(g87wLrQwlObrbhZzEHQ!h&<&y&gSP_!t2DSD0DOmiK8ZuH{qGy(dl7 z^xLQtUr&$>d}G?$znKtdWf}X7YmZ+Pu1E4CIdVHUwSi z4_aD7nnMBBm!%*h6l78XX+(O z>}jU#{{VRNMS$u~qCw^9PN|RiY6WtCYvYzboi*-5e~l{+=Tvo&ITKW8SOnzBk?mZs zoyKVULB|yA7dlqfxcMb<>zW3)fynDfmv%+y#8m9@4l*Xc+0%AfBOT+yAV^P3b{ zE_K$|e`-V2)8vc_$IxaiD>)=8e55unZ!T7{y3O6x>p<36E+<6HAP6Km?~IR448kr?MwiL z#wmX4)rl?QNcW_SD?Qvq{F`QnVzy(xgu0HYq%r>`HKAtjGA z2t)c*OgTQ4D`&2AQ9ex;0(4ahIHhBr-6)Sf8Z>igpkllnyBRQQx4Vz#XW@ zGfq5?lmo>L0M$5ZusK?;2Q@eVuUu0=L`bCukdA1KWq>>ndQynZ?+vzYHUZwf2HPSq zab9zwkeA>C#%t0n$T5$ld?s}sTI}^OuJJ4Z$f+^!NIsP&GNQaT&Y_s*l3*G>l_mf* z#~D-2T`!0p#c)4#aZ#&fij&W!Sx^K-XYs7KGM*P>_c{B_X%+%Wnhq@ zJ;gCZ!T_@8jxu}I_<-;EQd|Jg*C#XBqJpo>QAjWbGgGfhicx{mw5Ih2V`@qJ)%>ce zjlFSKbtODE<5}Z1^;lV6nmpRd(jKf5baQ|KuEx;dMT5!3acl|4t#!6CW;l;hJJ$|t z8`HV28R~2tp1zdz&N!xZP-)AbTKPtI6UM9@Y(I@>-%I|UiobYcKaFWbNnus>IME~w z23+xu&^QME(6frr?09b5s(vv^rP(auX6(a-lduE}QJ+h$P-;-7s?^IVSi4@iI zUqBnw0RoR40b57>QMeJ5kp($j_}wj1yLvniLFs)q#^A;Z^%{ zR%1WA`U(UVvaC{WJ*l@c31=_Z)L6kHkn$)(3J!26?M@tuuo;h~E`8|l#RSj;7=uVD z&B&x2eQE$zr}bWxz;Y?$?wVjmXr*dS)PQ&y2bxfum}V9AW~c-s(wOI(mlVetAK_WZWVY+({Hqyb?NMID(YMUI zezm>f+Y@;yMUhZ--QKn}&kfl}Xwu1W#e(nybTy2fn9;$Z&ILbhLWc*QamH%E`qr^` z6GCH}J8?@&qde6B-n5``P9rp6@z$k`VeV;1IOdcL&=ZP4Np3SXD8I%>Ju2>*7FFH3 zD^#@-zH4#^JZHUg)OwVPIKihaCjfT*Drlgc@wOQoaqP54Kp^0sdepII3y|4d;-O6{ z<%cL!9<_4b(d|@+Z@dTftgA^hR7qA)T&-V)@OOH1R6@oNsm)w~dUqHV!!%jzejbJs zWSE6{8P3|=^1e_)0rVAt;YroBB z@<=^u)-rM4p`8Fm^{r|ANSSPN5-;zV=e+}peaPE8W|%Qv><$Tz2Z2t`TAIBn!x*hm zi!8=D&T2zZL~&1JTcaj1sut^09x5kZbI(4NGARxI3WCUcScnZt}ximR+M3S z{xxXjkJhV7IOn%&rb-|^F-&X&PaxAAR!r6;SqGXxG4&Ku4srbIOC&@1;;ks$G2W^t z2iw-Hs2~76Dv=T;QHJkRR_(wDfV8eHV_)}*Tvp&`0+Ru-zM=BzFPj@4+EO%_S%Q#S4@6k-NyS8M>?%~~^L zQu9zAJ5;XSa(SqYCR{}A#X{p9_^GqT1w{Vk!3VRMIktrm8wIg)*t3(jV?rO6P6Plh+daTC>=~E)&IDSHydJ#$q z0+Ekug2d`6!=R?*XB49Yy&xrz?+kUTK-EM%=B-9ol1BoQ5%dktj@KHnxnujDyM60+ zB-t22&{Ze8Z|#9;v>4TLTR)|0%O96&(kUNzJlD$H_l#kn#5Hg26_NMnJ3Dl(Sqqq7 zXWqvZi*0==)B@$18TRATj;VzIexM={3SK6f{2>Vb8S)QSLxZ6+yhmQqjBw4;qtl=t$a(5k|$S0}HvYfp60+q;f-iUcz2Nw&GWN!$HmbUCY~eoPAF;PDN>zEyM^ zOL4c7MRelnc5XZh2Fwf1D&pe!4#T5%#c$g}VTDlhimz|1SzX*1VwoC6>Y&xRE)poq zvA`Y80x|Ebbs4od<&NYm3;Y7KSqnx~9&uU2#4tVglg`#VcXq8Uz>Mw$PzM32+234h zWmU)-=qs$!V3OX&B9N9V#!XvhwwcE$&N~jYl3Yb@h24MywJ&OLEe`05&7l3`MM*C4q7`<5b6wNB$ z0Odd$ziVq4*6H_4kC@d>Url?d71B&cpO^#90v#r}jit{v(xp`Oub#Y1s2lxWX-t_= z#klmZWAS^(rucSY8N*1PxUUbjh~MiGM;04%bw9;`ar~;HBdF3Pxw6wBjQ}qp+sE>* z>d$qaiRVnD&5lp4J4*1(X5I#N`Osvq_l-y5JFl?Y7#L%Wao&`Hv&p zob{|oSeM3X{--idSobHtrfV%6EA`GRYI-6Wd>ns`GDGtBrz?g|Mm;HkT1MI{dyqiL zT=YL$5czAh#^8Nw@QY&f?N#JJL1D!WTnbW0wYNvg{{VKaSVk{hmBIM{-lM%l_(7g% zx75DJGrUo#FV{WmKZK)J?&ic>{hbg;BJ?$k>@wJ^DdgX7?8N6j^-e`(c1IX1$JUy6 z16I>h{ojinv}2y*i(a} zdRH-_Br=vj8-^X~+%qJhqnDq0q@_1?rE%STXkclbC104|wN;kFc*yw)1HC1^{E;_Y zVzw=HXePjz1wOs1Sj;AZP@i-k#*jw%#t6-I;?CCWW-}Qb$TZnBKt@+-9@Qf`F$-s< zOB`U4mFBuH>=y@sO*wQ44o=>kC>f0czTgn!jAVALTWd)d_ma70J;|%-qRg1tA4<0d zhjS|c&Lc`gCeyE82iYIqZnd#2Q$E+==9zC{VP>B(R(^qr=A`>_GlW$b>5*E|pDQz| z9%Ns(;w*9s_BA0qRB<>eI3UyVGhHmfD;BJq6OO>vwh8sDC?9Oe*l*^y(m+6|7>l`T zM3J*k8)0A$rq(g78zuh%R4?cVe8rW^s#yijiwn@KGg?ang;=OlIY}zh<_A_2-;mcpN z>L}-;H|t)N56c+9;UFEBJN29?bLJ7*KEfsewtdSR$SMB-YGv)3tCR0i1M>d>O5$gFiY6M0h6R)gm|R72zb-2+;@UIV`c>cAWZFa}viUfDxM?Q~Faexb&sljyb6kJdy8A z1_Z!0R^;P7s{D(z4(6y`a@}~QgjEOLm0Jucq~eV6R3mN-JZo32uC6RweY=p}osZV2 zX}`RWn$}nqhC9?Tn#p}(tE#2WA)m26wSlc@vspQlK58C>3YqN+oyu4ocA`t0m$NWR z`+yuVs)Mr>k%%KCU~x<2=8{J-z6d{!Fx)xEYUsK#CrCzqV~Vg56>5i_A;mj;kTOkL zVl)-edN*1cRSWW(&*b$q^#pe&uHr0-n9v!IaZtzBq^c1v4%%?WI*LUccB4O?GD!yp zl&=*M$VdMGUX;1^rU9NfKb0!-!lT{C(wv8Lch6x>2+!3_~pkz`CaL#F<9=r;>r@{8C_#o%^kI&&$*97}lSKy5yb$wuYl6hh; znQ%MRpi1oZy&uDxJXTS{oUf@B;H(OfyO1KNQJ&;}BXBhzCM_YPPfEC$`e0idG(EpDHl-t?vuNXAXvsZzyGx z=iGSb-leMtF{LD;7#>#I6&IY=H-s1Mnw{RF=n6{PQ;x!$;=M*VbpHUd!rP{t?7%e) zdeyInbTm!i%Bj#E^t4+E>UEmtyJMo-7rAuYIw-Fq)&4MfS1%o`CDeEIt|!HwE4kOM zpAs;SJ#*H%Vsp-DxE`l%@s?$oO!j1_d}6%^!@fDvJVJpYnNnl?3~+1ap0zE#%=UAv z_VToHDad6w#Ua@G$RXXd@~!Jw-WOPHZuN~hz$~&E7eC!<;=Bv-AMMbK4NZW!A9cUI zRy+4wWr^xaXxB**i zK3c4JJ;A1lGuKT(MsuI7PPV9=1Q@Ga=hm&;**wY#$R40phz#Ym+yF((8rQSX*@o+r zu}^Bh98g(BxP>KsYYzVa#xO@Tv2AuLcHsp*g=2Unou3h>IO+#Afvz&nco-e4GEW#} zVk>6)nx!_sJ?1>f!hSU_L$M{fDJpu3>#d~Q60;uN>x65b`@br<`nwB#sQ&;sADt_X z$6I|UlGkehSKhG5v)i$XgWomE%dTIuFfstR>(;0}$N*z}7%PTC071;T~) z=CsoG7d%|ABQ@la%1O$*amGze{h>X%%FO(B%^bmF)*S9aR^@m0=DBcO=4ZaEDpicj8&U> z?wZp)w0$rdv8t~VzX2{yAUgnl3kCWRjIAn zRDQI$tt8Md+R>$@gnCs>o_YI2krs-uIP09(s()bEWS=REdb4J{tH&^2X_}@j-O?_@ zwrcR1l?+7rB6HQm*7%9-^cR2=JCn=R*E2ff)H#p+{`3F!;J>QdT8gdsi&q zdzx|+>-bmD#|24rIG!SJsktYLZ`iinD)z@(hEEV*I{yHzV108~{EB$xJJyQ}NpvCB zlP=zTs2=|4^3%wF8m?&@rC+gv=ufnfD4E>h-O2jXa@oNo(-7f@LrTXF zo=32!$c4<$Pxx0kB3pI`<;Uxq^x^lb$Nm`4w_2Gojldf9_3QpM`9Bv^~Zq?*Odf}5#|DYtJu6l7?VVppWy_W z^3Uvhlg57&UwOmx=EKI;!$sOyTyBKQdFWnHf;sD1}T!yWz+QlZtV8@{uubxq7 zrc$_UXV*26cX=Ft#m`zzLgnsbEdz{W<^zLV`B@!;;feRH<3e3T%n99Zgn_ z8Lmd;2Or*Xfm$|p5UUAp7tCzrDd;Ow;&hrJAC>?fmAZn7o$h8^Y1&*VzV>rBJu`qR z%j=p&s3`n}bMWWR^)^ zb1&gfww>+YH5TuBLUBk92Gw8tqdwJL@8_4$3Zlm+j+Aabv;iZtu>`rO&t6)SG-rwc zN?Iu>7*Z2Unm9CoN+=@+l7JnLtw{{hTgoJfu)?G5?L`1@j}cFCZ{$onb* zAXA09QUfo@H06f0Oe(+qdQT*0u4n?P{GIVn4B78i)-(gBH1L2C#Q;()$JUo?k(^cR z3~&WBu6?Kim{+AS$a)I47YjxJALBsE%LJ{!12tvs3@SH1<~_YB1fdVgd8p*Lcattj z8S6|!Ix-BfsP>bdMLK(hbB@(teh*vmJbBv@Kjm8_3RwNr+pUR+Plf`;S$ZZ2Tr2x^2s{rO&Kn5vs+LUm-3M>R=NEBn% zoy92p=&%jN80MX}jAz=NfNnVBG}@CKa4CdTuoX@z?G{&XrVh0>{4U1FZ-I>DM@<$@HZnfGW_1>TqerX`h8IPBFz$0Td1fXfy$nK!iPWOmWRh!w0P~ zg5r}HD8Qs6nsW5wf-q@_PvfP?qym?vFdQjOG#n1JA5Ln3co{V#E-{*oTak*Dj(Q3} zGZ>`fG;=}V)d1!L8O=iD12rpj6p|6J06CzLQIs^&Fe%X-ttnjQfsy8(ze;EwX+Y$P zL2=*3#wh1FqXZguDS;6f=9~zi;QG_n7Gb+QQvxjG>p|;E%Z5JGn4m(QoKlKaqrGQ29B2}mvtG(Ij>IBn{+AMV!W;i z79xa_K42@;v`61+ho=~?kKzh`@{#D^-j+47QUS#`2OQJKPipyQcL|KsSvMi4fkD6= z@kAulu7Q=1g;E&sD=@kn;t+Ayn$fvrDt4aTs~*M)8sxUt9M`W$l~9zP<}&z^u^Go& zS@Gqc%7t8UP~2ynSDSmA5H0|w$}&1r(;#vwvVCgdxQwkuLAP(EWGUwcw=V!_NX=o4 z2Ct{UO7zYQLidNb!h_V;NusuNmhsi1Z+|tY=%}J9%+GkXwF)lk& zsis?<_RGykg1$0GrcDt$*V>t>46H<+{Y^;``IOUjRn4Fyw@Q@t0FRqiQgfWuTVsg` zJ#$tgBgi8?s+=bmP0nhT!Zfz-4OJJ1Z$VcSWOwGPFvFTx0UMF;QUSU#Od}$vhXOi7 zu@b3KPY0Y*lSmKJhQMp^MNHiVLi|+u%wYGSfP$0~4+B3+Me0ADN`nnf6Xeti7cu7X zcW0WO@dw%00-1g>GPkLzry=b}(vD`@xQJ|`5~nS+nv&)%k&)NwRqSO8CfwEAoS2XD ztyPxbX6Nvw>(ta^j=!xNvM6W?;UuX5eiWRJ2&Tf{F;PnSQ_VmQr9CrE28`#e09lWi z@Ms*=cI}lQ=AI9|OBo{5E`ivloWELa(f!x8CAbktOI!Z{DuNTV`qY5p4Wo`Kv~RTg z)|Su>A$O zSO)|1`&5UMQ0AuN0McMF_~yCa62OvLZ`+o^u7#U5k*&w(Sid`a*P)lx~ za5$I`4>MkTvdVMXYZ+CENgN|DmvG4A?zSs&EJU{1U7+KN(tixu$tjjqa>t*(de)2jYO0;P z)?U`nL7ZuiVIZjo=~AtiUbLcCtOJTectM$cBu_~S_{<6hmi(NAAM!<{nsaHe1 zZmOVtYq1Ep{zjTY;~hSgFA*Ww<=4Zrw+3Wf`&EVT>LUK~<<393TkJp;6XbD@wGOnx z#&jA~F$0H_4c4R@Ww3AcO2^cSx}ytCECDz*n{Ab16|#YU<&tsjQh7)hXj}u=0-PT_ zQRW55NFHbHTkkWI^fk=rb0K|!z0c)cFa-Wo&=v1SZQqO^ z=UkkhE3ovg!gXO81bg#bl<3PV{G?>`HE|S*k{_C_MA?iQuHcTfG#sZ+D##@V6%^+R z#Qv2b&ovv3+#0w&Ns-Q8BYmKrY7X^s{YaM?HBxz($d8RSv+M6097(8-nCmzD4>HZZHj%zk(hK{tL zQ$fk60qIguqpx~d1_w$(?rH8mT=k>`Y4?XtD*SF)b6KjtHC>E?7t_|RnNpH&o~D`&D&6FslPQd95PMWw{F+=cPdB2BdcDP!|MJWh6Lq zX|nOwkUn|cifoPVP|HYXH0<~9QJPJ|9sQ|XyA~6u%~(=M6jS z6*RUY08seaB(&x--N)v?nZ{c8Lk7t}xHtH!?g&0Sv&&78E$^b1GUsjj5D zGkpwHBsEOH?H-l3o*Ezw&w>wNYEj|9!woxQ9YsH`(p^b-d7Ql5cdCwguFL)rOH!d) zX?@P)%`|vZPtQJS`njy7j;75chmpqa8TO=U6rQ!&j|=H&I7j~gzKuM1e@#LE03Q3k zt(wi_pi;xg;slG&%neAgsa)<;-y*w_q*#H0Zyq{|df3^HkRs>NDqcQ4iu$`acuxNS zyWaz+dcLr_DfxPHk6P=zhzH$?K=u^yi^vMUOm?aM(DEPE{LPVnsa`Oh=P3CjiqL}Z zS9pw4-WE?nD;Cmx{Y7hAP5ZxG*U7rFKBL(~u=`cjZD)>1?t`)%;rshnMHi0@R_d4b zGe*Qn_^z(%_Sjjpkxqw> zFM#HUO_4(tak|X}7XGsNhQ3V#lR)7he_hTgygB*oQn|iltU8&QxTM-rnjvwrzuz zH8aFzjgYQGaBI(WPZq@Y3oLO+Q+FXncSpo}e9?uCh<08+Tw<@88Okmomk6$P+n?j<~HILg59jrYi{!%LX7c19LAgB?X!880Dv%dk6Pc7+{+V2 zvJ}Y1M`~`Js6(niWQ!|~s>1|QYO+18w&W#q+)yJUPw@NLUA)b3(z|!XSkE)6U8iVyFuiro0teOTp zGPvftn5VbZ?fl5lZ8=gvu1CaHEoCq6QgG3q3fSd4O@;b)!Mq+=4AVEMXDCoq5Qr7ak$F(k1~Q zFSzqh(tKT}%WsRDh{U|~Zq?5CtHpX+I~8hHm7U$f=CVgBehf2 zwW&0VxT9#pBlj)e(!842;=}1tyir8YpSlN1$<#c5d9Tbvf~lOQdaW*X&^au3KN7WQ zXVT#jNTI>b&bi{e+eXx5vDBlTg#hQY%X} z5)Vw5$J56;Gzdb2#(Gvqi9AyJx-QjaW*>VMg|&hW!?#L-qGxZA6YW<@o3-RAGKA_w zF~egy>siYG0KMm@rEA>6{##^WvC^>S`DDP!t(vh0j`wT?Q$$v3UV{@OS zRb%N@x($sI?&Bb_rtTxwqp`YFkgSWxu4_}viebPx_UT+zAT{9}VrWd@B)=~!+N2DuKJPUWt8D=1G~hVRASQz5YjcEh7p-gA z>obNbT%E(ItV{-8X|c%BH&Kc#2WJ+oF;TZ^sYbPOons$`VCnbD*bUFUZ$;(EnBe^> zG*BIW>!3l;OiroJq=Cvanxgqo;U{$w~pqd3h0weLrCrF05z`)>{M+0!;@72 z2uEyot2WXpa;Nd6Gj<6Cw(9=fDomW5)f+q`JY9Lnt3du0(@s}L5>_We^AE0TVir3F zc+Fx1>sr>$x)6HtS`b?jXar|$`u8HBkc)_3uU~G*uEEdeUb! zrvy>>Py$i39<*~!A&H;|5C?i;U^~(j=8&MI0vQH4rWQCf@VuHrpa4d5Kpp=8glznq z66G*k2j04s999>Gw;eq>=ZuQz6>(cFiDORye=6s-$hOJ98QuC3(0y=$O-5-`~=G3qKM)8R(@=rDTbw>b>R(noKY zU{YPp<)#M(dE%|!-CJ5N#9&(=cvm}ddFC^7&(?q>bCOSP)WXrJ#&hdckjXOQFvpKd zxelEpefBu+4FE=?%sgiv)nF)wJhnLXsTf5H0-RMDWHL5SPpvTxl2YyMRIVH6>DH}d z2B}=1-XBV6L^;haX))559MuTa(wLu@(APx@laE^E^tn8{j1$4)y4Yc6z)b!%45V9z z1%AD0WYWCDz~I%}OAUZLkF?d9^&3bFBRZUQ1GOQX2CZP$cT5VNPhPb|FML;1u3W=? zAMSa_d{-_;JM&#IdKj=AQ-K(!espIwq9k41ntHJn4m(qq8LB`|2`%YTj+v;GRDh3K zv_l*TqXg2a;+%Li#4s9n@bjF|M?Qj`kXIs@h`{EgQ^!t~7Cvf~0X%g2Q$SSJ)PC&x zipV`HZ&Hu<3y^Xv6plSBnzHweY3v|0pyrZ+#bQ|R)|@)iY04>qBH$@z>5BCq0O=Ag zly4m!T1LwKJ6D<8L+9MX3Z13gE=7Gep=q(NhN6l!<}?@s=}o;0hW99?rNmK&jFX>V zTF@&ra3jcf9{3d2xmY6!Ayw=Fr>3uOC9#VDw>UZGr6XxQ4Eu?W(tSN^4&q;&mhDjK-Xar0ZY7n0jVA@f|r{mkOAVYFtyp5|_)@)oT~ z`y(f(6)a_~UjA#A7d9waEx2)>SKhd-b5^;#A3W?sb;lf6bK!eMy@K-DoG02dwfzlO zy7)tRG^OLz)1Jj@Ic^D_Sb3&my(#_=YUA$SM1SBF7yK#T5g)rPx%_EzG4mtNuz$&= z#dDC<~TjDv;&9DwNU|bKC1z z?rkq)jdN)zTB6Y~Bo!y!IaYzonEmG4^U5~dXf(=@Mq_KqgAy{?BGh8}+t(EIq_8PO=fRd0?>q+WT(Abm2 zS4!B}x%L#WYWkJ!!p9ciJD$R=M{8-R#Ipq)j;D$q6}DZL)U1lhD|D#X@THvpHJxvG-bq-u9QO*;#jnNNFi#etqqdf?Q4V{?~t^=ey) zS{ESlGt^W=-j#=O`Q&G37`c~SUuc)qTOPz6w=wl?PuZ6@xsUDMLgRObb z#CTWDM`6hzX1x>|<2-#5ya>*@Is7_ix-yw^;-X<&;b)ag4?QYt8K<@-Qw#~t7*z76 zO)@0eI-DN0_tJu#EYB~R%6TZv+JpjIX%*GE$ZXe@S?M3z zQ87gulzhUUVW?dAcI{=0c#JpiBRxL~`E17lPNd%_#CjBF+;uyz7sRt@t_e87>0Ti? zWsrg}a(MKwYrfSjb*~RRmh2AXZaa$cd!T;PFJJYBzLSKM>C%-sbU1PS8Ae0Ttu=WD zpD*6_rYNtrN0=GQd(?^dYBScKA4*~xcw<2yEh})|^qJ$h+WFdgeE6aC2L_T)A)uCl%>(T3p60=xq`= z)QC8y1o_7mIpAj%=}?kUIO;@&m%T>Zb*Y#VeJPBgl=IDNEJR{w8ZDJs!t!y0RHwW0 zpK$9*dpM2HQhfzs-pz5ezQ$49n&hcoQrPH)E>ZfXt3ArFc|C?Y3gk5lkR0zl4teid z6Wr}qk;&RK-npBrlQe{!;B>B48yno2E}Tdz$FW7e_tTh2VF{`Y)P#8cER{Q0mx>hLN{6$M$_ zpzdm%5WU69#DkN`C$Oy}50*?ycoicgjZ#L-jHvae`Ej8eR8k_Uum1pAl34@^xaa+v z24~+gAt*Z5c;x!jvpJGRe_C`gAH7Q8G$twu8$AtLnC%^En;f1g0MkGey{PLz35r@V z#UY>tq@y%v2c-Z9wI*_C$G$0hQW%+~#T`d_KMG&~cBz)#o38?!2>Je%Y)BMS5X83w zuQfWT6&arthH^Sla4h!gO(b;1Rx>g0NM&q_0JbqpxB*o6lir$Hz33UBB~Upu(K_a- zb?-@>(gN|BGe_DGa%z@oxikTI-KeIUzTj0rGfR(Z0I~L`J%u5;erfrFE|4oTvhjG98Y^`Hgb$Gt{a`kHn>8ca|FNj~(MIHw++DKX6eCP?SK8OWu<=7OiS zAq>qF;F;}9<(dFz9`p_={#VkJMrat$^kfQnkBV?iiU5l=rli;@LJvv+hl&97sf1@V zqCaW?b&Q59*q9DOS9=Vb;Y00QBtVIfjy9gP+E_7rW$T*fs=e!g=|)hgso{jb@RB>!0<6G}>BEIumIN#Tf0me2lTQQb z%{90+AUAFWAslf*Y@RbmClstPwB-BaBZ1a|>p=&K0I_i}l!a9Q0gA1RQ_nytp=!{C zr2zU-j8l}=0Ma|=oCh6E9VsZVhsc{$b5SznW}hL-jC82mJ81x@IHh5OO^vYF^{2Yz zieNW`)|84*=T;#Rlso?bIsk*O(u2=hRv0)2o7${H!Nxn&!wQXk>B5)~$2}=Z{uH3+ z)`Q6FK!)rlJ>RWD!-}wZOjA6pscplK)BwnramO_zfPiVS5*zWUoyOvN=71~oT2Y+P zI@0vTAQX%PKyO+PBRS@q`O^W%lZ@2SG0rLvUTSDbEs6k+L5U9(+Ll!)%nw?NtuPcE zQ+j98o(6IJsR-tP8MmIbBAik+3BjZ>?l`7_nvsDcr%H@W~}3!SH#s;lRZVTG-vmVo|&r`i@MFnwO5UB)oy>9(ZT2zu-S~yfxmP5)gt>Y zeQM3KWEJ|=TaZMBg=qzFHezh5)H5g&9=J67R}B}ird$)hr(X1|14;RKr^0e79Pla8 zADysGD*+)mqz4|fgmP#c(g9dyYFN%;@A%Y5o+?OkK?j`B0*((gEN7l-Fn(_T0F6kM z6W9vciN?Y^(}Neb!KBo%A>2m-p@vQHp7o+$>H@v7Rl3>-IjxD8b-TBHJd<3 z-j^p7W|MKpN)Qi$&hj~_!NXNpjwQuUAvxo{CWcOjBhsS0;t`DImJ&@R&^|~w=}Ie5 zD#Y2gRd4Q$)pBtB)8jb>O)^Ent&$Ob2L&^bJ?e$zzc|Mraro7XQVL+zd*G_Tqb}%)})_G8xevk!~&Ypgg7O0^{FCUxC0qJ^y51NB@5}zJ`;%s zMOuc?yj#uy=~2fR&PO=oIjwoqB(V$u*!y;(D@f+J+H#_&jBQ`9dX1OoIQ+#&H<(zh zb!@QA%7-9RBVwayTG5M6lI08JW2Y@qn;DUcg>OPYt5pzKqRMmF3ed5cBZ0$kNWi5U zWz5{9Pxy+nZ=z3)&%pF1l&Z(La+wzcd*t;sOsU*GYo|H`yB25T&>R{U!_WhlcgJ45 z)VlE>Da|78{{ZV&g_J4geBk1`2=tpsh{6+(TDF#uCkqT<`h~3CAURG__RZQ>@?&${ zVymW|blCp@MvxCvUB8x~{Hg^ZM#oc8^@dj|%0;2xFbq{d&weW6=n`WL!ncp7N)U9TZfRa>6Rqbzc1=dJV(uD>Pdx)gHE)M8)1y&`@*JJ zqd+i-K8sU`{k*DyJ=i3aZI@6nqwHyjL0$d zuSAEydRSb^CB%c!zAHxC!kQhkf5(EhIu|+qbX;~koXsB~Fh7Mi_tGET+e;$$Dl6L~ z(=@gDQon3_r)pO$$rX&G z1s^0Rze+%XUwPz@Q$@#P&7$~gbDUmkSQy3?aBA9oJksLgTgl`;nXc+Uu6|?IlkCv- zDk!*E}_<}64C(~19&REE7uLQEOJy<4~s10n@W5_t%W@Y zY=8CXTxWqpXN6X8nBaT!S`dtFQPQ5V1wuUu9D5QefbBT%O2Bnq8!9E)j!z_4c9yRD zNR5d0t`EYpV^)b6XXPY*73@$b@)3gIkZ22>+_qB~TlX$Kh^{MBg`&J=b;0znT`QDe zdy4Y^0240FRQKEtYLJ!L2g zW)`RkVn-Mw@v1;^n%C6rZY5mB8DpN+Np#ERZ}|0-9lBSyLacce*~M0yzJ+0v(Btb# z&U#j)S~cn9$ARc-R?)8*@ep67Y3)!Jz#7*+8PrPT%MkoCPX7RePWgxYd_+Is6uz}jxc!9t7+`u- zO@Un({316*^LUHLWu;#ROn&wF_rg@XRX*jaQtWdh>rWZ)T{8GM#|wqa5@V=>$WcmL}0gTUYpY92ZEAFxLXnsxIq z#jKb$eKeb*G3B^!yw_8L2dygm()#qf2i4Kc$D>`A&cWBe6=VAz=%CsZWaFCO+6P{= z;Bb8?`u#zDT0Ks1_-f`u%Y^z2(+7oTJ#LrqO6kKe`=_lOqA;*^pH)~D-rdym+}!yXc_&RL~zt5t}+Go~QNl*in$tv-XA z2PZhFc#4mx{gg^^=o)&qQalmRnzEX8vUXp@RH3=+%?jA-QSGPPe$FB$pK1wzEq8k2 zo^9=v{{X9BtpY>Paqmc9JYtu$o9aG9JcI*<2OiX+hCbjP!l5mLPFV&h=3}t&!98g~ z0N_(Y0y^fb+rb;7G?MKdIir|4NVnkh{b^Qg9#`rrDddhhN`stqsEpXDxN?@vpn>T~ zW>9LOm=V+usiqlMJg^j8e5K(&J5lzII2A#zp-=&p2h`II>?{8OEmQNQaoEu}1OrSm zNmHnmV4j{3{grmrVmdX-rg7c&AN9$J##% zT*KvN_bk{4k4jy;N4;||<4rau$b6B|3a;KcvB}yT5BE(R=zND=z*=c_-&|~-I=9$% zBe5UDx2;!i9b-7PW5>z?qn!sS=(fNI1lGm6-~}GFhZ^S_kGLS#rM#sudXH0HBR%6% zHrd7wDeoZ)YPw1tG6z1?*;uOOPagFlVH#1If>;t%IRieTnq)h(?b4--=3M547BMcg zh~!hT0MA@^u4hrxnhb^K2cYj>iegs!R!*g2lEU98C$Q;?)-old%%@$fLBT&t)9{{{ znx43eGJ=ux1ED_k7NrN5aNF>G#dRMJZSCQndzpUuZb>!M4NiKmmM5ay>Gsj6M1@yx zbrm<*0VJ*$C$&6Z*{c5ltsgE5g=lDO^Gxtq@s!xQdD z+$xLs-QrvqWxHXd>rwa7TKX?i{H}B>)l5PZj3(J}$qw;dsYGy0PchbxGgl zxbppR%`S1+^@wjRtVuE4qVD93);EfLPq$2CZcDJ}1$nHuH}ZVaTsg;Kz%`#g+F4(D zljzOXlb9&#Y*~Cxztg4;Exg0r2F5E!_v0j&_N{LvgQ+8ePHW9B!QM^?HCJ~v4pQ!P za>eR*cE1v@tW>47x60o(Gm53Dd_dH-C_s`nQ=jhxT#r5JTY;SOM>Fm>817zeYWaR> z?qpv06&%{`r7CTj>6m+t)lBrytw#7K6kJUVX&AQUmPJ0zij2tnkIqhgPH1D#Ow?t+ z*)-7%QrWGa4%!88%S86Uh?(=zV*Nqb`Dm*UgS* zX6~mL6|Hl96DuO*w@hNNrj?_YvcoAoLv#GC3O=1cEz?zTfFK`-TLI z)Ko11&%q5>tuI+d!ao|PDd!!=*3b;EmB#SC=e;U%VebMop)>!^ke@|>~Q^Bs26GT(M$fQ9} z7@!4Q?gOPh>zHaVMHdbGgY-2cI1dv@(ZwT%#s^yP{Ypzo8Tsl{E1yDOf9qFb~UQLKnnvEH?~z~Z!i z#lFQP3AB#>wLzC1de-e&%}V1>Cz@>W`H`?BbHzI!l{J{;aZ<}p#}$18MR4eUgw}H$ z9zR;?wVOeMF3z1zbCRas*gn<4QZ|w3QmJ@}12aewN6c$h2;_lxyJOommv0o!DG>q> ztvcXe{HV-8?@kDcv%ZF;*H3h&KR0R|ay_d(^ogC0+sOz&H#JaN+_xq8r<-esIP+xx z02;Faf3RbB%-4=hT7yNfje!KY?t0Zk(xz;YkHx#ynDohFK<_pVdIq2i&u0uV?@ggk zpsdTJa-$4!p47K@ep@OGvG0naZe?ur!K4Eo-Ond9!xjf4^r=foS2_GCg^ow9Fe6|Q z3B_f|a>Vtm8Q*M8pQbA*y82ZjLV$2R=_zx^N}&^4xl5G#^In0cTqJNH3%T){^V@t2 zh|i&}s?JHFWSIeM4uYYL9U-&SwFw!1Wsk7NGgct*p(p(zh#r7n=?_2b*a_D`_&R4h1=8dsg~FPH(+tzqG`$K4rzg2LP^a~iCLqMr!;}V?Lxo> zKWC*e47y$Rjt3ldu6erVx`3OIspMeSH9TfFDn>c!SXV}r*%m>ggGfyn?OevAsq4Vz zqXV@{2g{SswKNAw;N3b){c#-;*<#1cqaZi`0II#R!usP)xJ!NckD~&46@&0|Pli1h z%EK%)w*B-JsYsB z8-bT3Rovw($+UE;Q=__IbCc4ikeq|soP%{p&7TXv5<$}=)3tXIZm?k$KYJ_I5LOxnUEg^63995{8gPhe=9Mzc56(CFtf_dvuZ9Dp! zu~8qr=}2U;jw*05P{wLu(vS`edr%si-i*)&2aMYmFr3$h>bgC?tE;3lxmP*cgI?d` zMPsJIM?HA26V}_v*DYopcY%@CsR*9mz=kQ8Wy9>q&lS=~;eD}e5AycFtte(9C1mag zH8R}FeL(lBxE!Xd;hVIN_X@ILe5W`y$6R<@TbfeNsDsdq*RB1fxAMN#BTp2ulyn5q zaUMTw;ftt=X=OrB`y^Gr_(zB%eEfGCYrVg+kg0oc53#OtMAW?E4U(=uh`$vqqcJpl zX!$#j9Oj(TS=tTisq*yCQ&(S2xt&hyp%^2gul1-C!@HX$_mlnVKrDVEu;G5n%rn_~ zR*GxZN}naWZS}_#S@>;9P)JeiD%AcOv{=|QgrCZo8Pn@F*E!m&x2Gbg$rZe(gaJ=s z(xjKes95ZkfTkvtV#X(KI~oAapGvcQ?NSfcqFpY{ALa+AV_LFVKm7E__NtF=kvGgw z<56%cy@iPze60Tfz^a7WPM$beNYDFKsH~If!Gek z&1l78XKq9Nn*?+jsg)ivwNBIPOP4s_<&V8ZsJIz)F`KIz~O0#!_{p(xPz+Tde$#W>+fR^Y{c{H zT$F=sgkbSZVgpM^I#SXZqofbs=LWjVNtqXtGhD`sGFiPit@IsgYC%di9A##9+7-_1 z1HrD&-2UsD^IZ<$q>4GoJq>y#oZF$_*p8l+@)?#6N`C4+Ds?X%OQ7*w=ZxYKX-;vH zqda{pp^djKWq6t|H%FCw;MbXkUdtAfE_%hDM=D_S=e%eKGzYR(*=hmaa_lQWb(BL#!t)#HR+)A=Q$Pe`PEra z#Kv(w3_h?t&Rsa^)^csR*yr!Zo-_2W2J$&$nVMXD-Rs-6?+wAIz|+B)=TYi$`B$0h z5||!HFCj&ldJj=wL6GKr@7-FQ*qS$5vyqigrADLPuU@*b!VREys$;Ev+#71_^4hRB z288>=y(_64lhTNeWmO7Uk6<%Z%#eYG81X<-Rr*UEEML1vbLfkj>n-#hF+OLv-sh=yIjzfYBH03}paZZK$x|N{ z@S&(PkkPb_PAx{-!VUs)`wGb;#sy8w?tg`&JATxeRXui$up2gVtB0Bq;2>)t0wL^KK}sa-npq@ zs8aZ1Tdg;{CK44DGERz_X2A7hRO4eY$WjMv)+W6ZZW(4=bBxzVEw&=}HgEO4G%Clx z%#id{?^)65*0;lZM$PnWRSg!wr4J*F0nlgp*42>_GbZ7I#}v}Au2s0w;))NF4Y=-2 zL1KKV$2~e$j;Wuqb=8ASA)5aVL@lz#{!&RXeF3a89+wkEh6n6=CO5~(C1=ug0wYl zO%XP$Dvwjvxhwmf>d716w^L5wW9l~zG^GJM1yzRGrju&%>T5x45<{1`+w28iw}#T$ za3uu$ieeoKh@l9Jg#xAAPtu$xwF8#H`cq8ygspm<{p6z^fz(yd2sK*{BgKJ_ZyD!1I?oNkxq$yZXvm-h zpztX(M{f9_V&{)aI?_^)VL%6ZF;5Xle}TU$Um{RBMjuf?ghPsuHcv`?c2hXc(iiDd zuA2Sxigp5?Y2Njqx@qI({OVQGfjtk_ivg94`%>eMm9zbqfq}=?q)jjb(u)Cx6^X_v z!Z-fut>I}J{o|i(Ql+9X0Z`Flm_ipLk&0g;PwpD%zQlu|#V^>v{u%qy{jubDx_Sr8Y!&HLPM!y}3p^QyGylmLHV>W{WKKZ_=0SKx31d zywk)x)DJrU0Q#r`vA0kM2l1pa0otT8hbKAwshjcGngEEVJ8?}hgZNa%usIwGK5l+P z`A`HNR(num$?a2Zke(3!RK84sv5tKx0>6}K^3Qs-wz9B1Q~laBJflhFd)A6+ zvc5BsQVk*f2^0a8BBc=z?+n(;=+1hp6W5B6Xr%B^^X)(wdlYvR-Jn-QG&UpsNF&~- zO#qhv08*vB#wY`r5tG=|i*C))YpWUqE;50AIK@nw7ft~u(t(_R*`GKIQVVAEuF*6G zKfulJwAGlrI9vW$$@JK01BP2k0R(pJE2Ob3mgoq^d9I2-49r*Mv|@cRP~T|R7DygT zW{rJKWmN%}D(9MmqYQMb67VV!*ELl3A(>awEK@c|UTZp8jEY7o{;Gv!#(3{pm?phi zZt*f?V9|&=&-ZdTs7GEY403RPtw_g@TvR|{ z)V)`w05&kL;5ScNno}BKN9R??UMWvX1Q{5lpkVf+y;=dnoTr|ZA6k0#rXpGZ&#eQF zDM|UL0PW9Ogr1_LVsa`!x>GAf<{HGXKLiEzI$1FdHCaC#cK8sQ&(HGY22RB^#Hn4~-$ zQu2CI85FC9H4>gG#G?!ARac>=fN|<7KmkslokVyX)Kbr}c8uq>XqCXFaCY1^S7W#y zl^pKNIShHE-;PanMG`f!&m7iG;^J!6+zWA8x5O*t`q!Ar?J`WU9@U}IjbvE99dXjN*yQIG@i>}xsLxUk@h6X# z9jfyHZP5pcp=Q#qp6l@~ypC)0) zOw_l82>3kX(x}+J+>Z4%xu-0NAKqXy>s9Qe_Cax%svaG@ z8qKwkY{hKKiuUb;o+|*1Ov*UswWkku!X=dAO4hWL7yxRFlT1koT+}-5=;n-`x$98d&$&ixM+a+xdwvMxHF21jf$3S`)yUj=Bi6Iz3xGK1 zH0_F#ZoVp9+h*fW7?CAg5V}ZY%>52O(rCW{{VE3^-5UY zQo9{M&pcJkgpXqK6k@fN7}+?A=1z7#D3QN9Y`cZa`h6&TR<4*_6`0{ww))f;@|cRo zLw!$rlXlad;;8E~?u-@5?oMl>jvt*8=VDZoaQ3O9d^a_nX*iZ4j^F1MYBp~(0yz)V zQT1nih0a?tbB@&YZaY+RLoU+ZTd@BCWeKUEw7ro7t+Q=CvCSV;sQ$=%NcRz>RmOYK z8>#iF&W))!$h2?9q_@yDBPTZdN4pB8f~fw;y{vnci3)Ryt2y4RIuBatKj9d>k$!n& zPu7vV7V?qiU+wh^Tf;A%?#OkbwmhRMuIJfjknlQ2Z1y; zV&>iQduMO*t96LvXM|kYvq(y*W1L}oQ)954jEiahrEBRcO$SY|LatxTq;>Rjn+S8i?92L9d39|X)Mf7Nm+=(- zupZ3t%MTB_hL-ly<0I~GO#F3Rkn-_`}1o^}3Az0Jx>UkgVB!eWasp zhT3WU!hkoYIPZ*9QtSHc;}Ys_ zqyCww2B^sQQyk5GbpHTZDm|pfWLUWPY_{$|)ZzoMC#5uaLfsT4#<2`)JC5~KTEpLS zA5!L}NTNgXpa zZCm(jTbF^S>>jS*RgvJ$RFUUTZw`GjXt-GCfP7$J8g>s%*INgH->ll3bJ{c=D?%Rv zX)FG=N#;K7j8Spe;EE!Xxv@&JLI~vkRq3&KS3-yG*ef6Q{%_}3pwsMa$ntF>PomPe z?0FzrWhcpkSuxjY)wncmV&n#gPm>?*V1F}Su<*u46%~GhqmCDihs<`;xLEVJd?BvN zK6HjL=vuEu;9K_}z0_h)P>GuFOoylFDZcbvEOJoz2GkY%Mf|Qmy1WBd6Tuo1bx9oi zv95&m^`?>sN-jGYwz?*jW=E4_AJnfkq`pjJ2^4GFfl9aonivDz8dn{KGhqJ!g*VM( z-k>h%_&q(UP{D_4E*2Mm)`Dor6lXs41%=Huq;)@cBh=FVloAQ*4HpXz4yV5~Zeo9> zHB@Giz* z)fdjOb=}h^>MKidDt8LcytR?7-z-2Qx7Lsz8+jj*bu@U#e0pZ6mie=a+wlxORV6qcIqmLX7-74Ak=M~ZX~!|j@9ip4$|2pXFPT8YryQTJeh+6c=YdH-J#3o zY3sU9a5(9j1ZldsQp&{Rt$E*yl%?|S$5Who*Pt}&NgLFCPAi4+QBya{Rfs*lrkWYc z98(m4#0=D=8i_~G-|?y>vFrB?KQi(lJN~|OU+v`tP4g6K2 zVzD@rIlrwvzEs!5` zMai=*7b2Qm)kf4U6lJ9Wf4q1U!>ib@D{~q4%^b)%OQ4b|Rgc!F4OY;Rwb{SjT6xqX zTo96D{li7d2^`i@y_}!*YCXLv zzihh4-A~4giBcEsb~TAX$v;|QkuY#YWsq2W(@1|xiMFrac@N`7$75W|pWg%OX{~V{ z2h0GhZ!jLe&YR|B=AFf3bL|QJ_4*S{7m;#z1B$|Va1R+Bjw-v&AqN@amB(YCeNNp@ zH-40#+P1N;&oCca7}E>%8WdFzk9XchOD$q%@yFPHUIW1-ysp zTppjVU)VCCmNtlX+k;)DhQDif2;U-uj-+Cx)M&0$$-dEWau(UY6H?~zV{NhbB#N{O zvVuAu{c2P@PapoO&DD`gnka~`T=0>vyEQ9Aa*7O+L^IF|)C?Q~L8yyEDLC859`zpH zMf*6FW7DqZUBc!x9fsZ1gGae$DsK)wldWr8rr7w%s}V0bsrIsA?9r1RfJh~-fwBPyyg`#b>vO z^+zW+BzpnHPvVGtopyheZEtGEY=8ReRLN+%bc*3E0l*x3($aJ4e;Ps)Jbl&t zr~vW6r*lbzlR(1a}S!hZoZYx-&oB9 zG|`-|U!@_Ii;zuA9Hdrk5}6oh8TG9g)bWu*0@^Xa$*8VAb>o_qTjl1fTt3*_(y208 z#Q1_C=j9ZhI#ilPjpT4EhjhsKlys>zHS=a2`Sq)j-ZG+qxFBPS?4YiWEJUrKrrJVx ze8s(LH?z2Ixj*nDQnkakuM~ZvTy+?&{h7(kS8FLxDxEsh6&ZUPv}TZf(MWeTGAa8o z<}0)=pd9dhDSTv3YZlr#;9Oo1SZ?@g<{2DzbsJ@DHtXC-khOtj>r#fElOl&L|7dT6o}-=~8G! zSB%swPDmAH-yh*nF;o6DT$Wd027je6jB~|KN2lRTAatrkG(t!fb{pR=)I_J{9mjft zJ%UBt0Uq@|_=C<30Kj3+I#$p!k*DD{7hWc|SLCh_>(A&b()@LFlB^KNf>Q*a(!A@y z=)+!$MaI-8cjd?PuAg1FH(JARKu?#0*N^_aZ5ZB0QY+a*2_q?<%g0L6TN`FAl~BI@ z>Yca|uJ3O2>8}3(c5#u4=`tg~wzG~V8$clS9qWp_Tuk56x+|;CF%CZHJ^R-=a@*Ok z4k#KR+*Id3FzHi8s7{PIVgcwX2IGoo`C6t*s>E}}IT#FsP{6Zw5LWXSqjbepJXNSqn;({P4{EI_+U0qsmO zD?Yqci)qTR1m#UAEiL?{eG3k(W+&LZp?>k@$Xha z@7L>DB<(pJs{Op;NWktrX$-U*BifahkLyvZVx?1>Lmy{5+gt`ecRc+ot<&dOR6Kdx zTx%~pbgd04?AuOJi7}I$W~HKz{?<&#gUwD)PSurVI5s6vZDfO!gH^+|j(3xo)BPSJV+D(#U)~Leyk82KAtVG|u2c{2d>4Um4k~dbn8pgiU32`7^CpwkF6m%6aXLRO`w`- zGyt`;;Z)zQrW+U>RxWd7Y^cGW|2XYiiYrcPvxMBr?!{YuHLZi<}kKQ?ii zx2H;qg@FNuJ5ZIbBl(6{bw1U*Iil>$Onx-b38@Ie^rIXMaZq#=br^TRe>&skLaad? z=DUl9{n6xb4RNrv_UksE#G2|lK- z7@@{7ikR#b9;H{CP6XyW`r?>ou#k}+6OT%;)^L^N52&UcGR;($BxBUmAk4Y9x?oMT z`2_F)=~>Tdst|z5*T2G_Bhrtw-4-bXM1kwZD?Z=E(L)##N4SporoO*(|FD?Po|NIp$}H+&sv#!;-FKCm^L}8 zM6zC@q*0!g7$A-*>B+|xq9l+g+nNE|0HEZ1(@$z*B?r=!bL&hE$GtpenIqM*YZq0F zCEiCyt)*R~(~6_2!@dCB*S~t2k-SQS)Wjzg13?(09M=)hD)l|8#7X8bUVdY@k9vhh zD@RH(MXFlOGXCi#%L=%lJ+tAIaa-Bp717jk7}rOryzh0s8HXK+sPw4qj-M3vK|W;2 zBfk`B5nV93Yskuy$7%Ne03x!U=T$33YFf0N@9o+ zy*=WNM%vi{iq$_71dU^57|72Qp{pit%R`mCmm;y{Y?F^#yL927iqDbqNfpv_5V*?` zQp7gniein%twxwQ6)X;iKujz8=Yd@!6O2|Cikl-R80R&+A5VHfOuQPqZ^^1^colL3 z(vZt)GDTR7a4H30Zs_SpwpAaJctwTvkrZz1Esfl1Th%o z1$f|&m2BO-X_nc6+?wR!f>@&3)5`o~JE{Iakxt@B^k&U2Vytakc%sG!DJ{f#9e~Yd z-FVv38!<-mf4a3oOFMAHg$2L7YOmSQ9!5vfmoQkc-aGR{2;r4~0aeF|p5>43CH!zI z$CYXa`mve_g;e1bQFc2Jja|t5kN64(tuJWbKA5LDOnue-u~7!Wzyt80MW5|!fZsHG zfbUYSxiO2C8@($%n|IUFnVu<#B)qwK3m4m-!lP;K5Al*I#FPFs5C`E!g5wrhm4gRi zO=d025=}ghttQ->IYQ)nX>xrj;9`IH`_os!)q%q^GQDG6d424L@u2T9xF6EaTX1eu{bKrCIte+BC#{)*_ zF}tk;Inns$gH9{WBMu0~A)6W|4toz;-i^aH6|-1+D#IeMd3H8&f-9xB)8bK)bGZ6q zfF-kbON1k_uS3%&GFx@$>0W-2d2%TS^RClGlsqMSsOwl%rlq+`Ryr$3+!%GisP%;3 zrb<1D{V6o_^Ek&^v3R+$lmVZYrF>>%Pub&BJsMA%2ailJ&ZKdZimFCBR-OI6+203% z#;CIM^slz0?*z{-TbuqKl%@5!0CS$T>WV=MM?wX7{*y34^lB+@w`E3UmRh0`qz#4!YK~0QDSKr{{VD-YtSw{Nhsar?NmL0 z70+B~JU}OCnlY+8U}7htlI@A$Y6f7HnDCP}Z7LZ~|lBGyy%vs${oh@`%XqQ)n8jFf&DS0zoZwb#SzV9$cRBis>zc|!#Z;?$?L1N)Hh=CY_uWhmHSMn#AL#i10D)6Yo%vjg zaDBs9W|~xta-d}QCZtEEH1msgWGOuMX{CO4a7!@y^HZjk7fqjuqR3Y`Z|u2==4a>H zoVq-?`|tVJe41_F^>Lv33VH#;e`0O`Ge~}>p1K5I#IhdzlU<>Rlk%t) z34!uUk&mq_p`4)5?Z;bv#B{|2NJTrA*%#|wIS{W|V+ZR|v)bpG)|JrCZ0RmY`B8q9 z*3pZC2_Jy2f$pu8931n#bcY7!$iNyE9cW~GSJc!{y^ zQMRBzhAw`zTr6a-hb`0%<%sp&igM^S$bRAcYQ&PuBktsTRD$AV>4C?mG+cHo4IU6U zjX?CpJNqIGa|mK8Z$4%tG{W}>r56hbH0V@g$pBJ|Xw-0uKMH9}hW<18(hGT=xnf7w zfUw~TXD4W-D;VUmnoqDxj!8b0_0t@Wx@Zd#mVk9(_)~n?ha#=6lPN!N=dd*4q&Dmr z`p_#BlHma-8>xQMr12g-t4L_XkGoD9IUe6y2V*Q;vo;bU#;5XiHyK+4x7T>BDD;^S zs|N~4d{x-(ZoIr1i6509Ikz_m+hm9-6wxHacg=Jyr57cecO6OTN;I^{T!K$cywE!w z;~CFJVN78;9ZhwMpqA*2Pp~ySei*rOHbB_-2ACXChC`4tKD3`^lh(V@;TxyMEu{Yd zdacFa%f}-&q+`_51I^8xj7J>$;)AC<9*thBAAv4eeq_P+H9UR;m#L9g@CJZ9k#xCR zjk)@BPhB0)SoyDEi@>N4&vsAz092#Fw&=iltbMjoaUMRp9E`j~--S+|9+ZRfk?g{~ zia!WhD&j?XH*?A9R^sr+of?nyWo&6-MM5$b7nZX}UP;bYI2z|x)xjZd{sJQl0+ z`KSr$^7CE8?T>R};aOSoxi?T{k_2C{j*wnmK^L zkHR``?3j<#nz0{-bhQ5fmtaSst)QnpDG9;Gd83#tWgR0;w#M5y^VnjgOB+$j+Qbji zulY;6KdmvXk=vip(zwVL-3BonW9TY%P`wdj03n%mU*fqL;+pma6r;q{4>h#QJ;y*bWg!Nw`42a4GeIe*BdC)$u4A4+#x zu?g3`7&LVBr6=*G0;nxWexj6qRG9ZP0N%e!8zh=BNPAGgX*DcgFvq1tI(pRbZC*`H zz-x>g_oV1EQpz*P9D16JcByP*cY9J)$qPukf$7?!U{$C z)Pw6m_Nusr$j>z3am_QmDEujbGM*^TSW^c|aP>7p9NZd&=QT47j+Gk&k6}rSVHvAY zGZ^qV6;--ak+JETKoapF%`|^1bjo&ysMWZsxXA}zv~;F|DaMO{9!(#|MswKFR3IGE zjwx4~cY1dQHyJdfanhfFdeRZ@X^3Vq(wpBsDNo}@2JWTERE4j2%ZQcZ1hGsu28jrPgLXa>ia2D{B(8f0atd-|?uF;j(j2C-kp*>~NhWlY${TvCb=Pn|C?I zb5>25<9rf*E22^iVB}ZGM8^Ad(JS7^=_8`_;WcNtYw=s$^kvj@8ta&TFkt>LPGDy zPC(6im>M$XZpJkwWNyTN(N#KQy<@#s_RIO0mM23lgtBn63f- zBi=I~FHclX#J4|{RFlWL#H@CCG5QQk@q zf4a3!U2|5L{MwAXcTW1d_*4+y{@q_;Lc%#dED(!pQhWf~AxwI^P zc_eSEQE3SFC-EMS9(UhcsU3`hsNDGL!}iPbUMqjO&3Qvxsxb<@5rgv@Xtz*tv41LR zGU^vS3U7(}TDST&wDNm}s#E+;x^e!Erm^&AZMDXTlo9?FG7JDH)l7ykgQS+5`isUJ#M*f)B7qPcQSYh9cDW~(MWhAOF^@&5qU zUtF>8i46zqNKP|O!EwG)6Ov?O?#7%FKjDpY>U&ZL=8rR)p#v!X==?<@_26QZoyLIs ze~T0V;4n{rdT_w)Q5%Sce|Qc$^G)-!ov6$QqUMl`3Pvz#cZy_o_cE?h)=d2>%sM8k zF&Km(J;~`#;6hkrREl`58-EJjGiGfIaNh)vw~eK%N*xJsl~#M1bcp!l((dFfsb=e{?Q6Ev~%f7;bT+nEro9>Kz?M;<3+;8q-B+`d8y2sdsZ3M=FiH64@w5Ba$n_)4EHnzjg_A#8wozt z?d)6b)+y9(daD8WRA&0~IrD=3JJ2(AnoRM>)KgEIN8bEEtRtvhV+M9%>z-+!Yn=6& z%>Zt&ojEO$^r<187;JNg9+l30qF$TWk8@GUBewzD9@GKVGoTqVr{_?#@c#hMb^Pm= zC5ijZ`O`=zx8i66r)lBa{=5&ZNA`<<`T1UbE1hn7^NLX*QG~}Hlnm&N%st$n!kTYw z27Y$q&{hF2jNtxsfSiuB0nje1Y&iLc)Kku_0O&rMu57U#Xb+B^edr4t?W`dG0G4du zQ&7IOh2k-h=~%_H-klt=q0Er8{S6?osM_R<_aa6<{8B!*Jd3x;h-c8&V@eq16CQ$^ zW+V7FQv&3Al*r|Q9>9uw>vtu-{A1{~nD-l-ZM&uFu=OfaZZ!Sutd8R`ofPllVx3zi?hwmAz)COao zNZnp+jfTPCp7q&yT6btwK?JS?{c%8!!JM+-la9ce!qoN2BA z<(%=(dQ(GYS#Okj`&3GPY}S>WHV-I!sY|)?0plz$pcV{%&BR33Z6xKh> zr64C1;7)lIfMbwX=5nLdRjXSYJGBfZkdcCL-D;Ho0CT-x(25U{n;rU78YVhC3Vv6V z=hf+_Oo4bMkGAU8Z!8YKl|tlaj+9)h8UFy;w%dQ@q57IZrdt01&m0eK^>`3X1(bSX zmBPg%rrQPkhv}My?cy2RY#ZFxnVups$jwAuN$Hd9X@!jCwv^=g5k@^!=9JkP1{)uT z6>zsX8RnYOFyeqI4L08=D9nA>)S?K`U?Pvgq%xcnQI;lv3IHQYXs!qP!}yA!HjOcD+weUI zsc3g5(|k)T4h73$d$(gP32}bAa%g+`PVd{ zmdB+TT<)RN!=@dx^zTb0#_`wX^sai$OB#ITx(tKsS5V2jZ#W{cXweUo3i(6DShl)w zyIACU)GKa4`MM638EuV<0Ms)P+N#{kxlf?{sxyo1-}9#KC(^mj zk_k8G1Fcsf)Pj0d=3X;{%_GC|{b}5mildXz4 zc2SJyo&`-H2cgYLV;aeO2brCMMJ<3_KHyGO5xgVW*dmM4d#WbuYGxMhp@@Y8w(u3bM zLLJhK^GyeyKROBZ%>W&L#*UPk_u`Zs^rQfOwA0r#;(e*6fD`qtzYFb6LwoWwo+}cy zv=+tE{c5ARGuZWuOP}Hd4xKAu8Dv9|g2K4VX~W8gco`TV8tN@JzSUF3ZgUl#NMb$l z#YKbv0PC)`JUef77XC8b_Yi3t!ef%MW8Sl7@i`e6bY)1cGW-#6zPfE_3E5hZAkHmE}&@!afkf0-s z)?MYyR^t&5nDLX+v?jBWj$TZ57_2=;C5~P`_BrOM36!Kenwv*cNmf9;xinEh6aZGn zhGUStQZ_U9b6Dn_j#b7B522(qb#EPwyq`JTN3~4_bPlRr62c3LQ;@|4j@CA0ZdR?`YK~gmUcRg#7u+(+y z@(4tM4@~-3Lu;lpVXkIr8G90Wsbe``h#G8dvUpS-z5OfC9RTTrUe)3qIVaKGRWpk5 zi=F8+hEND3W74{5OG7E54B&cGNf@KQN>d*0d994b1D{%%Hxb+Lrmedk)oKeV8HVfu zR-(ybMnE+6Cw2u|j?OgYm}mQ@mRGm7P)X}rrD6uGQZdFj^{EZE0OvIuYL?2sy9A$1 zVynriJc9sWeJHvWi|Gmjf>_(#*6_m1EO5VfU6*^kGa_)2KnrVo+xjF{HsHa7i z-IuTU(#HS`^L6#7>>qa^des6shFmr}Q$U1V3#an|Qax;;@ zs8SL+Zhfm?L$!TFShu!`O9f!ZA6lfWGu`|jwhs?mERu4n4o}j$i)o>mcy(?ta4U$u zg|w|2BxR7s6e%O9towahc-t^a(r2V+<;7*}+_gFvFLS%pY>m4qw@im@w%#k9@f6Oo zA~pup$6ochqw1e+(^hGdYmTbN(z#C%Uwxwdx(p~7>r(}3Seg7MKRfLux%$?5a>uWF zvvk>94o_YxvI2Uk{{RZzn3Kj1YVErG)mk712d_%dw@^Fe`U;RbJsLmsP~H72T^IDM z%_L&YbH~=TP-cK020iN39YCm53{>!BN#7M9U5}+qqnc!RJt}RyV>Kf~vBe(d1 zmF2pq0H?1!Pz83m3b-{~+-^DPP_t*6YaEYSl8Ks7ed&!L6#?Vgkx8P!N?w>xdQ1{P z;+jD{DcA*Lo++ELOR)FdiUJW#LT|CI&u~fpdy?G!ijD3@ge0l!SBMqyznuXb4E_K**aEfRDzcXmd!g zqMVR3Knou)hTzi8Zn^m+4VqU9>N32J^u>s7`9%Og(A+D2>6K5dWNPwVHq^La*zJy$ z(UY}tT*j>+lJEk0X99pS*?zSV;;k`7T%3&iRYz>Gz@#&0L6J;`Bj1r-TqA3*&5>Mx zhGSW^U5~qNIs;ygG`nFRm@}T(Y5>k=ApF9*Uk}Z@k8btPPJv$)siI6{kYlAt9gG(# z1iXfBItpdxumlo$Q1TS=aa9$t`?}Q`@KQiCT$L~sYR{f)Qq^fiSsb^>NJvM}RT~fpK9yfl){{?vFYK~N;PQUx zq%>@q449-Lw(>x(GWW!~v%W2@#6bFxO<~;K>ldt6N0FVm+7A@&!pEaasMyv&x7r^#{t?!i3mV==1`CDvs`6RJ z!2HCH_%+W@u4->4AhabtSFUQe+dM-r@VfEsOh;67yJugWwvS^~r?j)S%P#pyA9k?g zI@UKCj(e^uPqk`81>7IQGz`8kH1VC*>^SFxM7Q>FugPrfp4i1v{?nEm`Kca#>7&G( z8;ApX;){W%s@E%+;V4gIPX5liX8!<>g^wM!aaqgar2vm3IQ8PDPZmN~=7rbT3U>od zY@}7e`S3dX)NgBaLBK)(00GTa9x9I?Eu@F*iW9{O@&t~~V%~y_fgrTGPOu}NU@4$n zJMA{`sL%KEMQU5!+)kvmh>ZIAnKc~RWt{F>WE+oPnDbKD>`AA^G%|eVJRkO{_mP*G zT_lfa>&;UB%CJrrCg-@3s?D{nlq-P={9M#I50s6gX$BT8`07+u31XPZh^=KLdM$L( zPO&0|i3TW=b|jvkN?gIpRMT2ihzU@trW^ysD~`ou;mcY6 zV?67gxNOtcM1}=bN14F>`&IjQ4A?zt_>D;UN8)I>Sj77SM7T`j=}NY&-+oZPtzVza zRy9gfA;%z41X97}5w-UUsd0660L(v3nzj}~I^@(&gaf%hI$&Yk>zAT3%-F}Mt6EQq zV!g~$4X(Y|;-l2G-?Ur5m%%D}R~2y#*7qbxpfa8apbu1qh#L0g#!nxGR(Fw?nKv5O{?A}X-XwJh zxu<_)%y3c(8|b+-?kgPoiE)kZf!j3+M+d6|^{%Er58gi2TS<<4u*Fzk3g2=JA4)?w zvmA#!8c(yim%7=4z2NQFIqPk#tSor@jK3nmrMp zgtd|X0N@y}TT5$YJVKfJRG()Ba1lWC0+qt&lqQJf!mYa(^xAm+D#Cbb{m&Ln`HJ-w zfGX_@0QTaKBp%J5trrU(aUX>5xc$w)KYrb1_>#z)WsYGZ-Hi1RJ z;Zwo#DEY2qR`m;-vmb+(7;DD-5LaR3u0N$eVu~&YD!vZ3&(CtiW2QK%)53ac{{Re) z_}4}w1GO&CK}z9c0C-nRQ=cUMJk^i*NA&eylGQWWm}a#6l3Q~UeX32Zx2NSr$73=L z2EsPo3dki7Q3}iy>Kccs9GHV0Hgp1 zpeBH^FV527fT%n7H73#j0P3o3s#y=aHh%+A{{U=S6M?-_TrH1*LVl_dG*BsV|U5pJ!&~5j@~fRvkdSsxvVzVFIZqW zUv*KMuO_E;Bjx08m!$z?rj8#lZwPtzr}+*KAY!>gsa_F}Il%hVPjxd9x#T|Ok2Hs4 zvDiD~^Q12lw=Sdct}UgI^=fExrv;nyH0%dv*EXYYH&Kjr=Arv`oftW~Pr|uVFEtxV zr2746u#Tm*s|Dmp&Og}|5!bCb*&L1d*ED7Cj8jCJ?U72rbT8s4!8>i+{`#n&#AJ__ z(5d%&!Y+4ky(#ZAO)HfR4sIG|(2Ov2;fkFu>zjU&-AJ!2P4v$>zwmb?ZWn`*nFpq(qLD|e)RPF z!=)xUr$#=1YLbHG@Vj_5U0SW&uIR}F6`nDZSk6|FNftrK_owGQ4L}ZR#CLG}72EYM!3e425=k)hE`p=+p+fKzj1Rt4ptG z`*Zflg8u-$n$|dZ_9e*~z9VcXY~zk=1{;ttcLF}OKZ!MKJJ|e~XDyM{dR73FXa#b8 zv0kk#BjiR>s*a*NoPZSM`%~p$>DQl1<>R|}+l2@4tFdYlz7xyf_9nKahLmS>Db!6G zsxo+~7-V&*p(WSerD8T+Ov62vjwrhKDCi1 zrK=;D!hku!+rY0U6@ztWbFP(W#yXyh75A2f(=119R=hXL@di9+)Yp-<{;>UL+3uqs z)|zM49AMo{eSdg=#TBS$7{$f zBOh+HWi6Fh9nH;a48Aekmx%0a2`x)A{jlJkfogB{iG@pXjKve{seiXSMO5f^~ z`w{J=Z$qzG!w^TBN_mlqstxNv^3Bc{6 zDE|O~3g-#Qq#$P%s-~92^RuR3h*u~!#id|>zyAQ%r;ms_i8x&~6#AFX^sZx^`%{3( z;-4UM8|~x0ZHLQk05s3|PCP(I%MGyn>kujRr5VSs)}JC5Gc}vWo+Ll>@A*_s;=d5T zTZota)vUrfrBV3(C~!f{%|-E7h*?MaQVf5yO>YwTf=|7u6d&xUtne}KOOE`}$b*@Z z$*5`*ljmRDwtw3oepL@F+nJoP?pr2;GwV-S^Hs`)b}+<^)kb}3$!dU>UBmIIf_*92 z>+4R!xnIa$c_%$`XfQ{E!+v!+;B}`)2|alAqQF*bc>e(BnxCkrt)k;A5|44kPVR_u zppSgi5;1<}ki=-z9)s|x*%z(}%_n}e5^;>s1Tsg1o-^rH9xRNL`qb0OmOnTc>6)g} zam!M$$(4B==B>mRZzr#<+@W51d{@ADh8Ye>6+G03hE3&mf|GO_g1Y%;LYkiXixaNSd#T%%|7|Rpb8kHsm zen{kg*iSG;<3*FPeHK0 z$KfkvQRZAu^=3Z}>GAXBGkr~L4yK#AvrKj?N2XdL{I;pbPAYYQ5PYzp`U-aA^faKc zA9{hXb08}O%Piu1)dI)V3d zO$?sdFDB_ghV?UiB zY#ip83PA_nj6MehQnM00kEJu9pa<-KYGG*wF79)hUCYy@0~m4-si2Z58*}eYECArr z5S)=owTPwMeF-#WyVC&*lg2SjDA?;q%ntz5gOSv8KnNo{c|1~W=YvxDjO)qI<4wmN zlnh>ria-JFnm|eGP6TH?s1So@e(z6uLaNy`{HYu+JzXsSwRu#&Ik`KxJmt4>jkQ_)ae4j82|deWG*}N_GA};AN{ysJ=rPv3jCkho51k(e zxqQ+$j;^@ck^$`46j&~L_-)IPfCV(ltJSN=WbwW8kQ5$z?rMzqw*B{Hs{_v8GK&Sz zV{51hz?DmVYP|Y{Ht1i?M#pT|nA_{kJY}87sRy+_;`ZuwDHeUP-m1d6);EkB%zr6R zuSFra%|zZPyk^Kq*Bw4;^YiwIiQDEMnDrRv)}w2?Q0c;tyb93DMwP#eMZ}vUPznC^T{`Qk?vrr? zu&!DS5@b8ybAPjpR(i^2CBoPJaRul5;8 z&z9Mz4LaoGY6JB(C5E#Mc zx_=W>tP#1%IHKTl%cU{SWFMAkMvzW_dNcm*ZnSZ(X}>4}i-C##l9=X3^yx@+rR^d2 z;Y|uHrZSJ%t+*=~%`e%b zQ}UpzEg~aw#F|4Yvf*-j^yxql2vHaxB}01Ro3wv%bL)zG7Gs^K6o+?Bln7x8TOmOA zq$}S!rOS2LO*v0LaM5roISRjbJkn>5m3B-tWNjq+nyDhNJg*dhgn|Zfk?l=jdefd( zLEKbkM`k<|Knb;nKgyz(EyJ82txvW?(0+7{8)KSaWlv|7Ju5a_OgB-H>MNm^5_+~i zl}cMZ#|8fYIxGi0BpzFm56#$vT`!0AD`%L)ag~w1dRAoiV|EK1`U;}euNCH=AMrfaZ5%g`oOCC+_pd^-)vT`K4zs5{ zfz5Nc*wHfaRVO7! z5&rcJaSEK7kPmjE!X*cs=k=%VCj+%mZC1fY&3PF7YBtui)yX$%eSn}1G0%RTC?kQ- z*0P_(I%;*fCp|Wd)DrlsONRu>AqT!WrZZ)L3USlkt4ODIMn|<|j~3WT_aeA+=o2)j z#A-2(I_UBJ$~jmzYbxhGaqUl7@PEd!hlpp9eoZRq{{X;vqx(-)l;Je8eLs1FMt3yKK+GVw7WoX_zT3hPO-%ATQG=tyPKkoS(|3X^&jgjHxBMAvw+}r0diHpQjaSNpeW( z&#gv&U{B#xiD=C!hva@#qV6~!2Wt|i8@(%54MCG`PDVTW);4*o5u6Wd z)-0Bd2Aq~8lY>#S0zIlRgVvX?de8;x-7`%*^PZil*!Sk6JwWT4E&?93M))}X8fnS& zG>7y0P|y|;{F#-(IUbcY%xi_6SZ!{ms)pQ{$2DrsP3qR?spMvm70BnUM#CIblEzWk zR7XChoxoufgq-tAee+BwnwBx!so}X&c&M{a2Ru|Uj+kYE^`@kI+XJmi5Xb--&uY`N zvH=4c#!@LDvbPZr;y&1`#W*d`y&DEbMNWvjNFz0qcPz}Ec7kzKWE_qwTH-Ks#y=X( zWyeFsNX4^_C6i-5+|agF zs}T>B)d(MwbDVnB=nhZTkP_o-2IB+Pw{-dTsA4h+>+e`H;0lt~;GxETUwVdGJqu5q z9g0p1bgf9oLEk;Aj?*tT^&=J3+uW>?2M4Gbs3_16fsf}?#>*sm!N{sXw=W!2w(eDc zJqh)ygR>??#4@keg^_`&f&w|gs3t=h;<`*ni9pA_D%>iZ9{ggdFk*Ah;Y=tMU5`v; z(-G!B5w45hh{g!t$@J%n;Fx`Ds`0GbwMI;nx1ZLzMmQ#!B4?k*oC&D&PhLKh#4mb7 zoSJdzOgxS$0Ahj1dQ8zwVuPAOJ@ZFeP&?8A57xGHA&E1Llj~U7;*;Qkeq&8eLlY8J%vCvbJPC-uUSh|Xy{-dz^Ru7Y9qk+rwmqRgrMWS zE?c%UQSy3Iz$Epl7!u%a&q`|+Z%%4Kob~74n#t?>Pz6~43PT#FFhTdYHF{LQ^&_=s z+z*!@tuQh535r1=LCUWL_O3qSLnND+Vi-{L(c-WqV=(y(Z&lyoa6yggA^?>Hg;LB4Cg1#})0)Ei3H1=p5X5ERxlaU!rMt!UZE1E3zgO+~acTC>^g zJ|I|J!pm_93cN94Rc}s*s>}9^X}p<7-tyYH{VvTWu|_Apm-EATV#n!!#{ z*y;9Zo|j{CmYQFd(+Myz3F>Qi0b3A|!n@JUY7_2yAPaNi|4(+y0 zO(V)haQmAW_NK(YFTcG&(upQG9r2S^;ZdHIce#N&4o82jXhZqy=cekDvgqnWgbBpT>Wb7Cp4HAm)5LCI$%|GJap&Mr;De*wMzo@WO~%# z@l~QVWqVQ>y#+aXQ%wufkP{EBJabG0Q^ypBJWweCrKATn<6)f$`iB+f_f~6l@|P=) zgmte=@u9|sao2dSIh~|c-4`@~qy37R`{(IP{fM~x=kXMcd3?vF-=#*^cYyul&#f&= zBpMul-s|g1G$iB)W1qsPKBsUvE=N77r&pZu<{mw0)D0!jEzdcSANS}Q6e>9^IsW!* zDYbioyhwj4Xw|L<@tplJMxbkr8XSx}pQSalX!FMGbjhs0?Ms3_`wDAnbKvBYOh%vf zIuZV{iKF`&bDZPU=CTf_Gk+Hp!+A3dZe!m$rUtv|aG}SWlTbCBO4u^-^yyiRbt&(U z#}v~mk;@;>ftDsHhYH(=uS$e7x%Q~UfOpTi6uy2v{b&&(k0YFPr4fP6KyC>*#V4G{ zzfRNvWPyy(PZdzi!jR5$Ol6|LbBY7|RYNO~deF1&Zk$je;)Y|w=B-6)?0#+qQ5uA+ z_f7|F3UBs}&p$EG+5clS+h>g>!9LtMPq#JjF> zp8e=xi*nt@mgXdlcY2;{Erw1{6vmlP@fuWM?Zb{~4A=1O%vN{hmPqXu<|I%C-RyywFg$wI-5OA5P+N>vGabr5!mjDE6u48n7$Sik zv6Ui#yoVfDKXb3g6S~J9PI~6HE`NEZI8ZufxM^*%Ase>f(?Tx2<6OC8%`x9`=y6fo z01i6TvTRdKM7nv)6+Mkm@eSlw&Whj?#NeKSv^4Mx#-rD)(q&gFKPo_uGE4T5^vLVQ zO=ER-@@$0w1CqwCe`lvx0Y_|#HzXjc{*;O?o6{Y+1&bcMaw>tmexoG%nu<@Kr|C@E z0+Zh~&=!BSZdC0IDrmKvjogv!PB^T>pk}6m0Ub5c3bBx zt?n1{r?3jgj-9E|%oC^SKokvzrIYe~2yE1eWqG)7jB)3@-aY)u*DQZ z7ck_W#PqAlJ%TUG0)8T>$o^|?BlDz4^FSKusoO97u^)yiN7i5pyCWca- zX>_$QbzfID(WD)S(H9=p7kTSu1F(1QwYKKs3Vhb>w{7Z?&masvV{j2=h)Sl?n(?0 z#cGIr4wU}@Gy%w<3)4v)$W=)UYLmer$EU3#%jt?d_Z&A*r2r!%s^kieLhiU`$@Hs9 zEN(WFwwm#%JabG62@<>E#}!Lh(QPl|z(B2z4mquYsyXjSBSzr152>ed9$%CGBE-eM2ElS^S(^bo`y zsDmHgse={+a2!=DeNxVQb(enJ_3ujht)l+`%U{S*aIt8r=Y;}*oc$_^)olL&=c^Ow z1tHe$fcZBu9`syxFSBjn55kjiBbv@S%xrkKZ2FcI*4B2mKF**H`?E#D#+Cz7f$3Q1 zU2qQA;~x0UNBy~UPYW0y?$WrdZtOkQqB0=J#%m4ri#1tU8>SGJSKJ%{MWq`=>1%yNN# zuS{1nx02bV+;i5oSHrWOS(E8bPY${J_Xr2DG*~WVahjBHyaDyCrSR-%yH?|G{05{N z1S9@iKj0_}ocU5aQk2N&rF2o~mcfB9A@|)={{UrK#<^7`k3*i62<5~MdMQ5i{{XWx zuIJ!aLNus zbWl5-aEZwW%VG^Fwz+?~Y~+10U5Hg)in;a}rwCIVib6ck#5!%rfK2g_GtPTg7VC)* zr_#N{#1KU`l;ddKjtCXwccT(E;4&E0uZT>gFZ!}De;UDWmB`?F*8HOgbNSX3!xJzg z@vh7}_l%@cyj}6`9YL(lLFTqxW+on$j^hq%dXCZ(CXMnjR*>XYcsU}i+sTz7kLOxK zcN0YI!uF>6)QHfG??0|7A8M1x1Ju@>!W*8s%>#kbnn)P=g&UXq%6^8cm_vZi;Yu=1 zC<-{|@}`GS0OtqVhQL-hvxY_8*WQ4&{au64P70!nLI&+skq~{QJX}(c^H793F4*IhjG}*2R-V<5v!gE z&%Ik79lawyYLB3+Fz8n(aL%9aQueX7PBjT z@U-OQ-ADfbeAhgrx)h95e_F7Oky=0SjJl7S=w$T5)4#A9B+uG+A5FDztzk50fyFos z)a_+B2Wk=rr+P(!!TFSrt#m5UBElk&!yPJSOf@<DqYZQ%2oR9uX7 z?^B46@fwymSDdqR*iw~fuArjK*%Rh8*wF9AT$0tvKA)XAAu+IGH&$;E1Xn8}Yjfo= zJQ~Dvv5)t2U6KWy5Fr418gyD*Sqxx{p7qO8wdHcsIOLT`O+l0Qpb>=|{E;9Kxm;0x&y!)SEZ)gT-$cQZc~K)KrkdHt~Qxg$}o1 zvCRnb-7*Jyd5u(e{{X&oT}P0ZM ze&{~ONBq zQ&lGjrANLEJv8lBZ@($Y>A1tvuv$$Gssgys0DDRr0RHbF(~X_J~f@Z^Y)5X!iN( z?~2jGGUt+g>L#2*e|T|D$S%mE)9sV^KOu^dtu3+(AkWg8FRh)MWPytI2CJL9r;xCT z0R9}cAhBhv;n+6Dzl~LRwzmirQ`%dj9_i&(PeD~Ay@-+f#U_LW=)UeM(vOqYv+br? zBi;^2wOv^-pRHLW_S~}%Zi1_o*(+fFbtR;jnD$}~QoE6&yedusT;shaBHl5cM>HaV z(Bi52pb&8(`YEXrP4Bg1nB%X=X%tzKIQcD%k7}w_44)|HuL7iWxOL*%Zrp6-(^Asx zV>Yt$*eNEM34n*MTA2zEY5xG(SMm~4&BJ;gKb=YaiK?~$vTyhktuP@NJt?Jvo@(rR z2Cx4BKHEpLgHk7jwKi|Kqw3UL4A8)uc$EiQ(>@f`lwqWVQ-i5K7<Z+=&N0mVmLsB&CQ86pT-$JxuMw+e+E=T-SO42Z+=1qmXz{(vVo;#kQi~cEU`a znc}5O4OP0?I{yH`g?6Qw;Pmwr9mRU{^`~&L$F85MlYwl0rK&~IwN@OWjQX1DvPtHn zWoZvCcKT6pvCWMGQe(8dOYUl4_(pGd4}OR}mo?E1tII`$&<)C;%4tHJ1eQ})ENYiBHln&I;>ccdLV+43c!2Rc)kGq<1@U4QM`D%WyYizIr zjEqrn*vVfH>4Wb<$g2?O+G-z`414CTfuEX@y}Hl@BF5Suxg30YEkDYL1B74uc31VFZp36rDTfq*Q)DRzHP1?9w0M%>YI- ziVx*di+N8-+MX<@Jz_tV09V`q#VE!(t0zvnKXxy|oVs<-If#sRrUhKDT0%!$)#cJ| zU!O1PcM3nUE(yRwe;NSK3<<}~KMGULXpJ7^;~`d*Xwrk#bKK^OftF*>Q%SUXR;y^v zI!Y=Nrbr|Uz|REckQ9f~f=J{j&1{VkKJcEDXs~DIn4hHpV=HbLJxv)MGtaecu8(Y| z{bZj^)6Sb`pX1NgfH4;vedy`arEL9z#Yo}F{{VWO_Dey6sDBfh0LMlLwG2SxAbVEQ z*;Via-%zB}0`4Cu-CbmukbKI&h^lQ1s|}d^Xafmg zn2dRDc+X0aZDnEpsDt#a)kj~w*V>hd9q~*IFYNjA#4Kq}pFTe01L<3tY>v4UZuOuH zRMW0mfDryX3R9*|PA~`KTOjkCkxmLT){q#ZOS>cPr~|%f{{Y!{2d>b5wW%t|ha)6< ziegE-1n_+*12}0jk&`TA@TUzfOrM+|!nAk&Y2olXQE)Pjj;HU-*V>-CRAUFsW9^F5 z-cL{sA?LUh0iOD7Svvt=dRVmUF_P%sXZM9)1P&>f8?p!EKo!oNZUMsQ+?wD%CCDvw z^9*qC#{}n!^qk<}_UD@NABi`sEXe{(ziWbV&`_8hO^1<$62=?THMt#@p5PI089nkV z0w492qPJ2*AMWv!>MKG`i1hnzqTK=Z6*1FOZhVCmfS0#&NPp5DbJG~Dbh=fKYuvFo zVsd2Qw+YVbX45w9=zH<@uV^TtmUHU`bc zlnWL`+n&sMsV$%E>=IlNyOZ9z<8wF|Yncu|+Nol?EyKy}lSmHc2;sOu$^&-!jw)ZW z#yMpN+PM2m=`Ec+x5{Uf82PKFvesajVq_tQQfY{?EZ{%##ZPWVX^p1YxFw+@KkZfT zI^3p5)L`+7p?i9sN%DwhUN}AJfa9asx6S45_uWV|n>Yp*90AWPO=d&lDXmu$LbBxX zgHsO{F=LxB2l@A;1=de0Gvr%ue#!+^4{{IBYbpYM?$Uo+c=23?vMtp?>BuIhPZF7l zS&>ue$v;W}t_;C*_dbt50GT(}n{2u3P>yVo~$qTiVsL=5DgTp9*; zKiSrSepNs}-lSU_Zrcg^=D45i{b+okTz)d~{Oa0inzZ_i^fqfj@mbXaGNnIOkRk79VN%F3mNQVF~Tz^{KO*d5BH$yXhXXEj$NbRnI1aw2}ImhEb9&rubxi651JXXD>@7Q4xB=IV*spQbcbPa4vVTlLnOj|IG z!NIJT*SQKl9AtiUeVf~#rE~(> zGyWo!!4UouPrVlz%{7+hJCK~x3kLuML-^N9AwkC9&XdRl=V%nJ2RHqla5||O>E4g* z`9UC|71D^tdJn>sN1gzp;bWN^Y@UFMQKZT_>-DaXqXWnCrv%S#Pqi*!vCSPWPIL2n zV~S7gi5Pv)%vVw&a6iJE_Iwge7YiJ?(HkFd{YunrqRq$8gI!Zw_v0SsgB~%)Dcme^ z(rGs!F7HLWS$<8{SmDdu9pPD?=9iwr?+kYB4g=3dK8I^zxIrZ&PH-+}_ z(?Y)3u9?=~Aid9SfYe)b?EUvA{pO>Xb~%Ue#ByNy$&YoQcrqD4{{Ty2?5ZoN2EZN{ z-zS=Iy|zR9xXX6plVdqk@b=070M^dUj@YNi@bbYMBI@9KXCwJnPWqB4$cf4H?@9fr zdHumY*{OPr!~Xz;G8hzprd}`|7k&jkKMdF_gCpGW$1)R|**c?uHpBvxW zIY<0?#kaT1QjIdnPJYV>Z&H;^-AZ4HoRdrEN!QF`ed*XPXp2Y}nBF(Kz*?l?-8cu@o9D)Qzv)?sfM*NVqz7rmAT$lcW2+K+bfz1q$ruht(yEMO6q|r1orGEw z9#|>-O)0r&AL_xZqI7o)9p_z;BG#(pJs@!@~=)gu8!J73cH4Q;<=`EBIGb2jBNuR z;+}2tcmouRD%9%vA1_}@i65D^O>G&F( z1o~7^0=WjJ=hXfc>QR;8k1D)vApit)_Mn5B4o4JZ6VG3I)WBSTJJM&Kv@xJI1poj6 z)Y4=hr5m%KT4`Vn06LUoG|j;K(ig%0lmO-+aZGda`ySL2%{7?+0QKktjo0kFo2HU5 z6;C+tn&*p=*1L^*J@%~FEW@D&xQm3^*zH_(V`g^ImC(a4Iq8~;NnE!Ekb*P$QLvDD z@mU)YF=qFv7_u*>DtMp@azJ2vRCfa_j-N_ovohiLWPY_pxg6E$#?@{(`c)HMRQ5RM zxXwtUG!dTEm7$Q~%}WyiaL27g4_aEZz`VTU+N2+bYNRjgR+WPGTf0b?BCf53Otf|wf!9KJBNUj?>Bk-=DMca7;+ewr1?FZJm)?C)Fhi<%! z(4ck6VN`*XCxPrQ-rhjKh9@VXtJdeZ9`&i>y*nlw#6zFD*!T6U>r^3f+6={^_wjlHZzrF{(X3^n#%WUFU(Fjz^*pc$YIanTegzm zfuFnIH4L-0w3tbb*{hL-SvLyiY_6E&=f|-nNrVi-BO2uMVw_1i@k{J&i15*LHskbSMNeBdmT-A_xSBj<&tjb1l$jx9A zn%eO*1Fc+OW9G@ndd1Ha#1!G!nrJledQ$+-N3Y{S`cmXl9+ZSMib_+~n~DHldr)#{ z>N?PI??AxvJJ#Ngv3X;6Tviz4>svZ{6o@eDX~daqbvE}25CK;w+}4Cw#d$_ypFvm_ zvxZgR`V)?oyAGQyh!|ylwYoW^b-o_drjrbWh69mWl6a!!S(Kv;5;8hgCW8w>I-pP( z@mBR%nmNzQ?oAU{Dx8UA@g4Iw47e4Is_NG_C{g4jXD1_yc>`@_>I?%9dcmDYtLEh3 z=A>61wNH1hMM|yyO=8UpV{0G3QmDszsE>?e@~M=MQ&KX>P)}M?00W*Wi-AhV3TXiZ zpa4N9ip;piKRVEyhB-a6#b?}(KBAb+Z9#|G*b&rY>0DXsj+|Fvs(iNPbJx9b?f0tD zoQBf#MI~7x(bkGkC=gN_QaR?69<%_XsKKv5@Z6iU*iQ!_R{@SY{VTNa<6_l7@69G! zJF7`@Id8(XpmU#0Rt2LB_5AB<*zQmV<5@DzG#iu} z1mZRNd)0-~(MQbL`qil7h7dRd9@Rt{n7fzmrqSpPK07JdzIQzPBvY$Riw# z)tThm3lr#ib*w0@@o=miun$0MM(#kC*w4&*RYlnuRC<(Rxpb9&P*e|_J?nbW)_Y`; zKI>O3(*r)=%-2t1n=O;+oK(|p=4IGd=IPS35M_8BO;dzq)zst;wXhvz3;v9rfpJqt zxNk~ju+6%C1z17#sRCsg0;i9)K%D{RtR)~U#yK99WqNy6X!#!XW-3D-ewn3SdQu*= zql!R0b*HJwri>bL^rSK1W|yrXrR_)#W5&Qx-Huu^$vd?Y1~IY_HRK!wtkqdlluby02%u+RrhLY z=$eC)sRC#H>Mk>#Hk^IlX$_lmg%#IF;hWY_SyUR8JS8zFbn3r_7ZJvNnfM!XN-cd> zyJ6uK3=3VcKHOA;!WMf*`5n*Ji-E&^l|au*X^sWty?3L+dU}ubIrlX2;fnx2)bal9 z7YiPBB3sD2Nyz$Ejjo&FsO>z-ppHpDh__np4~J~Z?GX%pD<=N{!8W&&D{f^~>Z6U- zFHq3Kiu=QM@A6qdJ7g%T8tZA7)}UBhB#wJ3;<|M3E|neuh!g5btvhW7!q@#&D!3eC zm7j6x*z#*#3sROvWw$C1WBxVK+h~`Q~3ydWINn+o>#z6HZwC|Y`-*y9W z`qo9GV&k53SG7XFWe0!SZ6rvQ0@(kV-yT_0sjCR zVUHwpflnDdIs9qG$pL5)075#FYUQ*0JK++FTyLtvzofTw#b5g2ziNY1Ct% zN@}JLBB0X@*U^O-XC1n6T2E^63_9&KKvreQq%rZ&H1fFXOP#|Rqy$PZ-3?9liBsha za65LTSol1FQM6}wQAiEFJ63)a;E`HVS;MMFvDfD81#)UyBa}Rf+|zY;kDn~>1G(!+ zW+tbi-0AY2%EdZ^jMP>-gw`?uA1Zqq?$+%u;@c!@q2lznE09vrr zVx2?%?`-p0CS-QRc>~RxkKrL%}IA@aTSl+$~=g1fSmC~$77+A`r16<@ YW)ve} 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∓omJfLd&@lC~pgW<}Qu%ih0gA@H!Vr0U` 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 aY*^xaHVeNliag`RWN>&*oXYUu!v6p{hif4K literal 0 HcmV?d00001 diff --git a/tests/data/pseudo_mapillary_dataset/v1.2/__CRyFzoDOXn6unQ6a3DnQ.png b/tests/data/pseudo_mapillary_dataset/v1.2/__CRyFzoDOXn6unQ6a3DnQ.png new file mode 100644 index 0000000000000000000000000000000000000000..018a53b3a46d2aceb3bac0bf457dc0829d867f0f GIT binary patch literal 75488 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 N?ghj1h3Bj>{{xzZyM_P& literal 0 HcmV?d00001 diff --git a/tests/data/pseudo_mapillary_dataset/v2.0/__CRyFzoDOXn6unQ6a3DnQ.png b/tests/data/pseudo_mapillary_dataset/v2.0/__CRyFzoDOXn6unQ6a3DnQ.png new file mode 100644 index 0000000000000000000000000000000000000000..a8b4b62357dfae32357067b4c55b85222425a70e GIT binary patch literal 75316 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

  • _W<(r1|-U zu-DtdeC@ET_o#47giPn`cTv?rBduHU;OQ}dMtbxP+T$X#twT=VWYbpae5+x^q(>-t zY8}9C8=Rva?&Nq1(58O|!BZPdo|c&veS@t&HB7L-U@@n;y!J*Y58k8qz5!wCPC!>W zi~eWvzz)DcW(PoisMxk9kd>GOI77e0*t};zbk*$0_Mx8XAiJp>_~^dgx4o&ftlZ>w zwk_)TpOJ;9C8|gnGwrfpEL*|07B1yB-w>;6X=jND3XXR%9{RI&HcrPTlvu=1i)I4y zZtEr+IRcc=+|=EBciY zjstU+uJxL$5X+sCzgp8=28!NFFlI##^-P!1)-wci&W$w`3T36X{!fnU#%ve`5ZzbN*(Bsx%o z1eXsbJsz=(n(74>`G;TAU)9^rr1i{4A6iLsYV74kROFIc{K$O+w>y9WuxqpWMeI^p zZ}hTXeaK$Rt33`o0tuZWQ{J0yGG_u6V#{MUf7Ad70W+5=DP{pi65HX;-SchQxuyKX z0=qW(*0+O=fQ;G;%%u&nUPYr0E1XO>Mui1zo`6W0f)l%~#%Xi!LTtDH0Zfa8QIT?=_Ar6Af&mBAU?UhDVsJ>H`cV%g6kCUQtH`Y`cx=o56 zFg~swY-cpoi`|sYwUG1OHgUI?=t_j&OliuFIr|iLfibt+BNxe;Qg5!R@tPdh3AS?@ z`r{~`&c6_w?I^L^hkqqvVYX??gUOeWhzieMWF=Kgoe!49Z8@(MHLsS`H65BhcEc%8 z8p(Qwb7aMnvH|TBK`e?!MU7khJ3lREvwczFd){c%82+|xIUihiW+JVy+NZNi*2JudK^5Z+!yt;F5w+LWTz%5(hZVJHN>+cyRyC`h?H5=q%6}c;jWDIZfe_+sn(Aji^<->vL}SIlbiUS zjEvfca(i3fvgJWWPf*@QnbCg14pyI|qRBPt+sP5bzFCntkks1pL})D8Si#%ymLy1? zrMwX~w`!FDx+9H zj$jwDnuEia%a&qEOS50NhL~3@(=8UlmfG7)9K2T`?hic%L+A~Ud||)op;A(n*U7@( z8=qg(O8O&2PxS{JOFzC)IP#~>$iZa=G8E%6m`b16=+h0ic&dgH7)v<@^G~(vtWyNf zJntEX)oM<&w z=QZt??Dr)h<5gYySo-A!6m9HT2JVb>JgGncTc_mbQn37iR`k0z=cH@v-3GWmwgRD; z`(6)WH*N*CE58kEe5b6uS#HVr;#QYe^|`Vc90Vcu!;t|VW~R6m(c5!b**AIWNmHQ% zWx!n`2Y^QM^WmY!)T-SzIMHt&>=#)Tb!=!jd2#UBq&7gtrR7k}2;-rcqr_?D^?^F- zwZ(k_9e-4wyivC?*#*U`sM`KGOpnzf%Jg+ayN&3LiK_b6x}R*(a|hIvs{zcH9xEbMDIvP)_T+KCF4InxcG`Xbqz3c zf;Ny-DMtx&#%mdEI-0e%E`hy2R1)5!zrfTLOYXFXW`C_zdCDH%i0&Pz# zP^zv#PDTIy{|#^tZaBJZ+?|j*(dOCfVmC}_*^%vpLVG!EVWxY;kxELqb$lc1yz?@X z2_N}gUVVy05qpBJlVd4o2rG37(u~EY4)G$hF)v_J z%X%;lS1=BQ$X&n-PPAR<&9EDySMSJnVWY0?W~(@mESp%3J)zb zKCsm}vv(@o4s}9FvT+st_~~I=qHknyt?|jP17~{+svt?4?|7fQ&@=-`S!D#ezO9V@ zosS*d_~~uUuIJK}-?}{?bO{*v@;2d>dSRt1#A;()9div+=QSHc0cKTiVaNaXeQq=v2Z z*wc)YMB%T&yNoY>{rao7z`qg<<<7dz{ZKXV1vE({>m}}Rys6dsdz-KZulYN~pKjlI zIkA6$4_d!f@dXor?%D#-B45&X+sf-dSOqw6Whyr=yQjZ?eJ%ZRpWna_kHnO8`=#IB zz9{zKAdF}cY-LS9pwg@8iYR~b{{7EPm878=7oZx&^~7{X|KqA*XG8b%LtOTZ@w?n>Ga%;bV1^RQK6(mjZ)EU z|1cXm(g1zC?N#p zjGKz-ol*y}8olFsG}B8UmS2&aJ=~Lr)|YHVu_P!8!^Tm{o*U0DDjWiDaH+)`N zyg4IVa*6oH(1BlH2nkXUo)cqa?wNUcNg>!j*{#?2*GGdrS*lLDbK6^Qe)5AV1bNbB zZI$$6bzx8Nw3z=<&2`uknsS5g@L8}GpCY;VSkmzKF0fVR%OtAAk-q91@Zwbj4PJ@g zlj(GeX-V?Q6c!vBY>o{47AZaU2$H)i3}>+^c$7E*K-{ClU9?n8fQp#Hil_3{k)%|FF@GQ;1-k!r4t zgy@~&nciU{N1cA^bg}OoQ$CfTPI(mdYepUrR1l=i)Ebw`cJ{coiSb=M-x{<2U`f+@ z4a^^m^ybEi?!5ucxzb~i(6(Kcl;@YzTqfSM%FrH_C;duUJzkvtxQ4H3wrk2yv*c%# z-?C`Ov1$bIkBRI*%WU!QQKVMDWs@7*f{V;9P4(LR84qY)xaE0sC4vk+`YU2a)Of|* zSP&?kd-Hdz^a=ziOcSS^CSdGmBpIT2u#-nleBFLH@AIU1c9&@90ylza%eB}4pij(x zdnc2;P2g+T^JA87lno<72(yF4H%`mbD zjA%q##kPKut}$0_LX0=T8g0gHd0?)S+Hxwl#!`8<-r5jE&XTz(b_8RVKmYi+qAOoW zCXZ30Gk@y^`BVP=gUKMUi@w-~C763Iys=&>EfB&NTBdx_rb|lq{h~(a(rN^8jTz|^ zq932D=_E|fWUJj34tjDZw@g3RdBVkG7LbhU720X~*JE`e6Vji3Ei#`Q(~y&G*_ z5kb`KC`r0}wY`V1c1x=L`wM;v;;+`sV-SQG>(OVo&Ko}k1qk0r#TiM>dCZz4$l8Z0 zeIAuoe@O{kCQ5bR-uEMikxI^z+^&R1h&Hy$wKke$}W&o3vw)Tase`6 z(e*Tncm@x#wQXnOb^JClYy-EAPTOHeEclUqrj#eTgKAFiLW(Mcxl0BcdrDvnhfIzw z$Q$SL+rs!`CBqzqHx@an=_c|0=!GABD2b zC*#znt+lLa!9^oVh%j#O8ZcHPpXlXn_CF5k3yr_D;w1qLZV4>Aa zz^E%>8bkO^`^MMq5>=o&7QNL62qWaNG38O1wt;@IM5QR0P?nRdags;^u)~V$BiGOX z9iV6HRc056Fx1fCIBaE}mg=E?TkW;k5^4*}i=9#L{mygi2q=NE(}yq*Ob2bssDTn5AcHI|Os7L{|w;9p}WF>zHb z>f&Gw_3ZUd$*(;{$^76M+LRj~jWD7+4&9Ln>qhHkVc{}vs;UGOZCBB$@TCvuIJOR7W*bv=qL6C=3HW@}GC%jwFI4nqZ<$3h_9skdq)>1crLz$^7_y zdn;gkK$8qfM!!nac2ON)>_*XF5$$-KY}E8{<|-Y5y?{^*6;O&5VvIq}72)5m6r40K z1jX${)J~{sol<)h)Oj2LII%Y=2van|zM1-M

    r`XRrijO)p1vCB3>WUM4K?Ij3g%!MHus3e=Q% zcaAFTS=27B_Uczi;;23__4NkaWQ0>~{ z5~f1my(Fv8hag9`CDA6ib=XA9F%~@shWs@83fsd(BVp$HWfgsX5KvC4|H!R_BdUx^ z(;GnG2VKzCoM^<$T(`VkA4a7kDz@M6aO*T$_|B*@@4@sYM3=M$xc6dQ*fP*hAV|NQ zEgevx|3|<8RzgNZqXJxLr>WH{1i{5bGS>u4d`;WAU`*HnV|xP5GEbBNhP$=s$6>}@ zB>PdG$b@+@*T4?*8nC$Cwh@45<1DOa-mqaT*k=t(eK~5%Im{=|v_6=-F&5U>xv)Zi z=psut1Q^VpmEulG1J3$6OvO!e8UX)=M+*(Y(X%*d8#wJqcMAwdi&(czByqz~ zxkIwaWVP3}cz8f$nt?zzJV^sRqZf1IKLWejn+o|j0)GQnk;d-_=;f32U4J91W{1h1 z7GWGwZT~GzkA=YTF{vF;?PA=6o2IbugE*5l`~aH!zZHnE!}bP^bmTup#^KyNq1{9N zRbY^9{6w)rl4P3&Bf>fak=btBDh`<-E7{XYM!^Z+(~B1YHCGB6_b>rEiHx#j8w&*F zZ2u9U)2kPs{!cap6~qFof;14Mqd3=Pof#?s4xB{xM*Bfo7`&(g%7J)X6g)2>Gb*+n zR$xkzGYBDprm!`K@~LwWr-PE|V~ckoVbO8pkbF|7J)|}Y>RP4;pli@_9q1q5WNo{W zp%3l{gzhqKx?rFQu>$%Ff+!N-j-q1{I^e3^g0z9L4M3j}MAS5F#wu8X2VDZHh2ZW3 zRKDZ0@0`)6D;pOM`~;4P-JCws^#lM~{^`$pboj{;cv2BW1GrcP&=215A#{v0Ja_HI z3RwV{A)+RY72@Z7kjDze$FD|*8HB~>m7iUOUpwfi}z#+Jm2gWDlUkCSA=0Mr6Z12+986pyrvn_CCyDtO_A0I2Dp`gOo2 z3%mlbK!bs|={YI{be8Atqe2rPv=tSy1cqWjxCWsO;9CkRbOMAzefR=($J~kF=WwBbc#^h4L)uK%MOwfiXnAo!sib@=&(4d>@=3e;`@ z2ZzBM2AIoC&d7#bf_TP6a@yz_WZobe@2fjN>A4F>sUM=T0XKXNjlC_v6_(chl?4=b zrKUm@4H{uXag7|i;Fahgyl;VOVb(FOo?7J0$NQ{mpzJyNh2qY5`oxU8721~qu z&q;h4Q=(BE>N_;wYBbjXFI5N-*b(HBB2^Y$FO~h`*165Gm>?6j7BzEOltDxj&A}~L z;uso9;L?^kp;Ln49K-en*kBA7rC}S;}(hj!4 z62YIfVfg?c*D+$?$ptX7?l%~Lnfa(WYGf-_*77bGxzDZhEoDdkLy%5{xez~d#RDv& zGy+Hvf_jFmKnq1U3n_#fEe~0ZrU Date: Wed, 15 Mar 2023 14:55:30 +0800 Subject: [PATCH 14/32] [Feature] Support PIDNet (#2609) ## Motivation Support SOTA real-time semantic segmentation method in [Paper with code](https://paperswithcode.com/task/real-time-semantic-segmentation) Paper: https://arxiv.org/pdf/2206.02066.pdf Official repo: https://github.com/XuJiacong/PIDNet ## Current results **Cityscapes** |Model|Ref mIoU|mIoU (ours)| |---|---|---| |PIDNet-S|78.8|78.74| |PIDNet-M|79.9|80.22| |PIDNet-L|80.9|80.89| ## TODO - [x] Support inference with official weights - [x] Support training on Cityscapes - [x] Update docstring - [x] Add unit test --- README.md | 1 + README_zh-CN.md | 1 + configs/pidnet/README.md | 50 ++ ...pidnet-l_2xb6-120k_1024x1024-cityscapes.py | 10 + ...pidnet-m_2xb6-120k_1024x1024-cityscapes.py | 5 + ...pidnet-s_2xb6-120k_1024x1024-cityscapes.py | 113 ++++ configs/pidnet/pidnet.yml | 81 +++ mmseg/models/backbones/__init__.py | 3 +- mmseg/models/backbones/pidnet.py | 522 ++++++++++++++++++ mmseg/models/decode_heads/__init__.py | 4 +- mmseg/models/decode_heads/pid_head.py | 183 ++++++ mmseg/models/losses/__init__.py | 4 +- mmseg/models/losses/boundary_loss.py | 62 +++ .../models/losses/ohem_cross_entropy_loss.py | 94 ++++ mmseg/models/utils/__init__.py | 4 +- mmseg/models/utils/basic_block.py | 143 +++++ mmseg/models/utils/ppm.py | 193 +++++++ model-index.yml | 1 + .../test_models/test_backbones/test_pidnet.py | 87 +++ .../test_heads/test_pidnet_head.py | 89 +++ 20 files changed, 1646 insertions(+), 4 deletions(-) create mode 100644 configs/pidnet/README.md create mode 100644 configs/pidnet/pidnet-l_2xb6-120k_1024x1024-cityscapes.py create mode 100644 configs/pidnet/pidnet-m_2xb6-120k_1024x1024-cityscapes.py create mode 100644 configs/pidnet/pidnet-s_2xb6-120k_1024x1024-cityscapes.py create mode 100644 configs/pidnet/pidnet.yml create mode 100644 mmseg/models/backbones/pidnet.py create mode 100644 mmseg/models/decode_heads/pid_head.py create mode 100644 mmseg/models/losses/boundary_loss.py create mode 100644 mmseg/models/losses/ohem_cross_entropy_loss.py create mode 100644 mmseg/models/utils/basic_block.py create mode 100644 mmseg/models/utils/ppm.py create mode 100644 tests/test_models/test_backbones/test_pidnet.py create mode 100644 tests/test_models/test_heads/test_pidnet_head.py diff --git a/README.md b/README.md index 52eda092c8..69f751b9e5 100644 --- a/README.md +++ b/README.md @@ -159,6 +159,7 @@ Results and models are available in the [model zoo](docs/en/model_zoo.md). - [x] [K-Net (NeurIPS'2021)](configs/knet) - [x] [MaskFormer (NeurIPS'2021)](configs/maskformer) - [x] [Mask2Former (CVPR'2022)](configs/mask2former) +- [x] [PIDNet (ArXiv'2022)](configs/pidnet) diff --git a/README_zh-CN.md b/README_zh-CN.md index 167ecbdc40..709e6ef195 100644 --- a/README_zh-CN.md +++ b/README_zh-CN.md @@ -140,6 +140,7 @@ MMSegmentation 是一个基于 PyTorch 的语义分割开源工具箱。它是 O - [x] [K-Net (NeurIPS'2021)](configs/knet) - [x] [MaskFormer (NeurIPS'2021)](configs/maskformer) - [x] [Mask2Former (CVPR'2022)](configs/mask2former) +- [x] [PIDNet (ArXiv'2022)](configs/pidnet) diff --git a/configs/pidnet/README.md b/configs/pidnet/README.md new file mode 100644 index 0000000000..545b76e8b0 --- /dev/null +++ b/configs/pidnet/README.md @@ -0,0 +1,50 @@ +# PIDNet + +> [PIDNet: A Real-time Semantic Segmentation Network Inspired from PID Controller](https://arxiv.org/pdf/2206.02066.pdf) + +## Introduction + + + +Official Repo + +Code Snippet + +## Abstract + + + +Two-branch network architecture has shown its efficiency and effectiveness for real-time semantic segmentation tasks. However, direct fusion of low-level details and high-level semantics will lead to a phenomenon that the detailed features are easily overwhelmed by surrounding contextual information, namely overshoot in this paper, which limits the improvement of the accuracy of existed two-branch models. In this paper, we bridge a connection between Convolutional Neural Network (CNN) and Proportional-IntegralDerivative (PID) controller and reveal that the two-branch network is nothing but a Proportional-Integral (PI) controller, which inherently suffers from the similar overshoot issue. To alleviate this issue, we propose a novel threebranch network architecture: PIDNet, which possesses three branches to parse the detailed, context and boundary information (derivative of semantics), respectively, and employs boundary attention to guide the fusion of detailed and context branches in final stage. The family of PIDNets achieve the best trade-off between inference speed and accuracy and their test accuracy surpasses all the existed models with similar inference speed on Cityscapes, CamVid and COCO-Stuff datasets. Especially, PIDNet-S achieves 78.6% mIOU with inference speed of 93.2 FPS on Cityscapes test set and 80.1% mIOU with speed of 153.7 FPS on CamVid test set. + + + +

    + +
    + +## Results and models + +### Cityscapes + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------- | -------- | -------------- | ----- | ------------- | ----------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| PIDNet | PIDNet-S | 1024x1024 | 120000 | 3.38 | 80.82 | 78.74 | 80.87 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pidnet/pidnet-s_2xb6-120k_1024x1024-cityscapes.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-s_2xb6-120k_1024x1024-cityscapes/pidnet-s_2xb6-120k_1024x1024-cityscapes_20230302_191700-bb8e3bcc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-s_2xb6-120k_1024x1024-cityscapes/pidnet-s_2xb6-120k_1024x1024-cityscapes_20230302_191700.json) | +| PIDNet | PIDNet-M | 1024x1024 | 120000 | 5.14 | 71.98 | 80.22 | 82.05 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pidnet/pidnet-m_2xb6-120k_1024x1024-cityscapes.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-m_2xb6-120k_1024x1024-cityscapes/pidnet-m_2xb6-120k_1024x1024-cityscapes_20230301_143452-f9bcdbf3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-m_2xb6-120k_1024x1024-cityscapes/pidnet-m_2xb6-120k_1024x1024-cityscapes_20230301_143452.json) | +| PIDNet | PIDNet-L | 1024x1024 | 120000 | 5.83 | 60.06 | 80.89 | 82.37 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pidnet/pidnet-l_2xb6-120k_1024x1024-cityscapes.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-l_2xb6-120k_1024x1024-cityscapes/pidnet-l_2xb6-120k_1024x1024-cityscapes_20230303_114514-0783ca6b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-l_2xb6-120k_1024x1024-cityscapes/pidnet-l_2xb6-120k_1024x1024-cityscapes_20230303_114514.json) | + +## Notes + +The pretrained weights in config files are converted from [the official repo](https://github.com/XuJiacong/PIDNet#models). + +## Citation + +```bibtex +@misc{xu2022pidnet, + title={PIDNet: A Real-time Semantic Segmentation Network Inspired from PID Controller}, + author={Jiacong Xu and Zixiang Xiong and Shankar P. Bhattacharyya}, + year={2022}, + eprint={2206.02066}, + archivePrefix={arXiv}, + primaryClass={cs.CV} +} +``` diff --git a/configs/pidnet/pidnet-l_2xb6-120k_1024x1024-cityscapes.py b/configs/pidnet/pidnet-l_2xb6-120k_1024x1024-cityscapes.py new file mode 100644 index 0000000000..1955c91e05 --- /dev/null +++ b/configs/pidnet/pidnet-l_2xb6-120k_1024x1024-cityscapes.py @@ -0,0 +1,10 @@ +_base_ = './pidnet-s_2xb6-120k_1024x1024-cityscapes.py' +checkpoint_file = 'https://download.openmmlab.com/mmsegmentation/v0.5/pretrain/pidnet/pidnet-l_imagenet1k_20230306-67889109.pth' # noqa +model = dict( + backbone=dict( + channels=64, + ppm_channels=112, + num_stem_blocks=3, + num_branch_blocks=4, + init_cfg=dict(checkpoint=checkpoint_file)), + decode_head=dict(in_channels=256, channels=256)) diff --git a/configs/pidnet/pidnet-m_2xb6-120k_1024x1024-cityscapes.py b/configs/pidnet/pidnet-m_2xb6-120k_1024x1024-cityscapes.py new file mode 100644 index 0000000000..38a69c1c45 --- /dev/null +++ b/configs/pidnet/pidnet-m_2xb6-120k_1024x1024-cityscapes.py @@ -0,0 +1,5 @@ +_base_ = './pidnet-s_2xb6-120k_1024x1024-cityscapes.py' +checkpoint_file = 'https://download.openmmlab.com/mmsegmentation/v0.5/pretrain/pidnet/pidnet-m_imagenet1k_20230306-39893c52.pth' # noqa +model = dict( + backbone=dict(channels=64, init_cfg=dict(checkpoint=checkpoint_file)), + decode_head=dict(in_channels=256)) diff --git a/configs/pidnet/pidnet-s_2xb6-120k_1024x1024-cityscapes.py b/configs/pidnet/pidnet-s_2xb6-120k_1024x1024-cityscapes.py new file mode 100644 index 0000000000..f70ca4287a --- /dev/null +++ b/configs/pidnet/pidnet-s_2xb6-120k_1024x1024-cityscapes.py @@ -0,0 +1,113 @@ +_base_ = [ + '../_base_/datasets/cityscapes_1024x1024.py', + '../_base_/default_runtime.py' +] + +# The class_weight is borrowed from https://github.com/openseg-group/OCNet.pytorch/issues/14 # noqa +# Licensed under the MIT License +class_weight = [ + 0.8373, 0.918, 0.866, 1.0345, 1.0166, 0.9969, 0.9754, 1.0489, 0.8786, + 1.0023, 0.9539, 0.9843, 1.1116, 0.9037, 1.0865, 1.0955, 1.0865, 1.1529, + 1.0507 +] +checkpoint_file = 'https://download.openmmlab.com/mmsegmentation/v0.5/pretrain/pidnet/pidnet-s_imagenet1k_20230306-715e6273.pth' # noqa +crop_size = (1024, 1024) +data_preprocessor = dict( + type='SegDataPreProcessor', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + bgr_to_rgb=True, + pad_val=0, + seg_pad_val=255, + size=crop_size) +norm_cfg = dict(type='SyncBN', requires_grad=True) +model = dict( + type='EncoderDecoder', + data_preprocessor=data_preprocessor, + backbone=dict( + type='PIDNet', + in_channels=3, + channels=32, + ppm_channels=96, + num_stem_blocks=2, + num_branch_blocks=3, + align_corners=False, + norm_cfg=norm_cfg, + act_cfg=dict(type='ReLU', inplace=True), + init_cfg=dict(type='Pretrained', checkpoint=checkpoint_file)), + decode_head=dict( + type='PIDHead', + in_channels=128, + channels=128, + num_classes=19, + norm_cfg=norm_cfg, + act_cfg=dict(type='ReLU', inplace=True), + align_corners=True, + loss_decode=[ + dict( + type='CrossEntropyLoss', + use_sigmoid=False, + class_weight=class_weight, + loss_weight=0.4), + dict( + type='OhemCrossEntropy', + thres=0.9, + min_kept=131072, + class_weight=class_weight, + loss_weight=1.0), + dict(type='BoundaryLoss', loss_weight=20.0), + dict( + type='OhemCrossEntropy', + thres=0.9, + min_kept=131072, + class_weight=class_weight, + loss_weight=1.0) + ]), + train_cfg=dict(), + test_cfg=dict(mode='whole')) + +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations'), + dict( + type='RandomResize', + scale=(2048, 1024), + ratio_range=(0.5, 2.0), + keep_ratio=True), + dict(type='RandomCrop', crop_size=crop_size, cat_max_ratio=0.75), + dict(type='RandomFlip', prob=0.5), + dict(type='PhotoMetricDistortion'), + dict(type='GenerateEdge', edge_width=4), + dict(type='PackSegInputs') +] +train_dataloader = dict(batch_size=6, dataset=dict(pipeline=train_pipeline)) + +iters = 120000 +# optimizer +optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0005) +optim_wrapper = dict(type='OptimWrapper', optimizer=optimizer, clip_grad=None) +# learning policy +param_scheduler = [ + dict( + type='PolyLR', + eta_min=0, + power=0.9, + begin=0, + end=iters, + by_epoch=False) +] +# training schedule for 120k +train_cfg = dict( + type='IterBasedTrainLoop', max_iters=iters, val_interval=iters // 10) +val_cfg = dict(type='ValLoop') +test_cfg = dict(type='TestLoop') +default_hooks = dict( + timer=dict(type='IterTimerHook'), + logger=dict(type='LoggerHook', interval=50, log_metric_by_epoch=False), + param_scheduler=dict(type='ParamSchedulerHook'), + checkpoint=dict( + type='CheckpointHook', by_epoch=False, interval=iters // 10), + sampler_seed=dict(type='DistSamplerSeedHook'), + visualization=dict(type='SegVisualizationHook')) + +randomness = dict(seed=304) diff --git a/configs/pidnet/pidnet.yml b/configs/pidnet/pidnet.yml new file mode 100644 index 0000000000..7fe818ca7c --- /dev/null +++ b/configs/pidnet/pidnet.yml @@ -0,0 +1,81 @@ +Collections: +- Name: PIDNet + Metadata: + Training Data: + - Cityscapes + Paper: + URL: https://arxiv.org/pdf/2206.02066.pdf + Title: 'PIDNet: A Real-time Semantic Segmentation Network Inspired from PID Controller' + README: configs/pidnet/README.md + Code: + URL: https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/models/backbones/pidnet.py + Version: dev-1.x + Converted From: + Code: https://github.com/XuJiacong/PIDNet +Models: +- Name: pidnet-s_2xb6-120k_1024x1024-cityscapes + In Collection: PIDNet + Metadata: + backbone: PIDNet-S + crop size: (1024,1024) + lr schd: 120000 + inference time (ms/im): + - value: 12.37 + hardware: V100 + backend: PyTorch + batch size: 1 + mode: FP32 + resolution: (1024,1024) + Training Memory (GB): 3.38 + Results: + - Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.74 + mIoU(ms+flip): 80.87 + Config: configs/pidnet/pidnet-s_2xb6-120k_1024x1024-cityscapes.py + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-s_2xb6-120k_1024x1024-cityscapes/pidnet-s_2xb6-120k_1024x1024-cityscapes_20230302_191700-bb8e3bcc.pth +- Name: pidnet-m_2xb6-120k_1024x1024-cityscapes + In Collection: PIDNet + Metadata: + backbone: PIDNet-M + crop size: (1024,1024) + lr schd: 120000 + inference time (ms/im): + - value: 13.89 + hardware: V100 + backend: PyTorch + batch size: 1 + mode: FP32 + resolution: (1024,1024) + Training Memory (GB): 5.14 + Results: + - Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 80.22 + mIoU(ms+flip): 82.05 + Config: configs/pidnet/pidnet-m_2xb6-120k_1024x1024-cityscapes.py + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-m_2xb6-120k_1024x1024-cityscapes/pidnet-m_2xb6-120k_1024x1024-cityscapes_20230301_143452-f9bcdbf3.pth +- Name: pidnet-l_2xb6-120k_1024x1024-cityscapes + In Collection: PIDNet + Metadata: + backbone: PIDNet-L + crop size: (1024,1024) + lr schd: 120000 + inference time (ms/im): + - value: 16.65 + hardware: V100 + backend: PyTorch + batch size: 1 + mode: FP32 + resolution: (1024,1024) + Training Memory (GB): 5.83 + Results: + - Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 80.89 + mIoU(ms+flip): 82.37 + Config: configs/pidnet/pidnet-l_2xb6-120k_1024x1024-cityscapes.py + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-l_2xb6-120k_1024x1024-cityscapes/pidnet-l_2xb6-120k_1024x1024-cityscapes_20230303_114514-0783ca6b.pth diff --git a/mmseg/models/backbones/__init__.py b/mmseg/models/backbones/__init__.py index bda42bb692..909b54f3ec 100644 --- a/mmseg/models/backbones/__init__.py +++ b/mmseg/models/backbones/__init__.py @@ -11,6 +11,7 @@ from .mit import MixVisionTransformer from .mobilenet_v2 import MobileNetV2 from .mobilenet_v3 import MobileNetV3 +from .pidnet import PIDNet from .resnest import ResNeSt from .resnet import ResNet, ResNetV1c, ResNetV1d from .resnext import ResNeXt @@ -26,5 +27,5 @@ 'ResNeSt', 'MobileNetV2', 'UNet', 'CGNet', 'MobileNetV3', 'VisionTransformer', 'SwinTransformer', 'MixVisionTransformer', 'BiSeNetV1', 'BiSeNetV2', 'ICNet', 'TIMMBackbone', 'ERFNet', 'PCPVT', - 'SVT', 'STDCNet', 'STDCContextPathNet', 'BEiT', 'MAE' + 'SVT', 'STDCNet', 'STDCContextPathNet', 'BEiT', 'MAE', 'PIDNet' ] diff --git a/mmseg/models/backbones/pidnet.py b/mmseg/models/backbones/pidnet.py new file mode 100644 index 0000000000..0b711a3737 --- /dev/null +++ b/mmseg/models/backbones/pidnet.py @@ -0,0 +1,522 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from typing import Tuple, Union + +import torch +import torch.nn as nn +import torch.nn.functional as F +from mmcv.cnn import ConvModule +from mmengine.model import BaseModule +from mmengine.runner import CheckpointLoader +from torch import Tensor + +from mmseg.registry import MODELS +from mmseg.utils import OptConfigType +from ..utils import DAPPM, PAPPM, BasicBlock, Bottleneck + + +class PagFM(BaseModule): + """Pixel-attention-guided fusion module. + + Args: + in_channels (int): The number of input channels. + channels (int): The number of channels. + after_relu (bool): Whether to use ReLU before attention. + Default: False. + with_channel (bool): Whether to use channel attention. + Default: False. + upsample_mode (str): The mode of upsample. Default: 'bilinear'. + norm_cfg (dict): Config dict for normalization layer. + Default: dict(type='BN'). + act_cfg (dict): Config dict for activation layer. + Default: dict(typ='ReLU', inplace=True). + init_cfg (dict): Config dict for initialization. Default: None. + """ + + def __init__(self, + in_channels: int, + channels: int, + after_relu: bool = False, + with_channel: bool = False, + upsample_mode: str = 'bilinear', + norm_cfg: OptConfigType = dict(type='BN'), + act_cfg: OptConfigType = dict(typ='ReLU', inplace=True), + init_cfg: OptConfigType = None): + super().__init__(init_cfg) + self.after_relu = after_relu + self.with_channel = with_channel + self.upsample_mode = upsample_mode + self.f_i = ConvModule( + in_channels, channels, 1, norm_cfg=norm_cfg, act_cfg=None) + self.f_p = ConvModule( + in_channels, channels, 1, norm_cfg=norm_cfg, act_cfg=None) + if with_channel: + self.up = ConvModule( + channels, in_channels, 1, norm_cfg=norm_cfg, act_cfg=None) + if after_relu: + self.relu = MODELS.build(act_cfg) + + def forward(self, x_p: Tensor, x_i: Tensor) -> Tensor: + """Forward function. + + Args: + x_p (Tensor): The featrue map from P branch. + x_i (Tensor): The featrue map from I branch. + + Returns: + Tensor: The feature map with pixel-attention-guided fusion. + """ + if self.after_relu: + x_p = self.relu(x_p) + x_i = self.relu(x_i) + + f_i = self.f_i(x_i) + f_i = F.interpolate( + f_i, + size=x_p.shape[2:], + mode=self.upsample_mode, + align_corners=False) + + f_p = self.f_p(x_p) + + if self.with_channel: + sigma = torch.sigmoid(self.up(f_p * f_i)) + else: + sigma = torch.sigmoid(torch.sum(f_p * f_i, dim=1).unsqueeze(1)) + + x_i = F.interpolate( + x_i, + size=x_p.shape[2:], + mode=self.upsample_mode, + align_corners=False) + + out = sigma * x_i + (1 - sigma) * x_p + return out + + +class Bag(BaseModule): + """Boundary-attention-guided fusion module. + + Args: + in_channels (int): The number of input channels. + out_channels (int): The number of output channels. + kernel_size (int): The kernel size of the convolution. Default: 3. + padding (int): The padding of the convolution. Default: 1. + norm_cfg (dict): Config dict for normalization layer. + Default: dict(type='BN'). + act_cfg (dict): Config dict for activation layer. + Default: dict(type='ReLU', inplace=True). + conv_cfg (dict): Config dict for convolution layer. + Default: dict(order=('norm', 'act', 'conv')). + init_cfg (dict): Config dict for initialization. Default: None. + """ + + def __init__(self, + in_channels: int, + out_channels: int, + kernel_size: int = 3, + padding: int = 1, + norm_cfg: OptConfigType = dict(type='BN'), + act_cfg: OptConfigType = dict(type='ReLU', inplace=True), + conv_cfg: OptConfigType = dict(order=('norm', 'act', 'conv')), + init_cfg: OptConfigType = None): + super().__init__(init_cfg) + + self.conv = ConvModule( + in_channels, + out_channels, + kernel_size, + padding=padding, + norm_cfg=norm_cfg, + act_cfg=act_cfg, + **conv_cfg) + + def forward(self, x_p: Tensor, x_i: Tensor, x_d: Tensor) -> Tensor: + """Forward function. + + Args: + x_p (Tensor): The featrue map from P branch. + x_i (Tensor): The featrue map from I branch. + x_d (Tensor): The featrue map from D branch. + + Returns: + Tensor: The feature map with boundary-attention-guided fusion. + """ + sigma = torch.sigmoid(x_d) + return self.conv(sigma * x_p + (1 - sigma) * x_i) + + +class LightBag(BaseModule): + """Light Boundary-attention-guided fusion module. + + Args: + in_channels (int): The number of input channels. + out_channels (int): The number of output channels. + norm_cfg (dict): Config dict for normalization layer. + Default: dict(type='BN'). + act_cfg (dict): Config dict for activation layer. Default: None. + init_cfg (dict): Config dict for initialization. Default: None. + """ + + def __init__(self, + in_channels: int, + out_channels: int, + norm_cfg: OptConfigType = dict(type='BN'), + act_cfg: OptConfigType = None, + init_cfg: OptConfigType = None): + super().__init__(init_cfg) + self.f_p = ConvModule( + in_channels, + out_channels, + kernel_size=1, + norm_cfg=norm_cfg, + act_cfg=act_cfg) + self.f_i = ConvModule( + in_channels, + out_channels, + kernel_size=1, + norm_cfg=norm_cfg, + act_cfg=act_cfg) + + def forward(self, x_p: Tensor, x_i: Tensor, x_d: Tensor) -> Tensor: + """Forward function. + Args: + x_p (Tensor): The featrue map from P branch. + x_i (Tensor): The featrue map from I branch. + x_d (Tensor): The featrue map from D branch. + + Returns: + Tensor: The feature map with light boundary-attention-guided + fusion. + """ + sigma = torch.sigmoid(x_d) + + f_p = self.f_p((1 - sigma) * x_i + x_p) + f_i = self.f_i(x_i + sigma * x_p) + + return f_p + f_i + + +@MODELS.register_module() +class PIDNet(BaseModule): + """PIDNet backbone. + + This backbone is the implementation of `PIDNet: A Real-time Semantic + Segmentation Network Inspired from PID Controller + `_. + Modified from https://github.com/XuJiacong/PIDNet. + + Licensed under the MIT License. + + Args: + in_channels (int): The number of input channels. Default: 3. + channels (int): The number of channels in the stem layer. Default: 64. + ppm_channels (int): The number of channels in the PPM layer. + Default: 96. + num_stem_blocks (int): The number of blocks in the stem layer. + Default: 2. + num_branch_blocks (int): The number of blocks in the branch layer. + Default: 3. + align_corners (bool): The align_corners argument of F.interpolate. + Default: False. + norm_cfg (dict): Config dict for normalization layer. + Default: dict(type='BN'). + act_cfg (dict): Config dict for activation layer. + Default: dict(type='ReLU', inplace=True). + init_cfg (dict): Config dict for initialization. Default: None. + """ + + def __init__(self, + in_channels: int = 3, + channels: int = 64, + ppm_channels: int = 96, + num_stem_blocks: int = 2, + num_branch_blocks: int = 3, + align_corners: bool = False, + norm_cfg: OptConfigType = dict(type='BN'), + act_cfg: OptConfigType = dict(type='ReLU', inplace=True), + init_cfg: OptConfigType = None, + **kwargs): + super().__init__(init_cfg) + self.norm_cfg = norm_cfg + self.act_cfg = act_cfg + self.align_corners = align_corners + + # stem layer + self.stem = self._make_stem_layer(in_channels, channels, + num_stem_blocks) + self.relu = nn.ReLU() + + # I Branch + self.i_branch_layers = nn.ModuleList() + for i in range(3): + self.i_branch_layers.append( + self._make_layer( + block=BasicBlock if i < 2 else Bottleneck, + in_channels=channels * 2**(i + 1), + channels=channels * 8 if i > 0 else channels * 4, + num_blocks=num_branch_blocks if i < 2 else 2, + stride=2)) + + # P Branch + self.p_branch_layers = nn.ModuleList() + for i in range(3): + self.p_branch_layers.append( + self._make_layer( + block=BasicBlock if i < 2 else Bottleneck, + in_channels=channels * 2, + channels=channels * 2, + num_blocks=num_stem_blocks if i < 2 else 1)) + self.compression_1 = ConvModule( + channels * 4, + channels * 2, + kernel_size=1, + bias=False, + norm_cfg=norm_cfg, + act_cfg=None) + self.compression_2 = ConvModule( + channels * 8, + channels * 2, + kernel_size=1, + bias=False, + norm_cfg=norm_cfg, + act_cfg=None) + self.pag_1 = PagFM(channels * 2, channels) + self.pag_2 = PagFM(channels * 2, channels) + + # D Branch + if num_stem_blocks == 2: + self.d_branch_layers = nn.ModuleList([ + self._make_single_layer(BasicBlock, channels * 2, channels), + self._make_layer(Bottleneck, channels, channels, 1) + ]) + channel_expand = 1 + spp_module = PAPPM + dfm_module = LightBag + act_cfg_dfm = None + else: + self.d_branch_layers = nn.ModuleList([ + self._make_single_layer(BasicBlock, channels * 2, + channels * 2), + self._make_single_layer(BasicBlock, channels * 2, channels * 2) + ]) + channel_expand = 2 + spp_module = DAPPM + dfm_module = Bag + act_cfg_dfm = act_cfg + + self.diff_1 = ConvModule( + channels * 4, + channels * channel_expand, + kernel_size=3, + padding=1, + bias=False, + norm_cfg=norm_cfg, + act_cfg=None) + self.diff_2 = ConvModule( + channels * 8, + channels * 2, + kernel_size=3, + padding=1, + bias=False, + norm_cfg=norm_cfg, + act_cfg=None) + + self.spp = spp_module( + channels * 16, ppm_channels, channels * 4, num_scales=5) + self.dfm = dfm_module( + channels * 4, channels * 4, norm_cfg=norm_cfg, act_cfg=act_cfg_dfm) + + self.d_branch_layers.append( + self._make_layer(Bottleneck, channels * 2, channels * 2, 1)) + + def _make_stem_layer(self, in_channels: int, channels: int, + num_blocks: int) -> nn.Sequential: + """Make stem layer. + + Args: + in_channels (int): Number of input channels. + channels (int): Number of output channels. + num_blocks (int): Number of blocks. + + Returns: + nn.Sequential: The stem layer. + """ + + layers = [ + ConvModule( + in_channels, + channels, + kernel_size=3, + stride=2, + padding=1, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg), + ConvModule( + channels, + channels, + kernel_size=3, + stride=2, + padding=1, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg) + ] + + layers.append( + self._make_layer(BasicBlock, channels, channels, num_blocks)) + layers.append(nn.ReLU()) + layers.append( + self._make_layer( + BasicBlock, channels, channels * 2, num_blocks, stride=2)) + layers.append(nn.ReLU()) + + return nn.Sequential(*layers) + + def _make_layer(self, + block: BasicBlock, + in_channels: int, + channels: int, + num_blocks: int, + stride: int = 1) -> nn.Sequential: + """Make layer for PIDNet backbone. + Args: + block (BasicBlock): Basic block. + in_channels (int): Number of input channels. + channels (int): Number of output channels. + num_blocks (int): Number of blocks. + stride (int): Stride of the first block. Default: 1. + + Returns: + nn.Sequential: The Branch Layer. + """ + downsample = None + if stride != 1 or in_channels != channels * block.expansion: + downsample = ConvModule( + in_channels, + channels * block.expansion, + kernel_size=1, + stride=stride, + norm_cfg=self.norm_cfg, + act_cfg=None) + + layers = [block(in_channels, channels, stride, downsample)] + in_channels = channels * block.expansion + for i in range(1, num_blocks): + layers.append( + block( + in_channels, + channels, + stride=1, + act_cfg_out=None if i == num_blocks - 1 else self.act_cfg)) + return nn.Sequential(*layers) + + def _make_single_layer(self, + block: Union[BasicBlock, Bottleneck], + in_channels: int, + channels: int, + stride: int = 1) -> nn.Module: + """Make single layer for PIDNet backbone. + Args: + block (BasicBlock or Bottleneck): Basic block or Bottleneck. + in_channels (int): Number of input channels. + channels (int): Number of output channels. + stride (int): Stride of the first block. Default: 1. + + Returns: + nn.Module + """ + + downsample = None + if stride != 1 or in_channels != channels * block.expansion: + downsample = ConvModule( + in_channels, + channels * block.expansion, + kernel_size=1, + stride=stride, + norm_cfg=self.norm_cfg, + act_cfg=None) + return block( + in_channels, channels, stride, downsample, act_cfg_out=None) + + def init_weights(self): + """Initialize the weights in backbone. + + Since the D branch is not initialized by the pre-trained model, we + initialize it with the same method as the ResNet. + """ + for m in self.modules(): + if isinstance(m, nn.Conv2d): + nn.init.kaiming_normal_( + m.weight, mode='fan_out', nonlinearity='relu') + elif isinstance(m, nn.BatchNorm2d): + nn.init.constant_(m.weight, 1) + nn.init.constant_(m.bias, 0) + if self.init_cfg is not None: + assert 'checkpoint' in self.init_cfg, f'Only support ' \ + f'specify `Pretrained` in ' \ + f'`init_cfg` in ' \ + f'{self.__class__.__name__} ' + ckpt = CheckpointLoader.load_checkpoint( + self.init_cfg['checkpoint'], map_location='cpu') + self.load_state_dict(ckpt, strict=False) + + def forward(self, x: Tensor) -> Union[Tensor, Tuple[Tensor]]: + """Forward function. + + Args: + x (Tensor): Input tensor with shape (B, C, H, W). + + Returns: + Tensor or tuple[Tensor]: If self.training is True, return + tuple[Tensor], else return Tensor. + """ + w_out = x.shape[-1] // 8 + h_out = x.shape[-2] // 8 + + # stage 0-2 + x = self.stem(x) + + # stage 3 + x_i = self.relu(self.i_branch_layers[0](x)) + x_p = self.p_branch_layers[0](x) + x_d = self.d_branch_layers[0](x) + + comp_i = self.compression_1(x_i) + x_p = self.pag_1(x_p, comp_i) + diff_i = self.diff_1(x_i) + x_d += F.interpolate( + diff_i, + size=[h_out, w_out], + mode='bilinear', + align_corners=self.align_corners) + if self.training: + temp_p = x_p.clone() + + # stage 4 + x_i = self.relu(self.i_branch_layers[1](x_i)) + x_p = self.p_branch_layers[1](self.relu(x_p)) + x_d = self.d_branch_layers[1](self.relu(x_d)) + + comp_i = self.compression_2(x_i) + x_p = self.pag_2(x_p, comp_i) + diff_i = self.diff_2(x_i) + x_d += F.interpolate( + diff_i, + size=[h_out, w_out], + mode='bilinear', + align_corners=self.align_corners) + if self.training: + temp_d = x_d.clone() + + # stage 5 + x_i = self.i_branch_layers[2](x_i) + x_p = self.p_branch_layers[2](self.relu(x_p)) + x_d = self.d_branch_layers[2](self.relu(x_d)) + + x_i = self.spp(x_i) + x_i = F.interpolate( + x_i, + size=[h_out, w_out], + mode='bilinear', + align_corners=self.align_corners) + out = self.dfm(x_p, x_i, x_d) + return (temp_p, out, temp_d) if self.training else out diff --git a/mmseg/models/decode_heads/__init__.py b/mmseg/models/decode_heads/__init__.py index b18152d7d9..e6eeafc248 100644 --- a/mmseg/models/decode_heads/__init__.py +++ b/mmseg/models/decode_heads/__init__.py @@ -19,6 +19,7 @@ from .maskformer_head import MaskFormerHead from .nl_head import NLHead from .ocr_head import OCRHead +from .pid_head import PIDHead from .point_head import PointHead from .psa_head import PSAHead from .psp_head import PSPHead @@ -38,5 +39,6 @@ 'PointHead', 'APCHead', 'DMHead', 'LRASPPHead', 'SETRUPHead', 'SETRMLAHead', 'DPTHead', 'SETRMLAHead', 'SegmenterMaskTransformerHead', 'SegformerHead', 'ISAHead', 'STDCHead', 'IterativeDecodeHead', - 'KernelUpdateHead', 'KernelUpdator', 'MaskFormerHead', 'Mask2FormerHead' + 'KernelUpdateHead', 'KernelUpdator', 'MaskFormerHead', 'Mask2FormerHead', + 'PIDHead' ] diff --git a/mmseg/models/decode_heads/pid_head.py b/mmseg/models/decode_heads/pid_head.py new file mode 100644 index 0000000000..c092cb32d0 --- /dev/null +++ b/mmseg/models/decode_heads/pid_head.py @@ -0,0 +1,183 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from typing import Optional, Tuple, Union + +import torch +import torch.nn as nn +from mmcv.cnn import ConvModule, build_activation_layer, build_norm_layer +from mmengine.model import BaseModule +from torch import Tensor + +from mmseg.models.decode_heads.decode_head import BaseDecodeHead +from mmseg.models.losses import accuracy +from mmseg.models.utils import resize +from mmseg.registry import MODELS +from mmseg.utils import OptConfigType, SampleList + + +class BasePIDHead(BaseModule): + """Base class for PID head. + + Args: + in_channels (int): Number of input channels. + channels (int): Number of output channels. + norm_cfg (dict): Config dict for normalization layer. + Default: dict(type='BN'). + act_cfg (dict): Config dict for activation layer. + Default: dict(type='ReLU', inplace=True). + init_cfg (dict or list[dict], optional): Init config dict. + Default: None. + """ + + def __init__(self, + in_channels: int, + channels: int, + norm_cfg: OptConfigType = dict(type='BN'), + act_cfg: OptConfigType = dict(type='ReLU', inplace=True), + init_cfg: OptConfigType = None): + super().__init__(init_cfg) + self.conv = ConvModule( + in_channels, + channels, + kernel_size=3, + padding=1, + norm_cfg=norm_cfg, + act_cfg=act_cfg, + order=('norm', 'act', 'conv')) + _, self.norm = build_norm_layer(norm_cfg, num_features=channels) + self.act = build_activation_layer(act_cfg) + + def forward(self, x: Tensor, cls_seg: Optional[nn.Module]) -> Tensor: + """Forward function. + Args: + x (Tensor): Input tensor. + cls_seg (nn.Module, optional): The classification head. + + Returns: + Tensor: Output tensor. + """ + x = self.conv(x) + x = self.norm(x) + x = self.act(x) + if cls_seg is not None: + x = cls_seg(x) + return x + + +@MODELS.register_module() +class PIDHead(BaseDecodeHead): + """Decode head for PIDNet. + + Args: + in_channels (int): Number of input channels. + channels (int): Number of output channels. + num_classes (int): Number of classes. + norm_cfg (dict): Config dict for normalization layer. + Default: dict(type='BN'). + act_cfg (dict): Config dict for activation layer. + Default: dict(type='ReLU', inplace=True). + """ + + def __init__(self, + in_channels: int, + channels: int, + num_classes: int, + norm_cfg: OptConfigType = dict(type='BN'), + act_cfg: OptConfigType = dict(type='ReLU', inplace=True), + **kwargs): + super().__init__( + in_channels, + channels, + num_classes=num_classes, + norm_cfg=norm_cfg, + act_cfg=act_cfg, + **kwargs) + self.i_head = BasePIDHead(in_channels, channels, norm_cfg, act_cfg) + self.p_head = BasePIDHead(in_channels // 2, channels, norm_cfg, + act_cfg) + self.d_head = BasePIDHead( + in_channels // 2, + in_channels // 4, + norm_cfg, + ) + self.p_cls_seg = nn.Conv2d(channels, self.out_channels, kernel_size=1) + self.d_cls_seg = nn.Conv2d(in_channels // 4, 1, kernel_size=1) + + def init_weights(self): + for m in self.modules(): + if isinstance(m, nn.Conv2d): + nn.init.kaiming_normal_( + m.weight, mode='fan_out', nonlinearity='relu') + elif isinstance(m, nn.BatchNorm2d): + nn.init.constant_(m.weight, 1) + nn.init.constant_(m.bias, 0) + + def forward( + self, + inputs: Union[Tensor, + Tuple[Tensor]]) -> Union[Tensor, Tuple[Tensor]]: + """Forward function. + Args: + inputs (Tensor | tuple[Tensor]): Input tensor or tuple of + Tensor. When training, the input is a tuple of three tensors, + (p_feat, i_feat, d_feat), and the output is a tuple of three + tensors, (p_seg_logit, i_seg_logit, d_seg_logit). + When inference, only the head of integral branch is used, and + input is a tensor of integral feature map, and the output is + the segmentation logit. + + Returns: + Tensor | tuple[Tensor]: Output tensor or tuple of tensors. + """ + if self.training: + x_p, x_i, x_d = inputs + x_p = self.p_head(x_p, self.p_cls_seg) + x_i = self.i_head(x_i, self.cls_seg) + x_d = self.d_head(x_d, self.d_cls_seg) + return x_p, x_i, x_d + else: + return self.i_head(inputs, self.cls_seg) + + def _stack_batch_gt(self, batch_data_samples: SampleList) -> Tuple[Tensor]: + gt_semantic_segs = [ + data_sample.gt_sem_seg.data for data_sample in batch_data_samples + ] + gt_edge_segs = [ + data_sample.gt_edge_map.data for data_sample in batch_data_samples + ] + gt_sem_segs = torch.stack(gt_semantic_segs, dim=0) + gt_edge_segs = torch.stack(gt_edge_segs, dim=0) + return gt_sem_segs, gt_edge_segs + + def loss_by_feat(self, seg_logits: Tuple[Tensor], + batch_data_samples: SampleList) -> dict: + loss = dict() + p_logit, i_logit, d_logit = seg_logits + sem_label, bd_label = self._stack_batch_gt(batch_data_samples) + p_logit = resize( + input=p_logit, + size=sem_label.shape[2:], + mode='bilinear', + align_corners=self.align_corners) + i_logit = resize( + input=i_logit, + size=sem_label.shape[2:], + mode='bilinear', + align_corners=self.align_corners) + d_logit = resize( + input=d_logit, + size=bd_label.shape[2:], + mode='bilinear', + align_corners=self.align_corners) + sem_label = sem_label.squeeze(1) + bd_label = bd_label.squeeze(1) + loss['loss_sem_p'] = self.loss_decode[0]( + p_logit, sem_label, ignore_index=self.ignore_index) + loss['loss_sem_i'] = self.loss_decode[1](i_logit, sem_label) + loss['loss_bd'] = self.loss_decode[2](d_logit, bd_label) + filler = torch.ones_like(sem_label) * self.ignore_index + sem_bd_label = torch.where( + torch.sigmoid(d_logit[:, 0, :, :]) > 0.8, sem_label, filler) + loss['loss_sem_bd'] = self.loss_decode[3](i_logit, sem_bd_label) + loss['acc_seg'] = accuracy( + i_logit, sem_label, ignore_index=self.ignore_index) + return loss diff --git a/mmseg/models/losses/__init__.py b/mmseg/models/losses/__init__.py index d7e019747d..2f7e39cb28 100644 --- a/mmseg/models/losses/__init__.py +++ b/mmseg/models/losses/__init__.py @@ -1,10 +1,12 @@ # Copyright (c) OpenMMLab. All rights reserved. from .accuracy import Accuracy, accuracy +from .boundary_loss import BoundaryLoss from .cross_entropy_loss import (CrossEntropyLoss, binary_cross_entropy, cross_entropy, mask_cross_entropy) from .dice_loss import DiceLoss from .focal_loss import FocalLoss from .lovasz_loss import LovaszLoss +from .ohem_cross_entropy_loss import OhemCrossEntropy from .tversky_loss import TverskyLoss from .utils import reduce_loss, weight_reduce_loss, weighted_loss @@ -12,5 +14,5 @@ 'accuracy', 'Accuracy', 'cross_entropy', 'binary_cross_entropy', 'mask_cross_entropy', 'CrossEntropyLoss', 'reduce_loss', 'weight_reduce_loss', 'weighted_loss', 'LovaszLoss', 'DiceLoss', - 'FocalLoss', 'TverskyLoss' + 'FocalLoss', 'TverskyLoss', 'OhemCrossEntropy', 'BoundaryLoss' ] diff --git a/mmseg/models/losses/boundary_loss.py b/mmseg/models/losses/boundary_loss.py new file mode 100644 index 0000000000..e86b850d87 --- /dev/null +++ b/mmseg/models/losses/boundary_loss.py @@ -0,0 +1,62 @@ +# Copyright (c) OpenMMLab. All rights reserved. +import torch +import torch.nn as nn +import torch.nn.functional as F +from torch import Tensor + +from mmseg.registry import MODELS + + +@MODELS.register_module() +class BoundaryLoss(nn.Module): + """Boundary loss. + + This function is modified from + `PIDNet `_. # noqa + Licensed under the MIT License. + + + Args: + loss_weight (float): Weight of the loss. Defaults to 1.0. + loss_name (str): Name of the loss item. If you want this loss + item to be included into the backward graph, `loss_` must be the + prefix of the name. Defaults to 'loss_boundary'. + """ + + def __init__(self, + loss_weight: float = 1.0, + loss_name: str = 'loss_boundary'): + super().__init__() + self.loss_weight = loss_weight + self.loss_name_ = loss_name + + def forward(self, bd_pre: Tensor, bd_gt: Tensor) -> Tensor: + """Forward function. + Args: + bd_pre (Tensor): Predictions of the boundary head. + bd_gt (Tensor): Ground truth of the boundary. + + Returns: + Tensor: Loss tensor. + """ + log_p = bd_pre.permute(0, 2, 3, 1).contiguous().view(1, -1) + target_t = bd_gt.view(1, -1).float() + + pos_index = (target_t == 1) + neg_index = (target_t == 0) + + weight = torch.zeros_like(log_p) + pos_num = pos_index.sum() + neg_num = neg_index.sum() + sum_num = pos_num + neg_num + weight[pos_index] = neg_num * 1.0 / sum_num + weight[neg_index] = pos_num * 1.0 / sum_num + + loss = F.binary_cross_entropy_with_logits( + log_p, target_t, weight, reduction='mean') + + return self.loss_weight * loss + + @property + def loss_name(self): + return self.loss_name_ diff --git a/mmseg/models/losses/ohem_cross_entropy_loss.py b/mmseg/models/losses/ohem_cross_entropy_loss.py new file mode 100644 index 0000000000..a519b4d84e --- /dev/null +++ b/mmseg/models/losses/ohem_cross_entropy_loss.py @@ -0,0 +1,94 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from typing import List, Optional, Union + +import torch.nn as nn +import torch.nn.functional as F +from torch import Tensor + +from mmseg.registry import MODELS + + +@MODELS.register_module() +class OhemCrossEntropy(nn.Module): + """OhemCrossEntropy loss. + + This func is modified from + `PIDNet `_. # noqa + + Licensed under the MIT License. + + Args: + ignore_label (int): Labels to ignore when computing the loss. + Default: 255 + thresh (float, optional): The threshold for hard example selection. + Below which, are prediction with low confidence. If not + specified, the hard examples will be pixels of top ``min_kept`` + loss. Default: 0.7. + min_kept (int, optional): The minimum number of predictions to keep. + Default: 100000. + loss_weight (float): Weight of the loss. Defaults to 1.0. + class_weight (list[float] | str, optional): Weight of each class. If in + str format, read them from a file. Defaults to None. + loss_name (str): Name of the loss item. If you want this loss + item to be included into the backward graph, `loss_` must be the + prefix of the name. Defaults to 'loss_boundary'. + """ + + def __init__(self, + ignore_label: int = 255, + thres: float = 0.7, + min_kept: int = 100000, + loss_weight: float = 1.0, + class_weight: Optional[Union[List[float], str]] = None, + loss_name: str = 'loss_ohem'): + super().__init__() + self.thresh = thres + self.min_kept = max(1, min_kept) + self.ignore_label = ignore_label + self.loss_weight = loss_weight + self.loss_name_ = loss_name + self.class_weight = class_weight + + def forward(self, score: Tensor, target: Tensor) -> Tensor: + """Forward function. + Args: + score (Tensor): Predictions of the segmentation head. + target (Tensor): Ground truth of the image. + + Returns: + Tensor: Loss tensor. + """ + # score: (N, C, H, W) + pred = F.softmax(score, dim=1) + if self.class_weight is not None: + class_weight = score.new_tensor(self.class_weight) + else: + class_weight = None + + pixel_losses = F.cross_entropy( + score, + target, + weight=class_weight, + ignore_index=self.ignore_label, + reduction='none').contiguous().view(-1) # (N*H*W) + mask = target.contiguous().view(-1) != self.ignore_label # (N*H*W) + + tmp_target = target.clone() # (N, H, W) + tmp_target[tmp_target == self.ignore_label] = 0 + # pred: (N, C, H, W) -> (N*H*W, C) + pred = pred.gather(1, tmp_target.unsqueeze(1)) + # pred: (N*H*W, C) -> (N*H*W), ind: (N*H*W) + pred, ind = pred.contiguous().view(-1, )[mask].contiguous().sort() + if pred.numel() > 0: + min_value = pred[min(self.min_kept, pred.numel() - 1)] + else: + return score.new_tensor(0.0) + threshold = max(min_value, self.thresh) + + pixel_losses = pixel_losses[mask][ind] + pixel_losses = pixel_losses[pred < threshold] + return self.loss_weight * pixel_losses.mean() + + @property + def loss_name(self): + return self.loss_name_ diff --git a/mmseg/models/utils/__init__.py b/mmseg/models/utils/__init__.py index 7aaa600c2d..fc142f16fc 100644 --- a/mmseg/models/utils/__init__.py +++ b/mmseg/models/utils/__init__.py @@ -1,8 +1,10 @@ # Copyright (c) OpenMMLab. All rights reserved. +from .basic_block import BasicBlock, Bottleneck from .embed import PatchEmbed from .encoding import Encoding from .inverted_residual import InvertedResidual, InvertedResidualV3 from .make_divisible import make_divisible +from .ppm import DAPPM, PAPPM from .res_layer import ResLayer from .se_layer import SELayer from .self_attention_block import SelfAttentionBlock @@ -15,5 +17,5 @@ 'ResLayer', 'SelfAttentionBlock', 'make_divisible', 'InvertedResidual', 'UpConvBlock', 'InvertedResidualV3', 'SELayer', 'PatchEmbed', 'nchw_to_nlc', 'nlc_to_nchw', 'nchw2nlc2nchw', 'nlc2nchw2nlc', 'Encoding', - 'Upsample', 'resize' + 'Upsample', 'resize', 'DAPPM', 'PAPPM', 'BasicBlock', 'Bottleneck' ] diff --git a/mmseg/models/utils/basic_block.py b/mmseg/models/utils/basic_block.py new file mode 100644 index 0000000000..4e1ad8146d --- /dev/null +++ b/mmseg/models/utils/basic_block.py @@ -0,0 +1,143 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from typing import Optional + +import torch.nn as nn +from mmcv.cnn import ConvModule +from mmengine.model import BaseModule +from torch import Tensor + +from mmseg.registry import MODELS +from mmseg.utils import OptConfigType + + +class BasicBlock(BaseModule): + """Basic block from `ResNet `_. + + Args: + in_channels (int): Input channels. + channels (int): Output channels. + stride (int): Stride of the first block. Default: 1. + downsample (nn.Module, optional): Downsample operation on identity. + Default: None. + norm_cfg (dict, optional): Config dict for normalization layer. + Default: dict(type='BN'). + act_cfg (dict, optional): Config dict for activation layer in + ConvModule. Default: dict(type='ReLU', inplace=True). + act_cfg_out (dict, optional): Config dict for activation layer at the + last of the block. Default: None. + init_cfg (dict, optional): Initialization config dict. Default: None. + """ + + expansion = 1 + + def __init__(self, + in_channels: int, + channels: int, + stride: int = 1, + downsample: nn.Module = None, + norm_cfg: OptConfigType = dict(type='BN'), + act_cfg: OptConfigType = dict(type='ReLU', inplace=True), + act_cfg_out: OptConfigType = dict(type='ReLU', inplace=True), + init_cfg: OptConfigType = None): + super().__init__(init_cfg) + self.conv1 = ConvModule( + in_channels, + channels, + kernel_size=3, + stride=stride, + padding=1, + norm_cfg=norm_cfg, + act_cfg=act_cfg) + self.conv2 = ConvModule( + channels, + channels, + kernel_size=3, + padding=1, + norm_cfg=norm_cfg, + act_cfg=None) + self.downsample = downsample + if act_cfg_out: + self.act = MODELS.build(act_cfg_out) + + def forward(self, x: Tensor) -> Tensor: + residual = x + out = self.conv1(x) + out = self.conv2(out) + + if self.downsample: + residual = self.downsample(x) + + out += residual + + if hasattr(self, 'act'): + out = self.act(out) + + return out + + +class Bottleneck(BaseModule): + """Bottleneck block from `ResNet `_. + + Args: + in_channels (int): Input channels. + channels (int): Output channels. + stride (int): Stride of the first block. Default: 1. + downsample (nn.Module, optional): Downsample operation on identity. + Default: None. + norm_cfg (dict, optional): Config dict for normalization layer. + Default: dict(type='BN'). + act_cfg (dict, optional): Config dict for activation layer in + ConvModule. Default: dict(type='ReLU', inplace=True). + act_cfg_out (dict, optional): Config dict for activation layer at + the last of the block. Default: None. + init_cfg (dict, optional): Initialization config dict. Default: None. + """ + + expansion = 2 + + def __init__(self, + in_channels: int, + channels: int, + stride: int = 1, + downsample: Optional[nn.Module] = None, + norm_cfg: OptConfigType = dict(type='BN'), + act_cfg: OptConfigType = dict(type='ReLU', inplace=True), + act_cfg_out: OptConfigType = None, + init_cfg: OptConfigType = None): + super().__init__(init_cfg) + self.conv1 = ConvModule( + in_channels, channels, 1, norm_cfg=norm_cfg, act_cfg=act_cfg) + self.conv2 = ConvModule( + channels, + channels, + 3, + stride, + 1, + norm_cfg=norm_cfg, + act_cfg=act_cfg) + self.conv3 = ConvModule( + channels, + channels * self.expansion, + 1, + norm_cfg=norm_cfg, + act_cfg=None) + if act_cfg_out: + self.act = MODELS.build(act_cfg_out) + self.downsample = downsample + + def forward(self, x: Tensor) -> Tensor: + residual = x + + out = self.conv1(x) + out = self.conv2(out) + out = self.conv3(out) + + if self.downsample: + residual = self.downsample(x) + + out += residual + + if hasattr(self, 'act'): + out = self.act(out) + + return out diff --git a/mmseg/models/utils/ppm.py b/mmseg/models/utils/ppm.py new file mode 100644 index 0000000000..5fe6ff26fa --- /dev/null +++ b/mmseg/models/utils/ppm.py @@ -0,0 +1,193 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from typing import Dict, List + +import torch +import torch.nn as nn +import torch.nn.functional as F +from mmcv.cnn import ConvModule +from mmengine.model import BaseModule, ModuleList, Sequential +from torch import Tensor + + +class DAPPM(BaseModule): + """DAPPM module in `DDRNet `_. + + Args: + in_channels (int): Input channels. + branch_channels (int): Branch channels. + out_channels (int): Output channels. + num_scales (int): Number of scales. + kernel_sizes (list[int]): Kernel sizes of each scale. + strides (list[int]): Strides of each scale. + paddings (list[int]): Paddings of each scale. + norm_cfg (dict): Config dict for normalization layer. + Default: dict(type='BN'). + act_cfg (dict): Config dict for activation layer in ConvModule. + Default: dict(type='ReLU', inplace=True). + conv_cfg (dict): Config dict for convolution layer in ConvModule. + Default: dict(order=('norm', 'act', 'conv'), bias=False). + upsample_mode (str): Upsample mode. Default: 'bilinear'. + """ + + def __init__(self, + in_channels: int, + branch_channels: int, + out_channels: int, + num_scales: int, + kernel_sizes: List[int] = [5, 9, 17], + strides: List[int] = [2, 4, 8], + paddings: List[int] = [2, 4, 8], + norm_cfg: Dict = dict(type='BN', momentum=0.1), + act_cfg: Dict = dict(type='ReLU', inplace=True), + conv_cfg: Dict = dict( + order=('norm', 'act', 'conv'), bias=False), + upsample_mode: str = 'bilinear'): + super().__init__() + + self.num_scales = num_scales + self.unsample_mode = upsample_mode + self.in_channels = in_channels + self.branch_channels = branch_channels + self.out_channels = out_channels + self.norm_cfg = norm_cfg + self.act_cfg = act_cfg + self.conv_cfg = conv_cfg + + self.scales = ModuleList([ + ConvModule( + in_channels, + branch_channels, + kernel_size=1, + norm_cfg=norm_cfg, + act_cfg=act_cfg, + **conv_cfg) + ]) + for i in range(1, num_scales - 1): + self.scales.append( + Sequential(*[ + nn.AvgPool2d( + kernel_size=kernel_sizes[i - 1], + stride=strides[i - 1], + padding=paddings[i - 1]), + ConvModule( + in_channels, + branch_channels, + kernel_size=1, + norm_cfg=norm_cfg, + act_cfg=act_cfg, + **conv_cfg) + ])) + self.scales.append( + Sequential(*[ + nn.AdaptiveAvgPool2d((1, 1)), + ConvModule( + in_channels, + branch_channels, + kernel_size=1, + norm_cfg=norm_cfg, + act_cfg=act_cfg, + **conv_cfg) + ])) + self.processes = ModuleList() + for i in range(num_scales - 1): + self.processes.append( + ConvModule( + branch_channels, + branch_channels, + kernel_size=3, + padding=1, + norm_cfg=norm_cfg, + act_cfg=act_cfg, + **conv_cfg)) + + self.compression = ConvModule( + branch_channels * num_scales, + out_channels, + kernel_size=1, + norm_cfg=norm_cfg, + act_cfg=act_cfg, + **conv_cfg) + + self.shortcut = ConvModule( + in_channels, + out_channels, + kernel_size=1, + norm_cfg=norm_cfg, + act_cfg=act_cfg, + **conv_cfg) + + def forward(self, inputs: Tensor): + feats = [] + feats.append(self.scales[0](inputs)) + + for i in range(1, self.num_scales): + feat_up = F.interpolate( + self.scales[i](inputs), + size=inputs.shape[2:], + mode=self.unsample_mode) + feats.append(self.processes[i - 1](feat_up + feats[i - 1])) + + return self.compression(torch.cat(feats, + dim=1)) + self.shortcut(inputs) + + +class PAPPM(DAPPM): + """PAPPM module in `PIDNet `_. + + Args: + in_channels (int): Input channels. + branch_channels (int): Branch channels. + out_channels (int): Output channels. + num_scales (int): Number of scales. + kernel_sizes (list[int]): Kernel sizes of each scale. + strides (list[int]): Strides of each scale. + paddings (list[int]): Paddings of each scale. + norm_cfg (dict): Config dict for normalization layer. + Default: dict(type='BN', momentum=0.1). + act_cfg (dict): Config dict for activation layer in ConvModule. + Default: dict(type='ReLU', inplace=True). + conv_cfg (dict): Config dict for convolution layer in ConvModule. + Default: dict(order=('norm', 'act', 'conv'), bias=False). + upsample_mode (str): Upsample mode. Default: 'bilinear'. + """ + + def __init__(self, + in_channels: int, + branch_channels: int, + out_channels: int, + num_scales: int, + kernel_sizes: List[int] = [5, 9, 17], + strides: List[int] = [2, 4, 8], + paddings: List[int] = [2, 4, 8], + norm_cfg: Dict = dict(type='BN', momentum=0.1), + act_cfg: Dict = dict(type='ReLU', inplace=True), + conv_cfg: Dict = dict( + order=('norm', 'act', 'conv'), bias=False), + upsample_mode: str = 'bilinear'): + super().__init__(in_channels, branch_channels, out_channels, + num_scales, kernel_sizes, strides, paddings, norm_cfg, + act_cfg, conv_cfg, upsample_mode) + + self.processes = ConvModule( + self.branch_channels * (self.num_scales - 1), + self.branch_channels * (self.num_scales - 1), + kernel_size=3, + padding=1, + groups=self.num_scales - 1, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg, + **self.conv_cfg) + + def forward(self, inputs: Tensor): + x_ = self.scales[0](inputs) + feats = [] + for i in range(1, self.num_scales): + feat_up = F.interpolate( + self.scales[i](inputs), + size=inputs.shape[2:], + mode=self.unsample_mode, + align_corners=False) + feats.append(feat_up + x_) + scale_out = self.processes(torch.cat(feats, dim=1)) + return self.compression(torch.cat([x_, scale_out], + dim=1)) + self.shortcut(inputs) diff --git a/model-index.yml b/model-index.yml index ae96bd30f7..be7210e120 100644 --- a/model-index.yml +++ b/model-index.yml @@ -31,6 +31,7 @@ Import: - configs/mobilenet_v3/mobilenet_v3.yml - configs/nonlocal_net/nonlocal_net.yml - configs/ocrnet/ocrnet.yml +- configs/pidnet/pidnet.yml - configs/point_rend/point_rend.yml - configs/poolformer/poolformer.yml - configs/psanet/psanet.yml diff --git a/tests/test_models/test_backbones/test_pidnet.py b/tests/test_models/test_backbones/test_pidnet.py new file mode 100644 index 0000000000..208dfc7814 --- /dev/null +++ b/tests/test_models/test_backbones/test_pidnet.py @@ -0,0 +1,87 @@ +# Copyright (c) OpenMMLab. All rights reserved. +import os +import tempfile + +import torch +from mmengine.registry import init_default_scope + +from mmseg.registry import MODELS + +init_default_scope('mmseg') + + +def test_pidnet_backbone(): + # Test PIDNet Standard Forward + norm_cfg = dict(type='BN', requires_grad=True) + backbone_cfg = dict( + type='PIDNet', + in_channels=3, + channels=32, + ppm_channels=96, + num_stem_blocks=2, + num_branch_blocks=3, + align_corners=False, + norm_cfg=norm_cfg, + act_cfg=dict(type='ReLU', inplace=True)) + model = MODELS.build(backbone_cfg) + model.init_weights() + + # Test init weights + temp_file = tempfile.NamedTemporaryFile() + temp_file.close() + torch.save(model.state_dict(), temp_file.name) + backbone_cfg.update( + init_cfg=dict(type='Pretrained', checkpoint=temp_file.name)) + model = MODELS.build(backbone_cfg) + model.init_weights() + os.remove(temp_file.name) + + # Test eval mode + model.eval() + batch_size = 1 + imgs = torch.randn(batch_size, 3, 64, 128) + feats = model(imgs) + + assert type(feats) == torch.Tensor + assert feats.shape == torch.Size([batch_size, 128, 8, 16]) + + # Test train mode + model.train() + batch_size = 2 + imgs = torch.randn(batch_size, 3, 64, 128) + feats = model(imgs) + + assert len(feats) == 3 + # test output for P branch + assert feats[0].shape == torch.Size([batch_size, 64, 8, 16]) + # test output for I branch + assert feats[1].shape == torch.Size([batch_size, 128, 8, 16]) + # test output for D branch + assert feats[2].shape == torch.Size([batch_size, 64, 8, 16]) + + # Test pidnet-m + backbone_cfg.update(channels=64) + model = MODELS.build(backbone_cfg) + feats = model(imgs) + + assert len(feats) == 3 + # test output for P branch + assert feats[0].shape == torch.Size([batch_size, 128, 8, 16]) + # test output for I branch + assert feats[1].shape == torch.Size([batch_size, 256, 8, 16]) + # test output for D branch + assert feats[2].shape == torch.Size([batch_size, 128, 8, 16]) + + # Test pidnet-l + backbone_cfg.update( + channels=64, ppm_channesl=112, num_stem_blocks=3, num_branch_blocks=4) + model = MODELS.build(backbone_cfg) + feats = model(imgs) + + assert len(feats) == 3 + # test output for P branch + assert feats[0].shape == torch.Size([batch_size, 128, 8, 16]) + # test output for I branch + assert feats[1].shape == torch.Size([batch_size, 256, 8, 16]) + # test output for D branch + assert feats[2].shape == torch.Size([batch_size, 128, 8, 16]) diff --git a/tests/test_models/test_heads/test_pidnet_head.py b/tests/test_models/test_heads/test_pidnet_head.py new file mode 100644 index 0000000000..a6247371c5 --- /dev/null +++ b/tests/test_models/test_heads/test_pidnet_head.py @@ -0,0 +1,89 @@ +# Copyright (c) OpenMMLab. All rights reserved. +import torch +from mmengine.registry import init_default_scope + +from mmseg.registry import MODELS + + +def test_pidnet_head(): + init_default_scope('mmseg') + + # Test PIDNet decode head Standard Forward + norm_cfg = dict(type='BN', requires_grad=True) + backbone_cfg = dict( + type='PIDNet', + in_channels=3, + channels=32, + ppm_channels=96, + num_stem_blocks=2, + num_branch_blocks=3, + align_corners=False, + norm_cfg=norm_cfg, + act_cfg=dict(type='ReLU', inplace=True)) + decode_head_cfg = dict( + type='PIDHead', + in_channels=128, + channels=128, + num_classes=19, + norm_cfg=norm_cfg, + act_cfg=dict(type='ReLU', inplace=True), + align_corners=True, + loss_decode=[ + dict( + type='CrossEntropyLoss', + use_sigmoid=False, + class_weight=[ + 0.8373, 0.918, 0.866, 1.0345, 1.0166, 0.9969, 0.9754, + 1.0489, 0.8786, 1.0023, 0.9539, 0.9843, 1.1116, 0.9037, + 1.0865, 1.0955, 1.0865, 1.1529, 1.0507 + ], + loss_weight=0.4), + dict( + type='OhemCrossEntropy', + thres=0.9, + min_kept=131072, + class_weight=[ + 0.8373, 0.918, 0.866, 1.0345, 1.0166, 0.9969, 0.9754, + 1.0489, 0.8786, 1.0023, 0.9539, 0.9843, 1.1116, 0.9037, + 1.0865, 1.0955, 1.0865, 1.1529, 1.0507 + ], + loss_weight=1.0), + dict(type='BoundaryLoss', loss_weight=20.0), + dict( + type='OhemCrossEntropy', + thres=0.9, + min_kept=131072, + class_weight=[ + 0.8373, 0.918, 0.866, 1.0345, 1.0166, 0.9969, 0.9754, + 1.0489, 0.8786, 1.0023, 0.9539, 0.9843, 1.1116, 0.9037, + 1.0865, 1.0955, 1.0865, 1.1529, 1.0507 + ], + loss_weight=1.0) + ]) + backbone = MODELS.build(backbone_cfg) + head = MODELS.build(decode_head_cfg) + + # Test train mode + backbone.train() + head.train() + batch_size = 2 + imgs = torch.randn(batch_size, 3, 64, 128) + feats = backbone(imgs) + seg_logit = head(feats) + + assert isinstance(seg_logit, tuple) + assert len(seg_logit) == 3 + + p_logits, i_logits, d_logits = seg_logit + assert p_logits.shape == (batch_size, 19, 8, 16) + assert i_logits.shape == (batch_size, 19, 8, 16) + assert d_logits.shape == (batch_size, 1, 8, 16) + + # Test eval mode + backbone.eval() + head.eval() + feats = backbone(imgs) + seg_logit = head(feats) + + assert isinstance(seg_logit, torch.Tensor) + assert seg_logit.shape == (batch_size, 19, 8, 16) From 3cc7ae2167a48df6234c7d5c68efc5020030ed0a Mon Sep 17 00:00:00 2001 From: Miao Zheng <76149310+MeowZheng@users.noreply.github.com> Date: Wed, 15 Mar 2023 17:49:59 +0800 Subject: [PATCH 15/32] [Fix] Format shape check (#2753) as title --- mmseg/datasets/transforms/formatting.py | 4 ++-- tests/test_datasets/test_formatting.py | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/mmseg/datasets/transforms/formatting.py b/mmseg/datasets/transforms/formatting.py index 57cda9b10e..46171d64f5 100644 --- a/mmseg/datasets/transforms/formatting.py +++ b/mmseg/datasets/transforms/formatting.py @@ -74,12 +74,12 @@ def transform(self, results: dict) -> dict: data_sample = SegDataSample() if 'gt_seg_map' in results: - if results['gt_seg_map'].shape == 2: + if len(results['gt_seg_map'].shape) == 2: data = to_tensor(results['gt_seg_map'][None, ...].astype(np.int64)) else: warnings.warn('Please pay attention your ground truth ' - 'segmentation map, usually the segentation ' + 'segmentation map, usually the segmentation ' 'map is 2D, but got ' f'{results["gt_seg_map"].shape}') data = to_tensor(results['gt_seg_map'].astype(np.int64)) diff --git a/tests/test_datasets/test_formatting.py b/tests/test_datasets/test_formatting.py index 51fd90d048..d0e5820ec7 100644 --- a/tests/test_datasets/test_formatting.py +++ b/tests/test_datasets/test_formatting.py @@ -4,6 +4,7 @@ import unittest import numpy as np +import pytest from mmengine.structures import BaseDataElement from mmseg.datasets.transforms import PackSegInputs @@ -46,8 +47,11 @@ def test_transform(self): self.assertEqual(results['data_samples'].ori_shape, results['data_samples'].gt_sem_seg.shape) results = copy.deepcopy(self.results) + # test dataset shape is not 2D results['gt_seg_map'] = np.random.rand(3, 300, 400) - results = transform(results) + msg = 'the segmentation map is 2D' + with pytest.warns(UserWarning, match=msg): + results = transform(results) self.assertEqual(results['data_samples'].ori_shape, results['data_samples'].gt_sem_seg.shape) From 1f1f2666b52ce080240bb8e9ebae695465f30121 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E6=98=95=E8=BE=B0?= Date: Wed, 15 Mar 2023 18:29:16 +0800 Subject: [PATCH 16/32] [Dev] Replace the test images (#2754) ## Motivation The original images are too large. ## Modification Crop to small images. --- .../images/__CRyFzoDOXn6unQ6a3DnQ.jpg | Bin 1227776 -> 2201 bytes .../v1.2/__CRyFzoDOXn6unQ6a3DnQ.png | Bin 75488 -> 1002 bytes .../v2.0/__CRyFzoDOXn6unQ6a3DnQ.png | Bin 75316 -> 1002 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/data/pseudo_mapillary_dataset/images/__CRyFzoDOXn6unQ6a3DnQ.jpg b/tests/data/pseudo_mapillary_dataset/images/__CRyFzoDOXn6unQ6a3DnQ.jpg index deed3177806e443cee9b00e0fb0e80315488742e..c3cf31a170788f257869ec57c760ddb7f931396d 100644 GIT binary patch delta 1612 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�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�i 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%0AtX?)jOu>rn&F1Q-GUyF5Ly7+X@XR>5w4i_=0g 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 YW)ve} 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∓omJfLd&@lC~pgW<}Qu%ih0gA@H!Vr0U` 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 aY*^xaHVeNliag`RWN>&*oXYUu!v6p{hif4K diff --git a/tests/data/pseudo_mapillary_dataset/v1.2/__CRyFzoDOXn6unQ6a3DnQ.png b/tests/data/pseudo_mapillary_dataset/v1.2/__CRyFzoDOXn6unQ6a3DnQ.png index 018a53b3a46d2aceb3bac0bf457dc0829d867f0f..2c648b7ef82f997bccac0595e4b6a25c9f00c9d8 100644 GIT binary patch delta 233 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 N?ghj1h3Bj>{{xzZyM_P& diff --git a/tests/data/pseudo_mapillary_dataset/v2.0/__CRyFzoDOXn6unQ6a3DnQ.png b/tests/data/pseudo_mapillary_dataset/v2.0/__CRyFzoDOXn6unQ6a3DnQ.png index a8b4b62357dfae32357067b4c55b85222425a70e..809256d931297ddff2bfd945fcf3ea0336e3f815 100644 GIT binary patch delta 233 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

  • _W<(r1|-U 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

    r`XRrijO)p1vCB3>WUM4K?Ij3g%!MHus3e=Q% zcaAFTS=27B_Uczi;;23__4NkaWQ0>~{ z5~f1my(Fv8hag9`CDA6ib=XA9F%~@shWs@83fsd(BVp$HWfgsX5KvC4|H!R_BdUx^ z(;GnG2VKzCoM^<$T(`VkA4a7kDz@M6aO*T$_|B*@@4@sYM3=M$xc6dQ*fP*hAV|NQ zEgevx|3|<8RzgNZqXJxLr>WH{1i{5bGS>u4d`;WAU`*HnV|xP5GEbBNhP$=s$6>}@ zB>PdG$b@+@*T4?*8nC$Cwh@45<1DOa-mqaT*k=t(eK~5%Im{=|v_6=-F&5U>xv)Zi z=psut1Q^VpmEulG1J3$6OvO!e8UX)=M+*(Y(X%*d8#wJqcMAwdi&(czByqz~ zxkIwaWVP3}cz8f$nt?zzJV^sRqZf1IKLWejn+o|j0)GQnk;d-_=;f32U4J91W{1h1 z7GWGwZT~GzkA=YTF{vF;?PA=6o2IbugE*5l`~aH!zZHnE!}bP^bmTup#^KyNq1{9N zRbY^9{6w)rl4P3&Bf>fak=btBDh`<-E7{XYM!^Z+(~B1YHCGB6_b>rEiHx#j8w&*F zZ2u9U)2kPs{!cap6~qFof;14Mqd3=Pof#?s4xB{xM*Bfo7`&(g%7J)X6g)2>Gb*+n zR$xkzGYBDprm!`K@~LwWr-PE|V~ckoVbO8pkbF|7J)|}Y>RP4;pli@_9q1q5WNo{W zp%3l{gzhqKx?rFQu>$%Ff+!N-j-q1{I^e3^g0z9L4M3j}MAS5F#wu8X2VDZHh2ZW3 zRKDZ0@0`)6D;pOM`~;4P-JCws^#lM~{^`$pboj{;cv2BW1GrcP&=215A#{v0Ja_HI z3RwV{A)+RY72@Z7kjDze$FD|*8HB~>m7iUOUpwfi}z#+Jm2gWDlUkCSA=0Mr6Z12+986pyrvn_CCyDtO_A0I2Dp`gOo2 z3%mlbK!bs|={YI{be8Atqe2rPv=tSy1cqWjxCWsO;9CkRbOMAzefR=($J~kF=WwBbc#^h4L)uK%MOwfiXnAo!sib@=&(4d>@=3e;`@ z2ZzBM2AIoC&d7#bf_TP6a@yz_WZobe@2fjN>A4F>sUM=T0XKXNjlC_v6_(chl?4=b zrKUm@4H{uXag7|i;Fahgyl;VOVb(FOo?7J0$NQ{mpzJyNh2qY5`oxU8721~qu z&q;h4Q=(BE>N_;wYBbjXFI5N-*b(HBB2^Y$FO~h`*165Gm>?6j7BzEOltDxj&A}~L z;uso9;L?^kp;Ln49K-en*kBA7rC}S;}(hj!4 z62YIfVfg?c*D+$?$ptX7?l%~Lnfa(WYGf-_*77bGxzDZhEoDdkLy%5{xez~d#RDv& zGy+Hvf_jFmKnq1U3n_#fEe~0ZrU Date: Wed, 15 Mar 2023 20:36:47 +0900 Subject: [PATCH 17/32] [Enhance] Support multi-band image for Mosaic (#2748) ## Modification I changed the hardcoded 3 channel length to dynamic channel length in `np.full` function arguments. This modification enables `RandomMosaic` transform to support multispectral image (e.g. RGB image with NIR band) or bi-temporal image pairs for change detection task. ## Checklist 1. Pre-commit or other linting tools are used to fix the potential lint issues. 2. The modification is covered by complete unit tests. If not, please add more unit test to ensure the correctness. 3. If the modification has potential influence on downstream projects, this PR should be tested with downstream projects, like MMDet or MMDet3D. 4. The documentation has been modified accordingly, like docstring or example tutorials. --- mmseg/datasets/transforms/transforms.py | 3 ++- tests/test_datasets/test_transform.py | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/mmseg/datasets/transforms/transforms.py b/mmseg/datasets/transforms/transforms.py index 4f5316026f..fb7e2a0e66 100644 --- a/mmseg/datasets/transforms/transforms.py +++ b/mmseg/datasets/transforms/transforms.py @@ -1062,8 +1062,9 @@ def _mosaic_transform_img(self, results: dict) -> dict: assert 'mix_results' in results if len(results['img'].shape) == 3: + c = results['img'].shape[2] mosaic_img = np.full( - (int(self.img_scale[0] * 2), int(self.img_scale[1] * 2), 3), + (int(self.img_scale[0] * 2), int(self.img_scale[1] * 2), c), self.pad_val, dtype=results['img'].dtype) else: diff --git a/tests/test_datasets/test_transform.py b/tests/test_datasets/test_transform.py index a9136bebc8..92d6c6106d 100644 --- a/tests/test_datasets/test_transform.py +++ b/tests/test_datasets/test_transform.py @@ -639,6 +639,17 @@ def test_mosaic(): results = mosaic_module(results) assert results['img'].shape[:2] == (20, 24) + results = dict() + results['img'] = np.concatenate((img, img), axis=2) + results['gt_semantic_seg'] = seg + results['seg_fields'] = ['gt_semantic_seg'] + + transform = dict(type='RandomMosaic', prob=1, img_scale=(10, 12)) + mosaic_module = TRANSFORMS.build(transform) + results['mix_results'] = [copy.deepcopy(results)] * 3 + results = mosaic_module(results) + assert results['img'].shape[2] == 6 + def test_cutout(): # test prob From ff8d9719886a1ff0a5302027152173514573c9ce Mon Sep 17 00:00:00 2001 From: MengzhangLI Date: Thu, 16 Mar 2023 16:49:15 +0800 Subject: [PATCH 18/32] [Feature] Support SegNeXt in MMSegmentation 2.0 (#2654) ## Motivation Support SegNeXt in MMSeg 1.x branch. 0.x PR: https://github.com/open-mmlab/mmsegmentation/pull/2600 --------- Co-authored-by: xiexinch --- README.md | 1 + README_zh-CN.md | 1 + configs/segnext/README.md | 63 +++ configs/segnext/segnext.yml | 103 ++++ ...mscan-b_1xb16-adamw-160k_ade20k-512x512.py | 28 ++ ...mscan-l_1xb16-adamw-160k_ade20k-512x512.py | 27 + ...mscan-s_1xb16-adamw-160k_ade20k-512x512.py | 27 + ...mscan-t_1xb16-adamw-160k_ade20k-512x512.py | 84 ++++ mmseg/models/backbones/__init__.py | 3 +- mmseg/models/backbones/mscan.py | 467 ++++++++++++++++++ mmseg/models/decode_heads/__init__.py | 3 +- mmseg/models/decode_heads/ham_head.py | 257 ++++++++++ model-index.yml | 1 + .../test_models/test_backbones/test_mscan.py | 69 +++ tests/test_models/test_heads/test_ham_head.py | 44 ++ 15 files changed, 1176 insertions(+), 2 deletions(-) create mode 100644 configs/segnext/README.md create mode 100644 configs/segnext/segnext.yml create mode 100644 configs/segnext/segnext_mscan-b_1xb16-adamw-160k_ade20k-512x512.py create mode 100644 configs/segnext/segnext_mscan-l_1xb16-adamw-160k_ade20k-512x512.py create mode 100644 configs/segnext/segnext_mscan-s_1xb16-adamw-160k_ade20k-512x512.py create mode 100644 configs/segnext/segnext_mscan-t_1xb16-adamw-160k_ade20k-512x512.py create mode 100644 mmseg/models/backbones/mscan.py create mode 100644 mmseg/models/decode_heads/ham_head.py create mode 100644 tests/test_models/test_backbones/test_mscan.py create mode 100644 tests/test_models/test_heads/test_ham_head.py diff --git a/README.md b/README.md index 69f751b9e5..a17557cb81 100644 --- a/README.md +++ b/README.md @@ -117,6 +117,7 @@ Results and models are available in the [model zoo](docs/en/model_zoo.md). - [x] [ConvNeXt (CVPR'2022)](configs/convnext) - [x] [MAE (CVPR'2022)](configs/mae) - [x] [PoolFormer (CVPR'2022)](configs/poolformer) +- [x] [SegNeXt (NeurIPS'2022)](configs/segnext) diff --git a/README_zh-CN.md b/README_zh-CN.md index 709e6ef195..e09b515ab5 100644 --- a/README_zh-CN.md +++ b/README_zh-CN.md @@ -98,6 +98,7 @@ MMSegmentation 是一个基于 PyTorch 的语义分割开源工具箱。它是 O - [x] [ConvNeXt (CVPR'2022)](configs/convnext) - [x] [MAE (CVPR'2022)](configs/mae) - [x] [PoolFormer (CVPR'2022)](configs/poolformer) +- [x] [SegNeXt (NeurIPS'2022)](configs/segnext) diff --git a/configs/segnext/README.md b/configs/segnext/README.md new file mode 100644 index 0000000000..315f4e23e8 --- /dev/null +++ b/configs/segnext/README.md @@ -0,0 +1,63 @@ +# SegNeXt + +> [SegNeXt: Rethinking Convolutional Attention Design for Semantic Segmentation](https://arxiv.org/abs/2209.08575) + +## Introduction + + + +Official Repo + +Code Snippet + +## Abstract + + + +We present SegNeXt, a simple convolutional network architecture for semantic segmentation. Recent transformer-based models have dominated the field of semantic segmentation due to the efficiency of self-attention in encoding spatial information. In this paper, we show that convolutional attention is a more efficient and effective way to encode contextual information than the self-attention mechanism in transformers. By re-examining the characteristics owned by successful segmentation models, we discover several key components leading to the performance improvement of segmentation models. This motivates us to design a novel convolutional attention network that uses cheap convolutional operations. Without bells and whistles, our SegNeXt significantly improves the performance of previous state-of-the-art methods on popular benchmarks, including ADE20K, Cityscapes, COCO-Stuff, Pascal VOC, Pascal Context, and iSAID. Notably, SegNeXt outperforms EfficientNet-L2 w/ NAS-FPN and achieves 90.6% mIoU on the Pascal VOC 2012 test leaderboard using only 1/10 parameters of it. On average, SegNeXt achieves about 2.0% mIoU improvements compared to the state-of-the-art methods on the ADE20K datasets with the same or fewer computations. Code is available at [this https URL](https://github.com/uyzhang/JSeg) (Jittor) and [this https URL](https://github.com/Visual-Attention-Network/SegNeXt) (Pytorch). + + + +

    + +
    + +## Results and models + +### ADE20K + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | +| ------- | -------- | --------- | ------- | -------- | -------------- | ----- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| SegNeXt | MSCAN-T | 512x512 | 160000 | 17.88 | 52.38 | 41.50 | 42.59 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segnext/segnext_mscan-t_1xb16-adamw-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-t_1x16_512x512_adamw_160k_ade20k/segnext_mscan-t_1x16_512x512_adamw_160k_ade20k_20230210_140244-05bd8466.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-t_1x16_512x512_adamw_160k_ade20k/segnext_mscan-t_1x16_512x512_adamw_160k_ade20k_20230210_140244.log.json) | +| SegNeXt | MSCAN-S | 512x512 | 160000 | 21.47 | 42.27 | 44.16 | 45.81 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segnext/segnext_mscan-s_1xb16-adamw-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-s_1x16_512x512_adamw_160k_ade20k/segnext_mscan-s_1x16_512x512_adamw_160k_ade20k_20230214_113014-43013668.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-s_1x16_512x512_adamw_160k_ade20k/segnext_mscan-s_1x16_512x512_adamw_160k_ade20k_20230214_113014.log.json) | +| SegNeXt | MSCAN-B | 512x512 | 160000 | 31.03 | 35.15 | 48.03 | 49.68 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segnext/segnext_mscan-b_1xb16-adamw-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-b_1x16_512x512_adamw_160k_ade20k/segnext_mscan-b_1x16_512x512_adamw_160k_ade20k_20230209_172053-b6f6c70c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-b_1x16_512x512_adamw_160k_ade20k/segnext_mscan-b_1x16_512x512_adamw_160k_ade20k_20230209_172053.log.json) | +| SegNeXt | MSCAN-L | 512x512 | 160000 | 43.32 | 22.91 | 50.99 | 52.10 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segnext/segnext_mscan-l_1xb16-adamw-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-l_1x16_512x512_adamw_160k_ade20k/segnext_mscan-l_1x16_512x512_adamw_160k_ade20k_20230209_172055-19b14b63.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-l_1x16_512x512_adamw_160k_ade20k/segnext_mscan-l_1x16_512x512_adamw_160k_ade20k_20230209_172055.log.json) | + +Note: + +- When we integrated SegNeXt into MMSegmentation, we modified some layers' names to make them more precise and concise without changing the model architecture. Therefore, the keys of pre-trained weights are different from the [original weights](https://cloud.tsinghua.edu.cn/d/c15b25a6745946618462/), but don't worry about these changes. we have converted them and uploaded the checkpoints, you might find URL of pre-trained checkpoints in config files and can use them directly for training. + +- The total batch size is 16. We trained for SegNeXt with a single GPU as the performance degrades significantly when using`SyncBN` (mainly in `OverlapPatchEmbed` modules of `MSCAN`) of PyTorch 1.9. + +- There will be subtle differences when model testing as Non-negative Matrix Factorization (NMF) in `LightHamHead` will be initialized randomly. To control this randomness, please set the random seed when model testing. You can modify [`./tools/test.py`](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/tools/test.py) like: + +```python +def main(): + from mmengine.runner import seg_random_seed + random_seed = xxx # set random seed recorded in training log + set_random_seed(random_seed, deterministic=False) + ... +``` + +- This model performance is sensitive to the seed values used, please refer to the log file for the specific settings of the seed. If you choose a different seed, the results might differ from the table results. Take SegNeXt Large for example, its results range from 49.60 to 51.0. + +## Citation + +```bibtex +@article{guo2022segnext, + title={SegNeXt: Rethinking Convolutional Attention Design for Semantic Segmentation}, + author={Guo, Meng-Hao and Lu, Cheng-Ze and Hou, Qibin and Liu, Zhengning and Cheng, Ming-Ming and Hu, Shi-Min}, + journal={arXiv preprint arXiv:2209.08575}, + year={2022} +} +``` diff --git a/configs/segnext/segnext.yml b/configs/segnext/segnext.yml new file mode 100644 index 0000000000..3bcdea8403 --- /dev/null +++ b/configs/segnext/segnext.yml @@ -0,0 +1,103 @@ +Collections: +- Name: SegNeXt + Metadata: + Training Data: + - ADE20K + Paper: + URL: https://arxiv.org/abs/2209.08575 + Title: 'SegNeXt: Rethinking Convolutional Attention Design for Semantic Segmentation' + README: configs/segnext/README.md + Code: + URL: https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/models/backbones/mscan.py#L328 + Version: dev-1.x + Converted From: + Code: https://github.com/visual-attention-network/segnext +Models: +- Name: segnext_mscan-t_1xb16-adamw-160k_ade20k-512x512 + In Collection: SegNeXt + Metadata: + backbone: MSCAN-T + crop size: (512,512) + lr schd: 160000 + inference time (ms/im): + - value: 19.09 + hardware: V100 + backend: PyTorch + batch size: 1 + mode: FP32 + resolution: (512,512) + Training Memory (GB): 17.88 + Results: + - Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 41.5 + mIoU(ms+flip): 42.59 + Config: configs/segnext/segnext_mscan-t_1xb16-adamw-160k_ade20k-512x512.py + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-t_1x16_512x512_adamw_160k_ade20k/segnext_mscan-t_1x16_512x512_adamw_160k_ade20k_20230210_140244-05bd8466.pth +- Name: segnext_mscan-s_1xb16-adamw-160k_ade20k-512x512 + In Collection: SegNeXt + Metadata: + backbone: MSCAN-S + crop size: (512,512) + lr schd: 160000 + inference time (ms/im): + - value: 23.66 + hardware: V100 + backend: PyTorch + batch size: 1 + mode: FP32 + resolution: (512,512) + Training Memory (GB): 21.47 + Results: + - Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 44.16 + mIoU(ms+flip): 45.81 + Config: configs/segnext/segnext_mscan-s_1xb16-adamw-160k_ade20k-512x512.py + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-s_1x16_512x512_adamw_160k_ade20k/segnext_mscan-s_1x16_512x512_adamw_160k_ade20k_20230214_113014-43013668.pth +- Name: segnext_mscan-b_1xb16-adamw-160k_ade20k-512x512 + In Collection: SegNeXt + Metadata: + backbone: MSCAN-B + crop size: (512,512) + lr schd: 160000 + inference time (ms/im): + - value: 28.45 + hardware: V100 + backend: PyTorch + batch size: 1 + mode: FP32 + resolution: (512,512) + Training Memory (GB): 31.03 + Results: + - Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 48.03 + mIoU(ms+flip): 49.68 + Config: configs/segnext/segnext_mscan-b_1xb16-adamw-160k_ade20k-512x512.py + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-b_1x16_512x512_adamw_160k_ade20k/segnext_mscan-b_1x16_512x512_adamw_160k_ade20k_20230209_172053-b6f6c70c.pth +- Name: segnext_mscan-l_1xb16-adamw-160k_ade20k-512x512 + In Collection: SegNeXt + Metadata: + backbone: MSCAN-L + crop size: (512,512) + lr schd: 160000 + inference time (ms/im): + - value: 43.65 + hardware: V100 + backend: PyTorch + batch size: 1 + mode: FP32 + resolution: (512,512) + Training Memory (GB): 43.32 + Results: + - Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 50.99 + mIoU(ms+flip): 52.1 + Config: configs/segnext/segnext_mscan-l_1xb16-adamw-160k_ade20k-512x512.py + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-l_1x16_512x512_adamw_160k_ade20k/segnext_mscan-l_1x16_512x512_adamw_160k_ade20k_20230209_172055-19b14b63.pth diff --git a/configs/segnext/segnext_mscan-b_1xb16-adamw-160k_ade20k-512x512.py b/configs/segnext/segnext_mscan-b_1xb16-adamw-160k_ade20k-512x512.py new file mode 100644 index 0000000000..000f448483 --- /dev/null +++ b/configs/segnext/segnext_mscan-b_1xb16-adamw-160k_ade20k-512x512.py @@ -0,0 +1,28 @@ +_base_ = './segnext_mscan-t_1xb16-adamw-160k_ade20k-512x512.py' + +# model settings +checkpoint_file = 'https://download.openmmlab.com/mmsegmentation/v0.5/pretrain/segnext/mscan_b_20230227-3ab7d230.pth' # noqa +ham_norm_cfg = dict(type='GN', num_groups=32, requires_grad=True) +model = dict( + type='EncoderDecoder', + backbone=dict( + embed_dims=[64, 128, 320, 512], + depths=[3, 3, 12, 3], + init_cfg=dict(type='Pretrained', checkpoint=checkpoint_file), + drop_path_rate=0.1, + norm_cfg=dict(type='BN', requires_grad=True)), + decode_head=dict( + type='LightHamHead', + in_channels=[128, 320, 512], + in_index=[1, 2, 3], + channels=512, + ham_channels=512, + dropout_ratio=0.1, + num_classes=150, + norm_cfg=ham_norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), + # model training and testing settings + train_cfg=dict(), + test_cfg=dict(mode='whole')) diff --git a/configs/segnext/segnext_mscan-l_1xb16-adamw-160k_ade20k-512x512.py b/configs/segnext/segnext_mscan-l_1xb16-adamw-160k_ade20k-512x512.py new file mode 100644 index 0000000000..212d0a8557 --- /dev/null +++ b/configs/segnext/segnext_mscan-l_1xb16-adamw-160k_ade20k-512x512.py @@ -0,0 +1,27 @@ +_base_ = './segnext_mscan-t_1xb16-adamw-160k_ade20k-512x512.py' +# model settings +checkpoint_file = 'https://download.openmmlab.com/mmsegmentation/v0.5/pretrain/segnext/mscan_l_20230227-cef260d4.pth' # noqa +ham_norm_cfg = dict(type='GN', num_groups=32, requires_grad=True) +model = dict( + type='EncoderDecoder', + backbone=dict( + embed_dims=[64, 128, 320, 512], + depths=[3, 5, 27, 3], + init_cfg=dict(type='Pretrained', checkpoint=checkpoint_file), + drop_path_rate=0.3, + norm_cfg=dict(type='BN', requires_grad=True)), + decode_head=dict( + type='LightHamHead', + in_channels=[128, 320, 512], + in_index=[1, 2, 3], + channels=1024, + ham_channels=1024, + dropout_ratio=0.1, + num_classes=150, + norm_cfg=ham_norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), + # model training and testing settings + train_cfg=dict(), + test_cfg=dict(mode='whole')) diff --git a/configs/segnext/segnext_mscan-s_1xb16-adamw-160k_ade20k-512x512.py b/configs/segnext/segnext_mscan-s_1xb16-adamw-160k_ade20k-512x512.py new file mode 100644 index 0000000000..9a90779a60 --- /dev/null +++ b/configs/segnext/segnext_mscan-s_1xb16-adamw-160k_ade20k-512x512.py @@ -0,0 +1,27 @@ +_base_ = './segnext_mscan-t_1xb16-adamw-160k_ade20k-512x512.py' +# model settings +checkpoint_file = 'https://download.openmmlab.com/mmsegmentation/v0.5/pretrain/segnext/mscan_s_20230227-f33ccdf2.pth' # noqa +ham_norm_cfg = dict(type='GN', num_groups=32, requires_grad=True) +model = dict( + type='EncoderDecoder', + backbone=dict( + embed_dims=[64, 128, 320, 512], + depths=[2, 2, 4, 2], + init_cfg=dict(type='Pretrained', checkpoint=checkpoint_file), + norm_cfg=dict(type='BN', requires_grad=True)), + decode_head=dict( + type='LightHamHead', + in_channels=[128, 320, 512], + in_index=[1, 2, 3], + channels=256, + ham_channels=256, + ham_kwargs=dict(MD_R=16), + dropout_ratio=0.1, + num_classes=150, + norm_cfg=ham_norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), + # model training and testing settings + train_cfg=dict(), + test_cfg=dict(mode='whole')) diff --git a/configs/segnext/segnext_mscan-t_1xb16-adamw-160k_ade20k-512x512.py b/configs/segnext/segnext_mscan-t_1xb16-adamw-160k_ade20k-512x512.py new file mode 100644 index 0000000000..c8d6da85ff --- /dev/null +++ b/configs/segnext/segnext_mscan-t_1xb16-adamw-160k_ade20k-512x512.py @@ -0,0 +1,84 @@ +_base_ = [ + '../_base_/default_runtime.py', '../_base_/schedules/schedule_160k.py', + '../_base_/datasets/ade20k.py' +] +# model settings +checkpoint_file = 'https://download.openmmlab.com/mmsegmentation/v0.5/pretrain/segnext/mscan_t_20230227-119e8c9f.pth' # noqa +ham_norm_cfg = dict(type='GN', num_groups=32, requires_grad=True) +crop_size = (512, 512) +data_preprocessor = dict( + type='SegDataPreProcessor', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + bgr_to_rgb=True, + pad_val=0, + seg_pad_val=255, + size=(512, 512), + test_cfg=dict(size_divisor=32)) +model = dict( + type='EncoderDecoder', + data_preprocessor=data_preprocessor, + pretrained=None, + backbone=dict( + type='MSCAN', + init_cfg=dict(type='Pretrained', checkpoint=checkpoint_file), + embed_dims=[32, 64, 160, 256], + mlp_ratios=[8, 8, 4, 4], + drop_rate=0.0, + drop_path_rate=0.1, + depths=[3, 3, 5, 2], + attention_kernel_sizes=[5, [1, 7], [1, 11], [1, 21]], + attention_kernel_paddings=[2, [0, 3], [0, 5], [0, 10]], + act_cfg=dict(type='GELU'), + norm_cfg=dict(type='BN', requires_grad=True)), + decode_head=dict( + type='LightHamHead', + in_channels=[64, 160, 256], + in_index=[1, 2, 3], + channels=256, + ham_channels=256, + dropout_ratio=0.1, + num_classes=150, + norm_cfg=ham_norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + ham_kwargs=dict( + MD_S=1, + MD_R=16, + train_steps=6, + eval_steps=7, + inv_t=100, + rand_init=True)), + # model training and testing settings + train_cfg=dict(), + test_cfg=dict(mode='whole')) + +# dataset settings +train_dataloader = dict(batch_size=16) + +# optimizer +optim_wrapper = dict( + _delete_=True, + type='OptimWrapper', + optimizer=dict( + type='AdamW', lr=0.00006, betas=(0.9, 0.999), weight_decay=0.01), + paramwise_cfg=dict( + custom_keys={ + 'pos_block': dict(decay_mult=0.), + 'norm': dict(decay_mult=0.), + 'head': dict(lr_mult=10.) + })) + +param_scheduler = [ + dict( + type='LinearLR', start_factor=1e-6, by_epoch=False, begin=0, end=1500), + dict( + type='PolyLR', + power=1.0, + begin=1500, + end=160000, + eta_min=0.0, + by_epoch=False, + ) +] diff --git a/mmseg/models/backbones/__init__.py b/mmseg/models/backbones/__init__.py index 909b54f3ec..e3107306ea 100644 --- a/mmseg/models/backbones/__init__.py +++ b/mmseg/models/backbones/__init__.py @@ -11,6 +11,7 @@ from .mit import MixVisionTransformer from .mobilenet_v2 import MobileNetV2 from .mobilenet_v3 import MobileNetV3 +from .mscan import MSCAN from .pidnet import PIDNet from .resnest import ResNeSt from .resnet import ResNet, ResNetV1c, ResNetV1d @@ -27,5 +28,5 @@ 'ResNeSt', 'MobileNetV2', 'UNet', 'CGNet', 'MobileNetV3', 'VisionTransformer', 'SwinTransformer', 'MixVisionTransformer', 'BiSeNetV1', 'BiSeNetV2', 'ICNet', 'TIMMBackbone', 'ERFNet', 'PCPVT', - 'SVT', 'STDCNet', 'STDCContextPathNet', 'BEiT', 'MAE', 'PIDNet' + 'SVT', 'STDCNet', 'STDCContextPathNet', 'BEiT', 'MAE', 'PIDNet', 'MSCAN' ] diff --git a/mmseg/models/backbones/mscan.py b/mmseg/models/backbones/mscan.py new file mode 100644 index 0000000000..7150cb7a1c --- /dev/null +++ b/mmseg/models/backbones/mscan.py @@ -0,0 +1,467 @@ +# Copyright (c) OpenMMLab. All rights reserved. +# Originally from https://github.com/visual-attention-network/segnext +# Licensed under the Apache License, Version 2.0 (the "License") +import math +import warnings + +import torch +import torch.nn as nn +from mmcv.cnn import build_activation_layer, build_norm_layer +from mmcv.cnn.bricks import DropPath +from mmengine.model import BaseModule +from mmengine.model.weight_init import (constant_init, normal_init, + trunc_normal_init) + +from mmseg.registry import MODELS + + +class Mlp(BaseModule): + """Multi Layer Perceptron (MLP) Module. + + Args: + in_features (int): The dimension of input features. + hidden_features (int): The dimension of hidden features. + Defaults: None. + out_features (int): The dimension of output features. + Defaults: None. + act_cfg (dict): Config dict for activation layer in block. + Default: dict(type='GELU'). + drop (float): The number of dropout rate in MLP block. + Defaults: 0.0. + """ + + def __init__(self, + in_features, + hidden_features=None, + out_features=None, + act_cfg=dict(type='GELU'), + drop=0.): + super().__init__() + out_features = out_features or in_features + hidden_features = hidden_features or in_features + self.fc1 = nn.Conv2d(in_features, hidden_features, 1) + self.dwconv = nn.Conv2d( + hidden_features, + hidden_features, + 3, + 1, + 1, + bias=True, + groups=hidden_features) + self.act = build_activation_layer(act_cfg) + self.fc2 = nn.Conv2d(hidden_features, out_features, 1) + self.drop = nn.Dropout(drop) + + def forward(self, x): + """Forward function.""" + + x = self.fc1(x) + + x = self.dwconv(x) + x = self.act(x) + x = self.drop(x) + x = self.fc2(x) + x = self.drop(x) + + return x + + +class StemConv(BaseModule): + """Stem Block at the beginning of Semantic Branch. + + Args: + in_channels (int): The dimension of input channels. + out_channels (int): The dimension of output channels. + act_cfg (dict): Config dict for activation layer in block. + Default: dict(type='GELU'). + norm_cfg (dict): Config dict for normalization layer. + Defaults: dict(type='SyncBN', requires_grad=True). + """ + + def __init__(self, + in_channels, + out_channels, + act_cfg=dict(type='GELU'), + norm_cfg=dict(type='SyncBN', requires_grad=True)): + super().__init__() + + self.proj = nn.Sequential( + nn.Conv2d( + in_channels, + out_channels // 2, + kernel_size=(3, 3), + stride=(2, 2), + padding=(1, 1)), + build_norm_layer(norm_cfg, out_channels // 2)[1], + build_activation_layer(act_cfg), + nn.Conv2d( + out_channels // 2, + out_channels, + kernel_size=(3, 3), + stride=(2, 2), + padding=(1, 1)), + build_norm_layer(norm_cfg, out_channels)[1], + ) + + def forward(self, x): + """Forward function.""" + + x = self.proj(x) + _, _, H, W = x.size() + x = x.flatten(2).transpose(1, 2) + return x, H, W + + +class MSCAAttention(BaseModule): + """Attention Module in Multi-Scale Convolutional Attention Module (MSCA). + + Args: + channels (int): The dimension of channels. + kernel_sizes (list): The size of attention + kernel. Defaults: [5, [1, 7], [1, 11], [1, 21]]. + paddings (list): The number of + corresponding padding value in attention module. + Defaults: [2, [0, 3], [0, 5], [0, 10]]. + """ + + def __init__(self, + channels, + kernel_sizes=[5, [1, 7], [1, 11], [1, 21]], + paddings=[2, [0, 3], [0, 5], [0, 10]]): + super().__init__() + self.conv0 = nn.Conv2d( + channels, + channels, + kernel_size=kernel_sizes[0], + padding=paddings[0], + groups=channels) + for i, (kernel_size, + padding) in enumerate(zip(kernel_sizes[1:], paddings[1:])): + kernel_size_ = [kernel_size, kernel_size[::-1]] + padding_ = [padding, padding[::-1]] + conv_name = [f'conv{i}_1', f'conv{i}_2'] + for i_kernel, i_pad, i_conv in zip(kernel_size_, padding_, + conv_name): + self.add_module( + i_conv, + nn.Conv2d( + channels, + channels, + tuple(i_kernel), + padding=i_pad, + groups=channels)) + self.conv3 = nn.Conv2d(channels, channels, 1) + + def forward(self, x): + """Forward function.""" + + u = x.clone() + + attn = self.conv0(x) + + # Multi-Scale Feature extraction + attn_0 = self.conv0_1(attn) + attn_0 = self.conv0_2(attn_0) + + attn_1 = self.conv1_1(attn) + attn_1 = self.conv1_2(attn_1) + + attn_2 = self.conv2_1(attn) + attn_2 = self.conv2_2(attn_2) + + attn = attn + attn_0 + attn_1 + attn_2 + # Channel Mixing + attn = self.conv3(attn) + + # Convolutional Attention + x = attn * u + + return x + + +class MSCASpatialAttention(BaseModule): + """Spatial Attention Module in Multi-Scale Convolutional Attention Module + (MSCA). + + Args: + in_channels (int): The dimension of channels. + attention_kernel_sizes (list): The size of attention + kernel. Defaults: [5, [1, 7], [1, 11], [1, 21]]. + attention_kernel_paddings (list): The number of + corresponding padding value in attention module. + Defaults: [2, [0, 3], [0, 5], [0, 10]]. + act_cfg (dict): Config dict for activation layer in block. + Default: dict(type='GELU'). + """ + + def __init__(self, + in_channels, + attention_kernel_sizes=[5, [1, 7], [1, 11], [1, 21]], + attention_kernel_paddings=[2, [0, 3], [0, 5], [0, 10]], + act_cfg=dict(type='GELU')): + super().__init__() + self.proj_1 = nn.Conv2d(in_channels, in_channels, 1) + self.activation = build_activation_layer(act_cfg) + self.spatial_gating_unit = MSCAAttention(in_channels, + attention_kernel_sizes, + attention_kernel_paddings) + self.proj_2 = nn.Conv2d(in_channels, in_channels, 1) + + def forward(self, x): + """Forward function.""" + + shorcut = x.clone() + x = self.proj_1(x) + x = self.activation(x) + x = self.spatial_gating_unit(x) + x = self.proj_2(x) + x = x + shorcut + return x + + +class MSCABlock(BaseModule): + """Basic Multi-Scale Convolutional Attention Block. It leverage the large- + kernel attention (LKA) mechanism to build both channel and spatial + attention. In each branch, it uses two depth-wise strip convolutions to + approximate standard depth-wise convolutions with large kernels. The kernel + size for each branch is set to 7, 11, and 21, respectively. + + Args: + channels (int): The dimension of channels. + attention_kernel_sizes (list): The size of attention + kernel. Defaults: [5, [1, 7], [1, 11], [1, 21]]. + attention_kernel_paddings (list): The number of + corresponding padding value in attention module. + Defaults: [2, [0, 3], [0, 5], [0, 10]]. + mlp_ratio (float): The ratio of multiple input dimension to + calculate hidden feature in MLP layer. Defaults: 4.0. + drop (float): The number of dropout rate in MLP block. + Defaults: 0.0. + drop_path (float): The ratio of drop paths. + Defaults: 0.0. + act_cfg (dict): Config dict for activation layer in block. + Default: dict(type='GELU'). + norm_cfg (dict): Config dict for normalization layer. + Defaults: dict(type='SyncBN', requires_grad=True). + """ + + def __init__(self, + channels, + attention_kernel_sizes=[5, [1, 7], [1, 11], [1, 21]], + attention_kernel_paddings=[2, [0, 3], [0, 5], [0, 10]], + mlp_ratio=4., + drop=0., + drop_path=0., + act_cfg=dict(type='GELU'), + norm_cfg=dict(type='SyncBN', requires_grad=True)): + super().__init__() + self.norm1 = build_norm_layer(norm_cfg, channels)[1] + self.attn = MSCASpatialAttention(channels, attention_kernel_sizes, + attention_kernel_paddings, act_cfg) + self.drop_path = DropPath( + drop_path) if drop_path > 0. else nn.Identity() + self.norm2 = build_norm_layer(norm_cfg, channels)[1] + mlp_hidden_channels = int(channels * mlp_ratio) + self.mlp = Mlp( + in_features=channels, + hidden_features=mlp_hidden_channels, + act_cfg=act_cfg, + drop=drop) + layer_scale_init_value = 1e-2 + self.layer_scale_1 = nn.Parameter( + layer_scale_init_value * torch.ones(channels), requires_grad=True) + self.layer_scale_2 = nn.Parameter( + layer_scale_init_value * torch.ones(channels), requires_grad=True) + + def forward(self, x, H, W): + """Forward function.""" + + B, N, C = x.shape + x = x.permute(0, 2, 1).view(B, C, H, W) + x = x + self.drop_path( + self.layer_scale_1.unsqueeze(-1).unsqueeze(-1) * + self.attn(self.norm1(x))) + x = x + self.drop_path( + self.layer_scale_2.unsqueeze(-1).unsqueeze(-1) * + self.mlp(self.norm2(x))) + x = x.view(B, C, N).permute(0, 2, 1) + return x + + +class OverlapPatchEmbed(BaseModule): + """Image to Patch Embedding. + + Args: + patch_size (int): The patch size. + Defaults: 7. + stride (int): Stride of the convolutional layer. + Default: 4. + in_channels (int): The number of input channels. + Defaults: 3. + embed_dims (int): The dimensions of embedding. + Defaults: 768. + norm_cfg (dict): Config dict for normalization layer. + Defaults: dict(type='SyncBN', requires_grad=True). + """ + + def __init__(self, + patch_size=7, + stride=4, + in_channels=3, + embed_dim=768, + norm_cfg=dict(type='SyncBN', requires_grad=True)): + super().__init__() + + self.proj = nn.Conv2d( + in_channels, + embed_dim, + kernel_size=patch_size, + stride=stride, + padding=patch_size // 2) + self.norm = build_norm_layer(norm_cfg, embed_dim)[1] + + def forward(self, x): + """Forward function.""" + + x = self.proj(x) + _, _, H, W = x.shape + x = self.norm(x) + + x = x.flatten(2).transpose(1, 2) + + return x, H, W + + +@MODELS.register_module() +class MSCAN(BaseModule): + """SegNeXt Multi-Scale Convolutional Attention Network (MCSAN) backbone. + + This backbone is the implementation of `SegNeXt: Rethinking + Convolutional Attention Design for Semantic + Segmentation `_. + Inspiration from https://github.com/visual-attention-network/segnext. + + Args: + in_channels (int): The number of input channels. Defaults: 3. + embed_dims (list[int]): Embedding dimension. + Defaults: [64, 128, 256, 512]. + mlp_ratios (list[int]): Ratio of mlp hidden dim to embedding dim. + Defaults: [4, 4, 4, 4]. + drop_rate (float): Dropout rate. Defaults: 0. + drop_path_rate (float): Stochastic depth rate. Defaults: 0. + depths (list[int]): Depths of each Swin Transformer stage. + Default: [3, 4, 6, 3]. + num_stages (int): MSCAN stages. Default: 4. + attention_kernel_sizes (list): Size of attention kernel in + Attention Module (Figure 2(b) of original paper). + Defaults: [5, [1, 7], [1, 11], [1, 21]]. + attention_kernel_paddings (list): Size of attention paddings + in Attention Module (Figure 2(b) of original paper). + Defaults: [2, [0, 3], [0, 5], [0, 10]]. + norm_cfg (dict): Config of norm layers. + Defaults: dict(type='SyncBN', requires_grad=True). + pretrained (str, optional): model pretrained path. + Default: None. + init_cfg (dict or list[dict], optional): Initialization config dict. + Default: None. + """ + + def __init__(self, + in_channels=3, + embed_dims=[64, 128, 256, 512], + mlp_ratios=[4, 4, 4, 4], + drop_rate=0., + drop_path_rate=0., + depths=[3, 4, 6, 3], + num_stages=4, + attention_kernel_sizes=[5, [1, 7], [1, 11], [1, 21]], + attention_kernel_paddings=[2, [0, 3], [0, 5], [0, 10]], + act_cfg=dict(type='GELU'), + norm_cfg=dict(type='SyncBN', requires_grad=True), + pretrained=None, + init_cfg=None): + super().__init__(init_cfg=init_cfg) + + assert not (init_cfg and pretrained), \ + 'init_cfg and pretrained cannot be set at the same time' + if isinstance(pretrained, str): + warnings.warn('DeprecationWarning: pretrained is deprecated, ' + 'please use "init_cfg" instead') + self.init_cfg = dict(type='Pretrained', checkpoint=pretrained) + elif pretrained is not None: + raise TypeError('pretrained must be a str or None') + + self.depths = depths + self.num_stages = num_stages + + dpr = [ + x.item() for x in torch.linspace(0, drop_path_rate, sum(depths)) + ] # stochastic depth decay rule + cur = 0 + + for i in range(num_stages): + if i == 0: + patch_embed = StemConv(3, embed_dims[0], norm_cfg=norm_cfg) + else: + patch_embed = OverlapPatchEmbed( + patch_size=7 if i == 0 else 3, + stride=4 if i == 0 else 2, + in_channels=in_channels if i == 0 else embed_dims[i - 1], + embed_dim=embed_dims[i], + norm_cfg=norm_cfg) + + block = nn.ModuleList([ + MSCABlock( + channels=embed_dims[i], + attention_kernel_sizes=attention_kernel_sizes, + attention_kernel_paddings=attention_kernel_paddings, + mlp_ratio=mlp_ratios[i], + drop=drop_rate, + drop_path=dpr[cur + j], + act_cfg=act_cfg, + norm_cfg=norm_cfg) for j in range(depths[i]) + ]) + norm = nn.LayerNorm(embed_dims[i]) + cur += depths[i] + + setattr(self, f'patch_embed{i + 1}', patch_embed) + setattr(self, f'block{i + 1}', block) + setattr(self, f'norm{i + 1}', norm) + + def init_weights(self): + """Initialize modules of MSCAN.""" + + print('init cfg', self.init_cfg) + if self.init_cfg is None: + for m in self.modules(): + if isinstance(m, nn.Linear): + trunc_normal_init(m, std=.02, bias=0.) + elif isinstance(m, nn.LayerNorm): + constant_init(m, val=1.0, bias=0.) + elif isinstance(m, nn.Conv2d): + fan_out = m.kernel_size[0] * m.kernel_size[ + 1] * m.out_channels + fan_out //= m.groups + normal_init( + m, mean=0, std=math.sqrt(2.0 / fan_out), bias=0) + else: + super().init_weights() + + def forward(self, x): + """Forward function.""" + + B = x.shape[0] + outs = [] + + for i in range(self.num_stages): + patch_embed = getattr(self, f'patch_embed{i + 1}') + block = getattr(self, f'block{i + 1}') + norm = getattr(self, f'norm{i + 1}') + x, H, W = patch_embed(x) + for blk in block: + x = blk(x, H, W) + x = norm(x) + x = x.reshape(B, H, W, -1).permute(0, 3, 1, 2).contiguous() + outs.append(x) + + return outs diff --git a/mmseg/models/decode_heads/__init__.py b/mmseg/models/decode_heads/__init__.py index e6eeafc248..18235456bc 100644 --- a/mmseg/models/decode_heads/__init__.py +++ b/mmseg/models/decode_heads/__init__.py @@ -12,6 +12,7 @@ from .fcn_head import FCNHead from .fpn_head import FPNHead from .gc_head import GCHead +from .ham_head import LightHamHead from .isa_head import ISAHead from .knet_head import IterativeDecodeHead, KernelUpdateHead, KernelUpdator from .lraspp_head import LRASPPHead @@ -40,5 +41,5 @@ 'SETRMLAHead', 'DPTHead', 'SETRMLAHead', 'SegmenterMaskTransformerHead', 'SegformerHead', 'ISAHead', 'STDCHead', 'IterativeDecodeHead', 'KernelUpdateHead', 'KernelUpdator', 'MaskFormerHead', 'Mask2FormerHead', - 'PIDHead' + 'LightHamHead', 'PIDHead' ] diff --git a/mmseg/models/decode_heads/ham_head.py b/mmseg/models/decode_heads/ham_head.py new file mode 100644 index 0000000000..d80025f77d --- /dev/null +++ b/mmseg/models/decode_heads/ham_head.py @@ -0,0 +1,257 @@ +# Copyright (c) OpenMMLab. All rights reserved. +# Originally from https://github.com/visual-attention-network/segnext +# Licensed under the Apache License, Version 2.0 (the "License") +import torch +import torch.nn as nn +import torch.nn.functional as F +from mmcv.cnn import ConvModule + +from mmseg.registry import MODELS +from ..utils import resize +from .decode_head import BaseDecodeHead + + +class Matrix_Decomposition_2D_Base(nn.Module): + """Base class of 2D Matrix Decomposition. + + Args: + MD_S (int): The number of spatial coefficient in + Matrix Decomposition, it may be used for calculation + of the number of latent dimension D in Matrix + Decomposition. Defaults: 1. + MD_R (int): The number of latent dimension R in + Matrix Decomposition. Defaults: 64. + train_steps (int): The number of iteration steps in + Multiplicative Update (MU) rule to solve Non-negative + Matrix Factorization (NMF) in training. Defaults: 6. + eval_steps (int): The number of iteration steps in + Multiplicative Update (MU) rule to solve Non-negative + Matrix Factorization (NMF) in evaluation. Defaults: 7. + inv_t (int): Inverted multiple number to make coefficient + smaller in softmax. Defaults: 100. + rand_init (bool): Whether to initialize randomly. + Defaults: True. + """ + + def __init__(self, + MD_S=1, + MD_R=64, + train_steps=6, + eval_steps=7, + inv_t=100, + rand_init=True): + super().__init__() + + self.S = MD_S + self.R = MD_R + + self.train_steps = train_steps + self.eval_steps = eval_steps + + self.inv_t = inv_t + + self.rand_init = rand_init + + def _build_bases(self, B, S, D, R, cuda=False): + raise NotImplementedError + + def local_step(self, x, bases, coef): + raise NotImplementedError + + def local_inference(self, x, bases): + # (B * S, D, N)^T @ (B * S, D, R) -> (B * S, N, R) + coef = torch.bmm(x.transpose(1, 2), bases) + coef = F.softmax(self.inv_t * coef, dim=-1) + + steps = self.train_steps if self.training else self.eval_steps + for _ in range(steps): + bases, coef = self.local_step(x, bases, coef) + + return bases, coef + + def compute_coef(self, x, bases, coef): + raise NotImplementedError + + def forward(self, x, return_bases=False): + """Forward Function.""" + B, C, H, W = x.shape + + # (B, C, H, W) -> (B * S, D, N) + D = C // self.S + N = H * W + x = x.view(B * self.S, D, N) + cuda = 'cuda' in str(x.device) + if not self.rand_init and not hasattr(self, 'bases'): + bases = self._build_bases(1, self.S, D, self.R, cuda=cuda) + self.register_buffer('bases', bases) + + # (S, D, R) -> (B * S, D, R) + if self.rand_init: + bases = self._build_bases(B, self.S, D, self.R, cuda=cuda) + else: + bases = self.bases.repeat(B, 1, 1) + + bases, coef = self.local_inference(x, bases) + + # (B * S, N, R) + coef = self.compute_coef(x, bases, coef) + + # (B * S, D, R) @ (B * S, N, R)^T -> (B * S, D, N) + x = torch.bmm(bases, coef.transpose(1, 2)) + + # (B * S, D, N) -> (B, C, H, W) + x = x.view(B, C, H, W) + + return x + + +class NMF2D(Matrix_Decomposition_2D_Base): + """Non-negative Matrix Factorization (NMF) module. + + It is inherited from ``Matrix_Decomposition_2D_Base`` module. + """ + + def __init__(self, args=dict()): + super().__init__(**args) + + self.inv_t = 1 + + def _build_bases(self, B, S, D, R, cuda=False): + """Build bases in initialization.""" + if cuda: + bases = torch.rand((B * S, D, R)).cuda() + else: + bases = torch.rand((B * S, D, R)) + + bases = F.normalize(bases, dim=1) + + return bases + + def local_step(self, x, bases, coef): + """Local step in iteration to renew bases and coefficient.""" + # (B * S, D, N)^T @ (B * S, D, R) -> (B * S, N, R) + numerator = torch.bmm(x.transpose(1, 2), bases) + # (B * S, N, R) @ [(B * S, D, R)^T @ (B * S, D, R)] -> (B * S, N, R) + denominator = coef.bmm(bases.transpose(1, 2).bmm(bases)) + # Multiplicative Update + coef = coef * numerator / (denominator + 1e-6) + + # (B * S, D, N) @ (B * S, N, R) -> (B * S, D, R) + numerator = torch.bmm(x, coef) + # (B * S, D, R) @ [(B * S, N, R)^T @ (B * S, N, R)] -> (B * S, D, R) + denominator = bases.bmm(coef.transpose(1, 2).bmm(coef)) + # Multiplicative Update + bases = bases * numerator / (denominator + 1e-6) + + return bases, coef + + def compute_coef(self, x, bases, coef): + """Compute coefficient.""" + # (B * S, D, N)^T @ (B * S, D, R) -> (B * S, N, R) + numerator = torch.bmm(x.transpose(1, 2), bases) + # (B * S, N, R) @ (B * S, D, R)^T @ (B * S, D, R) -> (B * S, N, R) + denominator = coef.bmm(bases.transpose(1, 2).bmm(bases)) + # multiplication update + coef = coef * numerator / (denominator + 1e-6) + + return coef + + +class Hamburger(nn.Module): + """Hamburger Module. It consists of one slice of "ham" (matrix + decomposition) and two slices of "bread" (linear transformation). + + Args: + ham_channels (int): Input and output channels of feature. + ham_kwargs (dict): Config of matrix decomposition module. + norm_cfg (dict | None): Config of norm layers. + """ + + def __init__(self, + ham_channels=512, + ham_kwargs=dict(), + norm_cfg=None, + **kwargs): + super().__init__() + + self.ham_in = ConvModule( + ham_channels, ham_channels, 1, norm_cfg=None, act_cfg=None) + + self.ham = NMF2D(ham_kwargs) + + self.ham_out = ConvModule( + ham_channels, ham_channels, 1, norm_cfg=norm_cfg, act_cfg=None) + + def forward(self, x): + enjoy = self.ham_in(x) + enjoy = F.relu(enjoy, inplace=True) + enjoy = self.ham(enjoy) + enjoy = self.ham_out(enjoy) + ham = F.relu(x + enjoy, inplace=True) + + return ham + + +@MODELS.register_module() +class LightHamHead(BaseDecodeHead): + """SegNeXt decode head. + + This decode head is the implementation of `SegNeXt: Rethinking + Convolutional Attention Design for Semantic + Segmentation `_. + Inspiration from https://github.com/visual-attention-network/segnext. + + Specifically, LightHamHead is inspired by HamNet from + `Is Attention Better Than Matrix Decomposition? + `. + + Args: + ham_channels (int): input channels for Hamburger. + Defaults: 512. + ham_kwargs (int): kwagrs for Ham. Defaults: dict(). + """ + + def __init__(self, ham_channels=512, ham_kwargs=dict(), **kwargs): + super().__init__(input_transform='multiple_select', **kwargs) + self.ham_channels = ham_channels + + self.squeeze = ConvModule( + sum(self.in_channels), + self.ham_channels, + 1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg) + + self.hamburger = Hamburger(ham_channels, ham_kwargs, **kwargs) + + self.align = ConvModule( + self.ham_channels, + self.channels, + 1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg) + + def forward(self, inputs): + """Forward function.""" + inputs = self._transform_inputs(inputs) + + inputs = [ + resize( + level, + size=inputs[0].shape[2:], + mode='bilinear', + align_corners=self.align_corners) for level in inputs + ] + + inputs = torch.cat(inputs, dim=1) + # apply a conv block to squeeze feature map + x = self.squeeze(inputs) + # apply hamburger module + x = self.hamburger(x) + + # apply a conv block to align feature map + output = self.align(x) + output = self.cls_seg(output) + return output diff --git a/model-index.yml b/model-index.yml index be7210e120..130031a303 100644 --- a/model-index.yml +++ b/model-index.yml @@ -39,6 +39,7 @@ Import: - configs/resnest/resnest.yml - configs/segformer/segformer.yml - configs/segmenter/segmenter.yml +- configs/segnext/segnext.yml - configs/sem_fpn/sem_fpn.yml - configs/setr/setr.yml - configs/stdc/stdc.yml diff --git a/tests/test_models/test_backbones/test_mscan.py b/tests/test_models/test_backbones/test_mscan.py new file mode 100644 index 0000000000..84dfb8e450 --- /dev/null +++ b/tests/test_models/test_backbones/test_mscan.py @@ -0,0 +1,69 @@ +# Copyright (c) OpenMMLab. All rights reserved. +import torch + +from mmseg.models.backbones import MSCAN +from mmseg.models.backbones.mscan import (MSCAAttention, MSCASpatialAttention, + OverlapPatchEmbed, StemConv) + + +def test_mscan_backbone(): + # Test MSCAN Standard Forward + model = MSCAN( + embed_dims=[8, 16, 32, 64], + norm_cfg=dict(type='BN', requires_grad=True)) + model.init_weights() + model.train() + batch_size = 2 + imgs = torch.randn(batch_size, 3, 64, 128) + feat = model(imgs) + + assert len(feat) == 4 + # output for segment Head + assert feat[0].shape == torch.Size([batch_size, 8, 16, 32]) + assert feat[1].shape == torch.Size([batch_size, 16, 8, 16]) + assert feat[2].shape == torch.Size([batch_size, 32, 4, 8]) + assert feat[3].shape == torch.Size([batch_size, 64, 2, 4]) + + # Test input with rare shape + batch_size = 2 + imgs = torch.randn(batch_size, 3, 95, 27) + feat = model(imgs) + assert len(feat) == 4 + + +def test_mscan_overlap_patch_embed_module(): + x_overlap_patch_embed = OverlapPatchEmbed( + norm_cfg=dict(type='BN', requires_grad=True)) + assert x_overlap_patch_embed.proj.in_channels == 3 + assert x_overlap_patch_embed.norm.weight.shape == torch.Size([768]) + x = torch.randn(2, 3, 16, 32) + x_out, H, W = x_overlap_patch_embed(x) + assert x_out.shape == torch.Size([2, 32, 768]) + + +def test_mscan_spatial_attention_module(): + x_spatial_attention = MSCASpatialAttention(8) + assert x_spatial_attention.proj_1.kernel_size == (1, 1) + assert x_spatial_attention.proj_2.stride == (1, 1) + x = torch.randn(2, 8, 16, 32) + x_out = x_spatial_attention(x) + assert x_out.shape == torch.Size([2, 8, 16, 32]) + + +def test_mscan_attention_module(): + x_attention = MSCAAttention(8) + assert x_attention.conv0.weight.shape[0] == 8 + assert x_attention.conv3.kernel_size == (1, 1) + x = torch.randn(2, 8, 16, 32) + x_out = x_attention(x) + assert x_out.shape == torch.Size([2, 8, 16, 32]) + + +def test_mscan_stem_module(): + x_stem = StemConv(8, 8, norm_cfg=dict(type='BN', requires_grad=True)) + assert x_stem.proj[0].weight.shape[0] == 4 + assert x_stem.proj[-1].weight.shape[0] == 8 + x = torch.randn(2, 8, 16, 32) + x_out, H, W = x_stem(x) + assert x_out.shape == torch.Size([2, 32, 8]) + assert (H, W) == (4, 8) diff --git a/tests/test_models/test_heads/test_ham_head.py b/tests/test_models/test_heads/test_ham_head.py new file mode 100644 index 0000000000..f802d2d8db --- /dev/null +++ b/tests/test_models/test_heads/test_ham_head.py @@ -0,0 +1,44 @@ +# Copyright (c) OpenMMLab. All rights reserved. +import torch + +from mmseg.models.decode_heads import LightHamHead +from .utils import _conv_has_norm, to_cuda + +ham_norm_cfg = dict(type='GN', num_groups=32, requires_grad=True) + + +def test_ham_head(): + + # test without sync_bn + head = LightHamHead( + in_channels=[16, 32, 64], + in_index=[1, 2, 3], + channels=64, + ham_channels=64, + dropout_ratio=0.1, + num_classes=19, + norm_cfg=ham_norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + ham_kwargs=dict( + MD_S=1, + MD_R=64, + train_steps=6, + eval_steps=7, + inv_t=100, + rand_init=True)) + assert not _conv_has_norm(head, sync_bn=False) + + inputs = [ + torch.randn(1, 8, 32, 32), + torch.randn(1, 16, 16, 16), + torch.randn(1, 32, 8, 8), + torch.randn(1, 64, 4, 4) + ] + if torch.cuda.is_available(): + head, inputs = to_cuda(head, inputs) + assert head.in_channels == [16, 32, 64] + assert head.hamburger.ham_in.in_channels == 64 + outputs = head(inputs) + assert outputs.shape == (1, head.num_classes, 16, 16) From 6d63e77600c61e10b7f55c9056e3da359093ef91 Mon Sep 17 00:00:00 2001 From: Haolan He <61172629+BLUE-coconut@users.noreply.github.com> Date: Fri, 17 Mar 2023 17:35:38 +0800 Subject: [PATCH 19/32] [Docs] add deeplabv3 model structure (#2426) as title --- configs/deeplabv3/README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/configs/deeplabv3/README.md b/configs/deeplabv3/README.md index 4c80ffaf91..b37836ab21 100644 --- a/configs/deeplabv3/README.md +++ b/configs/deeplabv3/README.md @@ -22,6 +22,11 @@ In this work, we revisit atrous convolution, a powerful tool to explicitly adjus +
    +DEEPLABv3_ResNet-D8 +DEEPLABv3_ResNet-D8 model structure +
    + ## Citation ```bibtext From f6de1aad81967e04961600288e58b5369332b75d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E6=98=95=E8=BE=B0?= Date: Fri, 17 Mar 2023 19:12:58 +0800 Subject: [PATCH 20/32] [Dev] update update-model-index pre-commit hook (#2667) --- .dev/md2yml.py | 317 ---- .dev/update_model_index.py | 292 ++++ .pre-commit-config.yaml | 5 +- configs/ann/README.md | 68 +- configs/ann/ann.yml | 305 ---- configs/ann/metafile.yaml | 391 +++++ configs/apcnet/README.md | 50 +- configs/apcnet/apcnet.yml | 232 --- configs/apcnet/metafile.yaml | 296 ++++ configs/beit/README.md | 34 +- configs/beit/beit.yml | 45 - configs/beit/metafile.yaml | 49 + configs/bisenetv1/README.md | 56 +- configs/bisenetv1/bisenetv1.yml | 234 --- configs/bisenetv1/metafile.yaml | 275 ++++ configs/bisenetv2/README.md | 36 +- configs/bisenetv2/bisenetv2.yml | 88 -- configs/bisenetv2/metafile.yaml | 114 ++ configs/ccnet/README.md | 68 +- configs/ccnet/ccnet.yml | 305 ---- configs/ccnet/metafile.yaml | 391 +++++ configs/cgnet/README.md | 20 +- configs/cgnet/cgnet.yml | 59 - configs/cgnet/metafile.yaml | 61 + configs/convnext/README.md | 38 +- configs/convnext/convnext.yml | 133 -- configs/convnext/metafile.yaml | 145 ++ configs/danet/README.md | 68 +- configs/danet/danet.yml | 301 ---- configs/danet/metafile.yaml | 387 +++++ configs/deeplabv3/README.md | 138 +- configs/deeplabv3/deeplabv3.yml | 756 ---------- configs/deeplabv3/metafile.yaml | 985 +++++++++++++ configs/deeplabv3plus/README.md | 144 +- configs/deeplabv3plus/deeplabv3plus.yml | 872 ----------- configs/deeplabv3plus/metafile.yaml | 1041 +++++++++++++ configs/dmnet/README.md | 50 +- configs/dmnet/dmnet.yml | 232 --- configs/dmnet/metafile.yaml | 296 ++++ configs/dnlnet/README.md | 52 +- configs/dnlnet/dnlnet.yml | 228 --- configs/dnlnet/metafile.yaml | 292 ++++ configs/dpt/README.md | 44 +- configs/dpt/dpt.yml | 37 - configs/dpt/metafile.yaml | 37 + configs/emanet/README.md | 24 +- configs/emanet/emanet.yml | 103 -- configs/emanet/metafile.yaml | 109 ++ configs/encnet/README.md | 50 +- configs/encnet/encnet.yml | 232 --- configs/encnet/metafile.yaml | 296 ++++ configs/erfnet/README.md | 34 +- configs/erfnet/erfnet.yml | 37 - configs/erfnet/metafile.yaml | 37 + configs/fastfcn/README.md | 56 +- configs/fastfcn/fastfcn.yml | 235 --- configs/fastfcn/metafile.yaml | 311 ++++ configs/fastscnn/README.md | 18 +- .../fastscnn/{fastscnn.yml => metafile.yaml} | 36 +- configs/fcn/README.md | 134 +- configs/fcn/fcn.yml | 827 ----------- configs/fcn/metafile.yaml | 997 +++++++++++++ configs/gcnet/README.md | 68 +- configs/gcnet/gcnet.yml | 305 ---- configs/gcnet/metafile.yaml | 391 +++++ configs/hrnet/README.md | 134 +- configs/hrnet/hrnet.yml | 695 --------- configs/hrnet/metafile.yaml | 874 +++++++++++ configs/icnet/README.md | 44 +- configs/icnet/icnet.yml | 207 --- configs/icnet/metafile.yaml | 298 ++++ configs/isanet/README.md | 68 +- configs/isanet/isanet.yml | 369 ----- configs/isanet/metafile.yaml | 399 +++++ configs/knet/README.md | 40 +- configs/knet/knet.yml | 169 --- configs/knet/metafile.yaml | 188 +++ configs/mae/README.md | 30 +- configs/mae/mae.yml | 23 - configs/mae/metafile.yaml | 25 + configs/mask2former/README.md | 68 +- configs/mask2former/mask2former.yml | 290 ---- configs/mask2former/metafile.yaml | 314 ++++ configs/maskformer/README.md | 38 +- configs/maskformer/maskformer.yml | 101 -- configs/maskformer/metafile.yaml | 111 ++ configs/mobilenet_v2/README.md | 42 +- configs/mobilenet_v2/metafile.yaml | 186 +++ configs/mobilenet_v2/mobilenet_v2.yml | 170 --- configs/mobilenet_v3/README.md | 24 +- configs/mobilenet_v3/metafile.yaml | 109 ++ configs/mobilenet_v3/mobilenet_v3.yml | 103 -- configs/nonlocal_net/README.md | 68 +- configs/nonlocal_net/metafile.yaml | 387 +++++ configs/nonlocal_net/nonlocal_net.yml | 301 ---- configs/ocrnet/README.md | 98 +- configs/ocrnet/metafile.yaml | 577 ++++++++ configs/ocrnet/ocrnet.yml | 438 ------ configs/pidnet/README.md | 10 +- configs/pidnet/metafile.yaml | 85 ++ configs/pidnet/pidnet.yml | 81 - configs/point_rend/README.md | 34 +- configs/point_rend/metafile.yaml | 110 ++ configs/point_rend/point_rend.yml | 104 -- configs/poolformer/README.md | 16 +- configs/poolformer/metafile.yaml | 116 ++ configs/poolformer/poolformer.yml | 106 -- configs/psanet/README.md | 68 +- configs/psanet/metafile.yaml | 391 +++++ configs/psanet/psanet.yml | 305 ---- configs/pspnet/README.md | 194 +-- configs/pspnet/metafile.yaml | 1303 +++++++++++++++++ configs/pspnet/pspnet.yml | 1077 -------------- configs/resnest/README.md | 42 +- configs/resnest/metafile.yaml | 193 +++ configs/resnest/resnest.yml | 177 --- configs/segformer/README.md | 58 +- configs/segformer/metafile.yaml | 340 +++++ configs/segformer/segformer.yml | 303 ---- configs/segmenter/README.md | 50 +- configs/segmenter/metafile.yaml | 138 ++ configs/segmenter/segmenter.yml | 125 -- configs/segnext/README.md | 12 +- configs/segnext/metafile.yaml | 109 ++ configs/segnext/segnext.yml | 103 -- configs/sem_fpn/README.md | 34 +- configs/sem_fpn/metafile.yaml | 110 ++ configs/sem_fpn/sem_fpn.yml | 104 -- configs/setr/README.md | 46 +- configs/setr/metafile.yaml | 197 +++ configs/setr/setr.yml | 164 --- configs/stdc/README.md | 38 +- configs/stdc/metafile.yaml | 107 ++ configs/stdc/stdc.yml | 87 -- configs/swin/README.md | 40 +- configs/swin/metafile.yaml | 143 ++ configs/swin/swin.yml | 117 -- configs/twins/README.md | 52 +- configs/twins/metafile.yaml | 289 ++++ configs/twins/twins.yml | 265 ---- configs/unet/README.md | 98 +- configs/unet/metafile.yaml | 642 ++++++++ configs/unet/unet.yml | 377 ----- configs/upernet/README.md | 68 +- configs/upernet/metafile.yaml | 391 +++++ configs/upernet/upernet.yml | 305 ---- configs/vit/README.md | 50 +- configs/vit/metafile.yaml | 265 ++++ configs/vit/vit.yml | 243 --- ...n_mln_upernet_8xb2-160k_ade20k-512x512.py} | 0 model-index.yml | 98 +- 151 files changed, 17070 insertions(+), 14265 deletions(-) delete mode 100755 .dev/md2yml.py create mode 100755 .dev/update_model_index.py delete mode 100644 configs/ann/ann.yml create mode 100644 configs/ann/metafile.yaml delete mode 100644 configs/apcnet/apcnet.yml create mode 100644 configs/apcnet/metafile.yaml delete mode 100644 configs/beit/beit.yml create mode 100644 configs/beit/metafile.yaml delete mode 100644 configs/bisenetv1/bisenetv1.yml create mode 100644 configs/bisenetv1/metafile.yaml delete mode 100644 configs/bisenetv2/bisenetv2.yml create mode 100644 configs/bisenetv2/metafile.yaml delete mode 100644 configs/ccnet/ccnet.yml create mode 100644 configs/ccnet/metafile.yaml delete mode 100644 configs/cgnet/cgnet.yml create mode 100644 configs/cgnet/metafile.yaml delete mode 100644 configs/convnext/convnext.yml create mode 100644 configs/convnext/metafile.yaml delete mode 100644 configs/danet/danet.yml create mode 100644 configs/danet/metafile.yaml delete mode 100644 configs/deeplabv3/deeplabv3.yml create mode 100644 configs/deeplabv3/metafile.yaml delete mode 100644 configs/deeplabv3plus/deeplabv3plus.yml create mode 100644 configs/deeplabv3plus/metafile.yaml delete mode 100644 configs/dmnet/dmnet.yml create mode 100644 configs/dmnet/metafile.yaml delete mode 100644 configs/dnlnet/dnlnet.yml create mode 100644 configs/dnlnet/metafile.yaml delete mode 100644 configs/dpt/dpt.yml create mode 100644 configs/dpt/metafile.yaml delete mode 100644 configs/emanet/emanet.yml create mode 100644 configs/emanet/metafile.yaml delete mode 100644 configs/encnet/encnet.yml create mode 100644 configs/encnet/metafile.yaml delete mode 100644 configs/erfnet/erfnet.yml create mode 100644 configs/erfnet/metafile.yaml delete mode 100644 configs/fastfcn/fastfcn.yml create mode 100644 configs/fastfcn/metafile.yaml rename configs/fastscnn/{fastscnn.yml => metafile.yaml} (50%) delete mode 100644 configs/fcn/fcn.yml create mode 100644 configs/fcn/metafile.yaml delete mode 100644 configs/gcnet/gcnet.yml create mode 100644 configs/gcnet/metafile.yaml delete mode 100644 configs/hrnet/hrnet.yml create mode 100644 configs/hrnet/metafile.yaml delete mode 100644 configs/icnet/icnet.yml create mode 100644 configs/icnet/metafile.yaml delete mode 100644 configs/isanet/isanet.yml create mode 100644 configs/isanet/metafile.yaml delete mode 100644 configs/knet/knet.yml create mode 100644 configs/knet/metafile.yaml delete mode 100644 configs/mae/mae.yml create mode 100644 configs/mae/metafile.yaml delete mode 100644 configs/mask2former/mask2former.yml create mode 100644 configs/mask2former/metafile.yaml delete mode 100644 configs/maskformer/maskformer.yml create mode 100644 configs/maskformer/metafile.yaml create mode 100644 configs/mobilenet_v2/metafile.yaml delete mode 100644 configs/mobilenet_v2/mobilenet_v2.yml create mode 100644 configs/mobilenet_v3/metafile.yaml delete mode 100644 configs/mobilenet_v3/mobilenet_v3.yml create mode 100644 configs/nonlocal_net/metafile.yaml delete mode 100644 configs/nonlocal_net/nonlocal_net.yml create mode 100644 configs/ocrnet/metafile.yaml delete mode 100644 configs/ocrnet/ocrnet.yml create mode 100644 configs/pidnet/metafile.yaml delete mode 100644 configs/pidnet/pidnet.yml create mode 100644 configs/point_rend/metafile.yaml delete mode 100644 configs/point_rend/point_rend.yml create mode 100644 configs/poolformer/metafile.yaml delete mode 100644 configs/poolformer/poolformer.yml create mode 100644 configs/psanet/metafile.yaml delete mode 100644 configs/psanet/psanet.yml create mode 100644 configs/pspnet/metafile.yaml delete mode 100644 configs/pspnet/pspnet.yml create mode 100644 configs/resnest/metafile.yaml delete mode 100644 configs/resnest/resnest.yml create mode 100644 configs/segformer/metafile.yaml delete mode 100644 configs/segformer/segformer.yml create mode 100644 configs/segmenter/metafile.yaml delete mode 100644 configs/segmenter/segmenter.yml create mode 100644 configs/segnext/metafile.yaml delete mode 100644 configs/segnext/segnext.yml create mode 100644 configs/sem_fpn/metafile.yaml delete mode 100644 configs/sem_fpn/sem_fpn.yml create mode 100644 configs/setr/metafile.yaml delete mode 100644 configs/setr/setr.yml create mode 100644 configs/stdc/metafile.yaml delete mode 100644 configs/stdc/stdc.yml create mode 100644 configs/swin/metafile.yaml delete mode 100644 configs/swin/swin.yml create mode 100644 configs/twins/metafile.yaml delete mode 100644 configs/twins/twins.yml create mode 100644 configs/unet/metafile.yaml delete mode 100644 configs/unet/unet.yml create mode 100644 configs/upernet/metafile.yaml delete mode 100644 configs/upernet/upernet.yml create mode 100644 configs/vit/metafile.yaml delete mode 100644 configs/vit/vit.yml rename configs/vit/{vit_deit-s16-ln_mln_upernet_512x512_160k_ade20k-512x512.py => vit_deit-s16-ln_mln_upernet_8xb2-160k_ade20k-512x512.py} (100%) diff --git a/.dev/md2yml.py b/.dev/md2yml.py deleted file mode 100755 index fc9c67e470..0000000000 --- a/.dev/md2yml.py +++ /dev/null @@ -1,317 +0,0 @@ -#!/usr/bin/env python - -# Copyright (c) OpenMMLab. All rights reserved. -# This tool is used to update model-index.yml which is required by MIM, and -# will be automatically called as a pre-commit hook. The updating will be -# triggered if any change of model information (.md files in configs/) has been -# detected before a commit. - -import glob -import os -import os.path as osp -import re -import sys - -from lxml import etree -from mmengine.fileio import dump - -MMSEG_ROOT = osp.dirname(osp.dirname(osp.dirname(__file__))) - -COLLECTIONS = [ - 'ANN', 'APCNet', 'BiSeNetV1', 'BiSeNetV2', 'CCNet', 'CGNet', 'DANet', - 'DeepLabV3', 'DeepLabV3+', 'DMNet', 'DNLNet', 'DPT', 'EMANet', 'EncNet', - 'ERFNet', 'FastFCN', 'FastSCNN', 'FCN', 'GCNet', 'ICNet', 'ISANet', 'KNet', - 'NonLocalNet', 'OCRNet', 'PointRend', 'PSANet', 'PSPNet', 'Segformer', - 'Segmenter', 'FPN', 'SETR', 'STDC', 'UNet', 'UPerNet' -] -COLLECTIONS_TEMP = [] - - -def dump_yaml_and_check_difference(obj, filename, sort_keys=False): - """Dump object to a yaml file, and check if the file content is different - from the original. - - Args: - obj (any): The python object to be dumped. - filename (str): YAML filename to dump the object to. - sort_keys (str); Sort key by dictionary order. - Returns: - Bool: If the target YAML file is different from the original. - """ - - str_dump = dump(obj, None, file_format='yaml', sort_keys=sort_keys) - if osp.isfile(filename): - file_exists = True - with open(filename, encoding='utf-8') as f: - str_orig = f.read() - else: - file_exists = False - str_orig = None - - if file_exists and str_orig == str_dump: - is_different = False - else: - is_different = True - with open(filename, 'w', encoding='utf-8') as f: - f.write(str_dump) - - return is_different - - -def parse_md(md_file): - """Parse .md file and convert it to a .yml file which can be used for MIM. - - Args: - md_file (str): Path to .md file. - Returns: - Bool: If the target YAML file is different from the original. - """ - collection_name = osp.split(osp.dirname(md_file))[1] - configs = os.listdir(osp.dirname(md_file)) - - collection = dict( - Name=collection_name, - Metadata={'Training Data': []}, - Paper={ - 'URL': '', - 'Title': '' - }, - README=md_file, - Code={ - 'URL': '', - 'Version': '' - }) - collection.update({'Converted From': {'Weights': '', 'Code': ''}}) - models = [] - datasets = [] - paper_url = None - paper_title = None - code_url = None - code_version = None - repo_url = None - - # To avoid re-counting number of backbone model in OpenMMLab, - # if certain model in configs folder is backbone whose name is already - # recorded in MMClassification, then the `COLLECTION` dict of this model - # in MMSegmentation should be deleted, and `In Collection` in `Models` - # should be set with head or neck of this config file. - is_backbone = None - - with open(md_file, encoding='UTF-8') as md: - lines = md.readlines() - i = 0 - current_dataset = '' - while i < len(lines): - line = lines[i].strip() - # In latest README.md the title and url are in the third line. - if i == 2: - paper_url = lines[i].split('](')[1].split(')')[0] - paper_title = lines[i].split('](')[0].split('[')[1] - if len(line) == 0: - i += 1 - continue - elif line[:3] == ' List[str]: + """Get the list of collection names.""" + collection_name_list: List[str] = [] + for md_file in md_file_list: + with open(md_file) as f: + lines = f.readlines() + collection_name = lines[0].split('#')[1].strip() + collection_name_list.append(collection_name) + return collection_name_list + + +def get_md_file_list() -> Tuple[List[str], List[str]]: + """Get the list of md files.""" + md_file_list: List[str] = [] + md_dir_list: List[str] = [] + for root, _, files in os.walk(osp.join(MMSEG_ROOT, 'configs')): + for file in files: + if file.endswith('.md'): + md_file_list.append(osp.join(root, file)) + md_dir_list.append(root) + break + return md_file_list, md_dir_list + + +def get_model_info(md_file: str, config_dir: str, + collection_name_list: List[str]) -> Tuple[dict, str]: + """Get model information from md file.""" + datasets: List[str] = [] + models: List[dict] = [] + current_dataset: str = '' + paper_name: str = '' + paper_url: str = '' + code_url: str = '' + is_backbone: bool = False + is_dataset: bool = False + collection_name: str = '' + with open(md_file) as f: + lines: List[str] = f.readlines() + i: int = 0 + + while i < len(lines): + line: str = lines[i].strip() + if len(line) == 0: + i += 1 + continue + # get paper name and url + if re.match(r'> \[.*\]+\([a-zA-Z]+://[^\s]*\)', line): + paper_info = line.split('](') + paper_name = paper_info[0][paper_info[0].index('[') + 1:] + paper_url = paper_info[1][:len(paper_info[1]) - 1] + + # get code info + if 'Code Snippet' in line: + code_url = line.split('"')[1].split('"')[0] + + if line.startswith(' -
    - -
    -
    DEEPLABv3_ResNet-D8 DEEPLABv3_ResNet-D8 model structure
    -## Citation - -```bibtext -@article{chen2017rethinking, - title={Rethinking atrous convolution for semantic image segmentation}, - author={Chen, Liang-Chieh and Papandreou, George and Schroff, Florian and Adam, Hartwig}, - journal={arXiv preprint arXiv:1706.05587}, - year={2017} -} -``` - ## Results and models ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ---------------- | --------------- | --------- | ------: | -------- | -------------- | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| DeepLabV3 | R-50-D8 | 512x1024 | 40000 | 6.1 | 2.57 | 79.09 | 80.45 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x1024_40k_cityscapes/deeplabv3_r50-d8_512x1024_40k_cityscapes_20200605_022449-acadc2f8.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x1024_40k_cityscapes/deeplabv3_r50-d8_512x1024_40k_cityscapes_20200605_022449.log.json) | -| DeepLabV3 | R-101-D8 | 512x1024 | 40000 | 9.6 | 1.92 | 77.12 | 79.61 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x1024_40k_cityscapes/deeplabv3_r101-d8_512x1024_40k_cityscapes_20200605_012241-7fd3f799.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x1024_40k_cityscapes/deeplabv3_r101-d8_512x1024_40k_cityscapes_20200605_012241.log.json) | -| DeepLabV3 | R-50-D8 | 769x769 | 40000 | 6.9 | 1.11 | 78.58 | 79.89 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_769x769_40k_cityscapes/deeplabv3_r50-d8_769x769_40k_cityscapes_20200606_113723-7eda553c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_769x769_40k_cityscapes/deeplabv3_r50-d8_769x769_40k_cityscapes_20200606_113723.log.json) | -| DeepLabV3 | R-101-D8 | 769x769 | 40000 | 10.9 | 0.83 | 79.27 | 80.11 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_769x769_40k_cityscapes/deeplabv3_r101-d8_769x769_40k_cityscapes_20200606_113809-c64f889f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_769x769_40k_cityscapes/deeplabv3_r101-d8_769x769_40k_cityscapes_20200606_113809.log.json) | -| DeepLabV3 | R-18-D8 | 512x1024 | 80000 | 1.7 | 13.78 | 76.70 | 78.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r18-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18-d8_512x1024_80k_cityscapes/deeplabv3_r18-d8_512x1024_80k_cityscapes_20201225_021506-23dffbe2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18-d8_512x1024_80k_cityscapes/deeplabv3_r18-d8_512x1024_80k_cityscapes-20201225_021506.log.json) | -| DeepLabV3 | R-50-D8 | 512x1024 | 80000 | - | - | 79.32 | 80.57 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x1024_80k_cityscapes/deeplabv3_r50-d8_512x1024_80k_cityscapes_20200606_113404-b92cfdd4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x1024_80k_cityscapes/deeplabv3_r50-d8_512x1024_80k_cityscapes_20200606_113404.log.json) | -| DeepLabV3 | R-101-D8 | 512x1024 | 80000 | - | - | 80.20 | 81.21 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x1024_80k_cityscapes/deeplabv3_r101-d8_512x1024_80k_cityscapes_20200606_113503-9e428899.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x1024_80k_cityscapes/deeplabv3_r101-d8_512x1024_80k_cityscapes_20200606_113503.log.json) | -| DeepLabV3 (FP16) | R-101-D8 | 512x1024 | 80000 | 5.75 | 3.86 | 80.48 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb2-amp-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_fp16_512x1024_80k_cityscapes/deeplabv3_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230920-774d9cec.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_fp16_512x1024_80k_cityscapes/deeplabv3_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230920.log.json) | -| DeepLabV3 | R-18-D8 | 769x769 | 80000 | 1.9 | 5.55 | 76.60 | 78.26 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r18-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18-d8_769x769_80k_cityscapes/deeplabv3_r18-d8_769x769_80k_cityscapes_20201225_021506-6452126a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18-d8_769x769_80k_cityscapes/deeplabv3_r18-d8_769x769_80k_cityscapes-20201225_021506.log.json) | -| DeepLabV3 | R-50-D8 | 769x769 | 80000 | - | - | 79.89 | 81.06 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_769x769_80k_cityscapes/deeplabv3_r50-d8_769x769_80k_cityscapes_20200606_221338-788d6228.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_769x769_80k_cityscapes/deeplabv3_r50-d8_769x769_80k_cityscapes_20200606_221338.log.json) | -| DeepLabV3 | R-101-D8 | 769x769 | 80000 | - | - | 79.67 | 80.81 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_769x769_80k_cityscapes/deeplabv3_r101-d8_769x769_80k_cityscapes_20200607_013353-60e95418.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_769x769_80k_cityscapes/deeplabv3_r101-d8_769x769_80k_cityscapes_20200607_013353.log.json) | -| DeepLabV3 | R-101-D16-MG124 | 512x1024 | 40000 | 4.7 | - 6.96 | 76.71 | 78.63 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d16-mg124_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d16-mg124_512x1024_40k_cityscapes/deeplabv3_r101-d16-mg124_512x1024_40k_cityscapes_20200908_005644-67b0c992.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d16-mg124_512x1024_40k_cityscapes/deeplabv3_r101-d16-mg124_512x1024_40k_cityscapes-20200908_005644.log.json) | -| DeepLabV3 | R-101-D16-MG124 | 512x1024 | 80000 | - | - | 78.36 | 79.84 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d16-mg124_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d16-mg124_512x1024_80k_cityscapes/deeplabv3_r101-d16-mg124_512x1024_80k_cityscapes_20200908_005644-57bb8425.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d16-mg124_512x1024_80k_cityscapes/deeplabv3_r101-d16-mg124_512x1024_80k_cityscapes-20200908_005644.log.json) | -| DeepLabV3 | R-18b-D8 | 512x1024 | 80000 | 1.6 | 13.93 | 76.26 | 77.88 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r18b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18b-d8_512x1024_80k_cityscapes/deeplabv3_r18b-d8_512x1024_80k_cityscapes_20201225_094144-46040cef.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18b-d8_512x1024_80k_cityscapes/deeplabv3_r18b-d8_512x1024_80k_cityscapes-20201225_094144.log.json) | -| DeepLabV3 | R-50b-D8 | 512x1024 | 80000 | 6.0 | 2.74 | 79.63 | 80.98 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50b-d8_512x1024_80k_cityscapes/deeplabv3_r50b-d8_512x1024_80k_cityscapes_20201225_155148-ec368954.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50b-d8_512x1024_80k_cityscapes/deeplabv3_r50b-d8_512x1024_80k_cityscapes-20201225_155148.log.json) | -| DeepLabV3 | R-101b-D8 | 512x1024 | 80000 | 9.5 | 1.81 | 80.01 | 81.21 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101b-d8_512x1024_80k_cityscapes/deeplabv3_r101b-d8_512x1024_80k_cityscapes_20201226_171821-8fd49503.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101b-d8_512x1024_80k_cityscapes/deeplabv3_r101b-d8_512x1024_80k_cityscapes-20201226_171821.log.json) | -| DeepLabV3 | R-18b-D8 | 769x769 | 80000 | 1.8 | 5.79 | 75.63 | 77.51 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r18b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18b-d8_769x769_80k_cityscapes/deeplabv3_r18b-d8_769x769_80k_cityscapes_20201225_094144-fdc985d9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18b-d8_769x769_80k_cityscapes/deeplabv3_r18b-d8_769x769_80k_cityscapes-20201225_094144.log.json) | -| DeepLabV3 | R-50b-D8 | 769x769 | 80000 | 6.8 | 1.16 | 78.80 | 80.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50b-d8_769x769_80k_cityscapes/deeplabv3_r50b-d8_769x769_80k_cityscapes_20201225_155404-87fb0cf4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50b-d8_769x769_80k_cityscapes/deeplabv3_r50b-d8_769x769_80k_cityscapes-20201225_155404.log.json) | -| DeepLabV3 | R-101b-D8 | 769x769 | 80000 | 10.7 | 0.82 | 79.41 | 80.73 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101b-d8_769x769_80k_cityscapes/deeplabv3_r101b-d8_769x769_80k_cityscapes_20201226_190843-9142ee57.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101b-d8_769x769_80k_cityscapes/deeplabv3_r101b-d8_769x769_80k_cityscapes-20201226_190843.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------------- | --------------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| DeepLabV3 | R-50-D8 | 512x1024 | 40000 | 6.1 | 2.57 | V100 | 79.09 | 80.45 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x1024_40k_cityscapes/deeplabv3_r50-d8_512x1024_40k_cityscapes_20200605_022449-acadc2f8.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x1024_40k_cityscapes/deeplabv3_r50-d8_512x1024_40k_cityscapes_20200605_022449.log.json) | +| DeepLabV3 | R-101-D8 | 512x1024 | 40000 | 9.6 | 1.92 | V100 | 77.12 | 79.61 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x1024_40k_cityscapes/deeplabv3_r101-d8_512x1024_40k_cityscapes_20200605_012241-7fd3f799.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x1024_40k_cityscapes/deeplabv3_r101-d8_512x1024_40k_cityscapes_20200605_012241.log.json) | +| DeepLabV3 | R-50-D8 | 769x769 | 40000 | 6.9 | 1.11 | V100 | 78.58 | 79.89 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_769x769_40k_cityscapes/deeplabv3_r50-d8_769x769_40k_cityscapes_20200606_113723-7eda553c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_769x769_40k_cityscapes/deeplabv3_r50-d8_769x769_40k_cityscapes_20200606_113723.log.json) | +| DeepLabV3 | R-101-D8 | 769x769 | 40000 | 10.9 | 0.83 | V100 | 79.27 | 80.11 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_769x769_40k_cityscapes/deeplabv3_r101-d8_769x769_40k_cityscapes_20200606_113809-c64f889f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_769x769_40k_cityscapes/deeplabv3_r101-d8_769x769_40k_cityscapes_20200606_113809.log.json) | +| DeepLabV3 | R-18-D8 | 512x1024 | 80000 | 1.7 | 13.78 | V100 | 76.70 | 78.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r18-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18-d8_512x1024_80k_cityscapes/deeplabv3_r18-d8_512x1024_80k_cityscapes_20201225_021506-23dffbe2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18-d8_512x1024_80k_cityscapes/deeplabv3_r18-d8_512x1024_80k_cityscapes-20201225_021506.log.json) | +| DeepLabV3 | R-50-D8 | 512x1024 | 80000 | - | - | V100 | 79.32 | 80.57 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x1024_80k_cityscapes/deeplabv3_r50-d8_512x1024_80k_cityscapes_20200606_113404-b92cfdd4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x1024_80k_cityscapes/deeplabv3_r50-d8_512x1024_80k_cityscapes_20200606_113404.log.json) | +| DeepLabV3 | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 80.20 | 81.21 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x1024_80k_cityscapes/deeplabv3_r101-d8_512x1024_80k_cityscapes_20200606_113503-9e428899.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x1024_80k_cityscapes/deeplabv3_r101-d8_512x1024_80k_cityscapes_20200606_113503.log.json) | +| DeepLabV3 (FP16) | R-101-D8 | 512x1024 | 80000 | 5.75 | 3.86 | V100 | 80.48 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb2-amp-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_fp16_512x1024_80k_cityscapes/deeplabv3_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230920-774d9cec.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_fp16_512x1024_80k_cityscapes/deeplabv3_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230920.log.json) | +| DeepLabV3 | R-18-D8 | 769x769 | 80000 | 1.9 | 5.55 | V100 | 76.60 | 78.26 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r18-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18-d8_769x769_80k_cityscapes/deeplabv3_r18-d8_769x769_80k_cityscapes_20201225_021506-6452126a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18-d8_769x769_80k_cityscapes/deeplabv3_r18-d8_769x769_80k_cityscapes-20201225_021506.log.json) | +| DeepLabV3 | R-50-D8 | 769x769 | 80000 | - | - | V100 | 79.89 | 81.06 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_769x769_80k_cityscapes/deeplabv3_r50-d8_769x769_80k_cityscapes_20200606_221338-788d6228.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_769x769_80k_cityscapes/deeplabv3_r50-d8_769x769_80k_cityscapes_20200606_221338.log.json) | +| DeepLabV3 | R-101-D8 | 769x769 | 80000 | - | - | V100 | 79.67 | 80.81 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_769x769_80k_cityscapes/deeplabv3_r101-d8_769x769_80k_cityscapes_20200607_013353-60e95418.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_769x769_80k_cityscapes/deeplabv3_r101-d8_769x769_80k_cityscapes_20200607_013353.log.json) | +| DeepLabV3 | R-101-D16-MG124 | 512x1024 | 40000 | 4.7 | 6.96 | V100 | 76.71 | 78.63 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d16-mg124_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d16-mg124_512x1024_40k_cityscapes/deeplabv3_r101-d16-mg124_512x1024_40k_cityscapes_20200908_005644-67b0c992.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d16-mg124_512x1024_40k_cityscapes/deeplabv3_r101-d16-mg124_512x1024_40k_cityscapes-20200908_005644.log.json) | +| DeepLabV3 | R-101-D16-MG124 | 512x1024 | 80000 | - | - | V100 | 78.36 | 79.84 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d16-mg124_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d16-mg124_512x1024_80k_cityscapes/deeplabv3_r101-d16-mg124_512x1024_80k_cityscapes_20200908_005644-57bb8425.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d16-mg124_512x1024_80k_cityscapes/deeplabv3_r101-d16-mg124_512x1024_80k_cityscapes-20200908_005644.log.json) | +| DeepLabV3 | R-18b-D8 | 512x1024 | 80000 | 1.6 | 13.93 | V100 | 76.26 | 77.88 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r18b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18b-d8_512x1024_80k_cityscapes/deeplabv3_r18b-d8_512x1024_80k_cityscapes_20201225_094144-46040cef.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18b-d8_512x1024_80k_cityscapes/deeplabv3_r18b-d8_512x1024_80k_cityscapes-20201225_094144.log.json) | +| DeepLabV3 | R-50b-D8 | 512x1024 | 80000 | 6.0 | 2.74 | V100 | 79.63 | 80.98 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50b-d8_512x1024_80k_cityscapes/deeplabv3_r50b-d8_512x1024_80k_cityscapes_20201225_155148-ec368954.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50b-d8_512x1024_80k_cityscapes/deeplabv3_r50b-d8_512x1024_80k_cityscapes-20201225_155148.log.json) | +| DeepLabV3 | R-101b-D8 | 512x1024 | 80000 | 9.5 | 1.81 | V100 | 80.01 | 81.21 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101b-d8_512x1024_80k_cityscapes/deeplabv3_r101b-d8_512x1024_80k_cityscapes_20201226_171821-8fd49503.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101b-d8_512x1024_80k_cityscapes/deeplabv3_r101b-d8_512x1024_80k_cityscapes-20201226_171821.log.json) | +| DeepLabV3 | R-18b-D8 | 769x769 | 80000 | 1.8 | 5.79 | V100 | 75.63 | 77.51 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r18b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18b-d8_769x769_80k_cityscapes/deeplabv3_r18b-d8_769x769_80k_cityscapes_20201225_094144-fdc985d9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18b-d8_769x769_80k_cityscapes/deeplabv3_r18b-d8_769x769_80k_cityscapes-20201225_094144.log.json) | +| DeepLabV3 | R-50b-D8 | 769x769 | 80000 | 6.8 | 1.16 | V100 | 78.80 | 80.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50b-d8_769x769_80k_cityscapes/deeplabv3_r50b-d8_769x769_80k_cityscapes_20201225_155404-87fb0cf4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50b-d8_769x769_80k_cityscapes/deeplabv3_r50b-d8_769x769_80k_cityscapes-20201225_155404.log.json) | +| DeepLabV3 | R-101b-D8 | 769x769 | 80000 | 10.7 | 0.82 | V100 | 79.41 | 80.73 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101b-d8_769x769_80k_cityscapes/deeplabv3_r101b-d8_769x769_80k_cityscapes_20201226_190843-9142ee57.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101b-d8_769x769_80k_cityscapes/deeplabv3_r101b-d8_769x769_80k_cityscapes-20201226_190843.log.json) | ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| --------- | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DeepLabV3 | R-50-D8 | 512x512 | 80000 | 8.9 | 14.76 | 42.42 | 43.28 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_80k_ade20k/deeplabv3_r50-d8_512x512_80k_ade20k_20200614_185028-0bb3f844.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_80k_ade20k/deeplabv3_r50-d8_512x512_80k_ade20k_20200614_185028.log.json) | -| DeepLabV3 | R-101-D8 | 512x512 | 80000 | 12.4 | 10.14 | 44.08 | 45.19 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_80k_ade20k/deeplabv3_r101-d8_512x512_80k_ade20k_20200615_021256-d89c7fa4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_80k_ade20k/deeplabv3_r101-d8_512x512_80k_ade20k_20200615_021256.log.json) | -| DeepLabV3 | R-50-D8 | 512x512 | 160000 | - | - | 42.66 | 44.09 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_160k_ade20k/deeplabv3_r50-d8_512x512_160k_ade20k_20200615_123227-5d0ee427.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_160k_ade20k/deeplabv3_r50-d8_512x512_160k_ade20k_20200615_123227.log.json) | -| DeepLabV3 | R-101-D8 | 512x512 | 160000 | - | - | 45.00 | 46.66 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_160k_ade20k/deeplabv3_r101-d8_512x512_160k_ade20k_20200615_105816-b1f72b3b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_160k_ade20k/deeplabv3_r101-d8_512x512_160k_ade20k_20200615_105816.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| --------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DeepLabV3 | R-50-D8 | 512x512 | 80000 | 8.9 | 14.76 | V100 | 42.42 | 43.28 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_80k_ade20k/deeplabv3_r50-d8_512x512_80k_ade20k_20200614_185028-0bb3f844.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_80k_ade20k/deeplabv3_r50-d8_512x512_80k_ade20k_20200614_185028.log.json) | +| DeepLabV3 | R-101-D8 | 512x512 | 80000 | 12.4 | 10.14 | V100 | 44.08 | 45.19 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_80k_ade20k/deeplabv3_r101-d8_512x512_80k_ade20k_20200615_021256-d89c7fa4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_80k_ade20k/deeplabv3_r101-d8_512x512_80k_ade20k_20200615_021256.log.json) | +| DeepLabV3 | R-50-D8 | 512x512 | 160000 | - | - | V100 | 42.66 | 44.09 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_160k_ade20k/deeplabv3_r50-d8_512x512_160k_ade20k_20200615_123227-5d0ee427.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_160k_ade20k/deeplabv3_r50-d8_512x512_160k_ade20k_20200615_123227.log.json) | +| DeepLabV3 | R-101-D8 | 512x512 | 160000 | - | - | V100 | 45.00 | 46.66 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_160k_ade20k/deeplabv3_r101-d8_512x512_160k_ade20k_20200615_105816-b1f72b3b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_160k_ade20k/deeplabv3_r101-d8_512x512_160k_ade20k_20200615_105816.log.json) | ### Pascal VOC 2012 + Aug -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| --------- | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DeepLabV3 | R-50-D8 | 512x512 | 20000 | 6.1 | 13.88 | 76.17 | 77.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_20k_voc12aug/deeplabv3_r50-d8_512x512_20k_voc12aug_20200617_010906-596905ef.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_20k_voc12aug/deeplabv3_r50-d8_512x512_20k_voc12aug_20200617_010906.log.json) | -| DeepLabV3 | R-101-D8 | 512x512 | 20000 | 9.6 | 9.81 | 78.70 | 79.95 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_20k_voc12aug/deeplabv3_r101-d8_512x512_20k_voc12aug_20200617_010932-8d13832f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_20k_voc12aug/deeplabv3_r101-d8_512x512_20k_voc12aug_20200617_010932.log.json) | -| DeepLabV3 | R-50-D8 | 512x512 | 40000 | - | - | 77.68 | 78.78 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_40k_voc12aug/deeplabv3_r50-d8_512x512_40k_voc12aug_20200613_161546-2ae96e7e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_40k_voc12aug/deeplabv3_r50-d8_512x512_40k_voc12aug_20200613_161546.log.json) | -| DeepLabV3 | R-101-D8 | 512x512 | 40000 | - | - | 77.92 | 79.18 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_40k_voc12aug/deeplabv3_r101-d8_512x512_40k_voc12aug_20200613_161432-0017d784.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_40k_voc12aug/deeplabv3_r101-d8_512x512_40k_voc12aug_20200613_161432.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| --------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DeepLabV3 | R-50-D8 | 512x512 | 20000 | 6.1 | 13.88 | V100 | 76.17 | 77.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_20k_voc12aug/deeplabv3_r50-d8_512x512_20k_voc12aug_20200617_010906-596905ef.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_20k_voc12aug/deeplabv3_r50-d8_512x512_20k_voc12aug_20200617_010906.log.json) | +| DeepLabV3 | R-101-D8 | 512x512 | 20000 | 9.6 | 9.81 | V100 | 78.70 | 79.95 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_20k_voc12aug/deeplabv3_r101-d8_512x512_20k_voc12aug_20200617_010932-8d13832f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_20k_voc12aug/deeplabv3_r101-d8_512x512_20k_voc12aug_20200617_010932.log.json) | +| DeepLabV3 | R-50-D8 | 512x512 | 40000 | - | - | V100 | 77.68 | 78.78 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_40k_voc12aug/deeplabv3_r50-d8_512x512_40k_voc12aug_20200613_161546-2ae96e7e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_40k_voc12aug/deeplabv3_r50-d8_512x512_40k_voc12aug_20200613_161546.log.json) | +| DeepLabV3 | R-101-D8 | 512x512 | 40000 | - | - | V100 | 77.92 | 79.18 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_40k_voc12aug/deeplabv3_r101-d8_512x512_40k_voc12aug_20200613_161432-0017d784.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_40k_voc12aug/deeplabv3_r101-d8_512x512_40k_voc12aug_20200613_161432.log.json) | ### Pascal Context -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| --------- | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DeepLabV3 | R-101-D8 | 480x480 | 40000 | 9.2 | 7.09 | 46.55 | 47.81 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-40k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_40k_pascal_context/deeplabv3_r101-d8_480x480_40k_pascal_context_20200911_204118-1aa27336.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_40k_pascal_context/deeplabv3_r101-d8_480x480_40k_pascal_context-20200911_204118.log.json) | -| DeepLabV3 | R-101-D8 | 480x480 | 80000 | - | - | 46.42 | 47.53 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-80k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_80k_pascal_context/deeplabv3_r101-d8_480x480_80k_pascal_context_20200911_170155-2a21fff3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_80k_pascal_context/deeplabv3_r101-d8_480x480_80k_pascal_context-20200911_170155.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| --------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DeepLabV3 | R-101-D8 | 480x480 | 40000 | 9.2 | 7.09 | V100 | 46.55 | 47.81 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-40k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_40k_pascal_context/deeplabv3_r101-d8_480x480_40k_pascal_context_20200911_204118-1aa27336.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_40k_pascal_context/deeplabv3_r101-d8_480x480_40k_pascal_context-20200911_204118.log.json) | +| DeepLabV3 | R-101-D8 | 480x480 | 80000 | - | - | V100 | 46.42 | 47.53 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-80k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_80k_pascal_context/deeplabv3_r101-d8_480x480_80k_pascal_context_20200911_170155-2a21fff3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_80k_pascal_context/deeplabv3_r101-d8_480x480_80k_pascal_context-20200911_170155.log.json) | ### Pascal Context 59 -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| --------- | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DeepLabV3 | R-101-D8 | 480x480 | 40000 | - | - | 52.61 | 54.28 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-40k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_40k_pascal_context_59/deeplabv3_r101-d8_480x480_40k_pascal_context_59_20210416_110332-cb08ea46.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_40k_pascal_context_59/deeplabv3_r101-d8_480x480_40k_pascal_context_59-20210416_110332.log.json) | -| DeepLabV3 | R-101-D8 | 480x480 | 80000 | - | - | 52.46 | 54.09 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-80k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_80k_pascal_context_59/deeplabv3_r101-d8_480x480_80k_pascal_context_59_20210416_113002-26303993.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_80k_pascal_context_59/deeplabv3_r101-d8_480x480_80k_pascal_context_59-20210416_113002.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| --------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DeepLabV3 | R-101-D8 | 480x480 | 40000 | - | - | V100 | 52.61 | 54.28 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-40k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_40k_pascal_context_59/deeplabv3_r101-d8_480x480_40k_pascal_context_59_20210416_110332-cb08ea46.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_40k_pascal_context_59/deeplabv3_r101-d8_480x480_40k_pascal_context_59-20210416_110332.log.json) | +| DeepLabV3 | R-101-D8 | 480x480 | 80000 | - | - | V100 | 52.46 | 54.09 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-80k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_80k_pascal_context_59/deeplabv3_r101-d8_480x480_80k_pascal_context_59_20210416_113002-26303993.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_80k_pascal_context_59/deeplabv3_r101-d8_480x480_80k_pascal_context_59-20210416_113002.log.json) | ### COCO-Stuff 10k -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| --------- | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DeepLabV3 | R-50-D8 | 512x512 | 20000 | 9.6 | 10.8 | 34.66 | 36.08 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb4-20k_coco-stuff10k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_20k_coco-stuff10k/deeplabv3_r50-d8_512x512_4x4_20k_coco-stuff10k_20210821_043025-b35f789d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_20k_coco-stuff10k/deeplabv3_r50-d8_512x512_4x4_20k_coco-stuff10k_20210821_043025.log.json) | -| DeepLabV3 | R-101-D8 | 512x512 | 20000 | 13.2 | 8.7 | 37.30 | 38.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-20k_coco-stuff10k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_20k_coco-stuff10k/deeplabv3_r101-d8_512x512_4x4_20k_coco-stuff10k_20210821_043025-c49752cb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_20k_coco-stuff10k/deeplabv3_r101-d8_512x512_4x4_20k_coco-stuff10k_20210821_043025.log.json) | -| DeepLabV3 | R-50-D8 | 512x512 | 40000 | - | - | 35.73 | 37.09 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb4-40k_coco-stuff10k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_40k_coco-stuff10k/deeplabv3_r50-d8_512x512_4x4_40k_coco-stuff10k_20210821_043305-dc76f3ff.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_40k_coco-stuff10k/deeplabv3_r50-d8_512x512_4x4_40k_coco-stuff10k_20210821_043305.log.json) | -| DeepLabV3 | R-101-D8 | 512x512 | 40000 | - | - | 37.81 | 38.80 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-40k_coco-stuff10k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_40k_coco-stuff10k/deeplabv3_r101-d8_512x512_4x4_40k_coco-stuff10k_20210821_043305-636cb433.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_40k_coco-stuff10k/deeplabv3_r101-d8_512x512_4x4_40k_coco-stuff10k_20210821_043305.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| --------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DeepLabV3 | R-50-D8 | 512x512 | 20000 | 9.6 | 10.8 | V100 | 34.66 | 36.08 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb4-20k_coco-stuff10k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_20k_coco-stuff10k/deeplabv3_r50-d8_512x512_4x4_20k_coco-stuff10k_20210821_043025-b35f789d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_20k_coco-stuff10k/deeplabv3_r50-d8_512x512_4x4_20k_coco-stuff10k_20210821_043025.log.json) | +| DeepLabV3 | R-101-D8 | 512x512 | 20000 | 13.2 | 8.7 | V100 | 37.30 | 38.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-20k_coco-stuff10k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_20k_coco-stuff10k/deeplabv3_r101-d8_512x512_4x4_20k_coco-stuff10k_20210821_043025-c49752cb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_20k_coco-stuff10k/deeplabv3_r101-d8_512x512_4x4_20k_coco-stuff10k_20210821_043025.log.json) | +| DeepLabV3 | R-50-D8 | 512x512 | 40000 | - | - | V100 | 35.73 | 37.09 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb4-40k_coco-stuff10k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_40k_coco-stuff10k/deeplabv3_r50-d8_512x512_4x4_40k_coco-stuff10k_20210821_043305-dc76f3ff.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_40k_coco-stuff10k/deeplabv3_r50-d8_512x512_4x4_40k_coco-stuff10k_20210821_043305.log.json) | +| DeepLabV3 | R-101-D8 | 512x512 | 40000 | - | - | V100 | 37.81 | 38.80 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-40k_coco-stuff10k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_40k_coco-stuff10k/deeplabv3_r101-d8_512x512_4x4_40k_coco-stuff10k_20210821_043305-636cb433.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_40k_coco-stuff10k/deeplabv3_r101-d8_512x512_4x4_40k_coco-stuff10k_20210821_043305.log.json) | ### COCO-Stuff 164k -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| --------- | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DeepLabV3 | R-50-D8 | 512x512 | 80000 | 9.6 | 10.8 | 39.38 | 40.03 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb4-80k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_80k_coco-stuff164k/deeplabv3_r50-d8_512x512_4x4_80k_coco-stuff164k_20210709_163016-88675c24.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_80k_coco-stuff164k/deeplabv3_r50-d8_512x512_4x4_80k_coco-stuff164k_20210709_163016.log.json) | -| DeepLabV3 | R-101-D8 | 512x512 | 80000 | 13.2 | 8.7 | 40.87 | 41.50 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-80k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_80k_coco-stuff164k/deeplabv3_r101-d8_512x512_4x4_80k_coco-stuff164k_20210709_201252-13600dc2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_80k_coco-stuff164k/deeplabv3_r101-d8_512x512_4x4_80k_coco-stuff164k_20210709_201252.log.json) | -| DeepLabV3 | R-50-D8 | 512x512 | 160000 | - | - | 41.09 | 41.69 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb4-160k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_160k_coco-stuff164k/deeplabv3_r50-d8_512x512_4x4_160k_coco-stuff164k_20210709_163016-49f2812b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_160k_coco-stuff164k/deeplabv3_r50-d8_512x512_4x4_160k_coco-stuff164k_20210709_163016.log.json) | -| DeepLabV3 | R-101-D8 | 512x512 | 160000 | - | - | 41.82 | 42.49 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-160k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_160k_coco-stuff164k/deeplabv3_r101-d8_512x512_4x4_160k_coco-stuff164k_20210709_155402-f035acfd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_160k_coco-stuff164k/deeplabv3_r101-d8_512x512_4x4_160k_coco-stuff164k_20210709_155402.log.json) | -| DeepLabV3 | R-50-D8 | 512x512 | 320000 | - | - | 41.37 | 42.22 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb4-320k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_320k_coco-stuff164k/deeplabv3_r50-d8_512x512_4x4_320k_coco-stuff164k_20210709_155403-51b21115.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_320k_coco-stuff164k/deeplabv3_r50-d8_512x512_4x4_320k_coco-stuff164k_20210709_155403.log.json) | -| DeepLabV3 | R-101-D8 | 512x512 | 320000 | - | - | 42.61 | 43.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-320k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_320k_coco-stuff164k/deeplabv3_r101-d8_512x512_4x4_320k_coco-stuff164k_20210709_155402-3cbca14d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_320k_coco-stuff164k/deeplabv3_r101-d8_512x512_4x4_320k_coco-stuff164k_20210709_155402.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| --------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DeepLabV3 | R-50-D8 | 512x512 | 80000 | 9.6 | 10.8 | V100 | 39.38 | 40.03 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb4-80k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_80k_coco-stuff164k/deeplabv3_r50-d8_512x512_4x4_80k_coco-stuff164k_20210709_163016-88675c24.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_80k_coco-stuff164k/deeplabv3_r50-d8_512x512_4x4_80k_coco-stuff164k_20210709_163016.log.json) | +| DeepLabV3 | R-101-D8 | 512x512 | 80000 | 13.2 | 8.7 | V100 | 40.87 | 41.50 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-80k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_80k_coco-stuff164k/deeplabv3_r101-d8_512x512_4x4_80k_coco-stuff164k_20210709_201252-13600dc2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_80k_coco-stuff164k/deeplabv3_r101-d8_512x512_4x4_80k_coco-stuff164k_20210709_201252.log.json) | +| DeepLabV3 | R-50-D8 | 512x512 | 160000 | - | - | V100 | 41.09 | 41.69 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb4-160k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_160k_coco-stuff164k/deeplabv3_r50-d8_512x512_4x4_160k_coco-stuff164k_20210709_163016-49f2812b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_160k_coco-stuff164k/deeplabv3_r50-d8_512x512_4x4_160k_coco-stuff164k_20210709_163016.log.json) | +| DeepLabV3 | R-101-D8 | 512x512 | 160000 | - | - | V100 | 41.82 | 42.49 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-160k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_160k_coco-stuff164k/deeplabv3_r101-d8_512x512_4x4_160k_coco-stuff164k_20210709_155402-f035acfd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_160k_coco-stuff164k/deeplabv3_r101-d8_512x512_4x4_160k_coco-stuff164k_20210709_155402.log.json) | +| DeepLabV3 | R-50-D8 | 512x512 | 320000 | - | - | V100 | 41.37 | 42.22 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb4-320k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_320k_coco-stuff164k/deeplabv3_r50-d8_512x512_4x4_320k_coco-stuff164k_20210709_155403-51b21115.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_320k_coco-stuff164k/deeplabv3_r50-d8_512x512_4x4_320k_coco-stuff164k_20210709_155403.log.json) | +| DeepLabV3 | R-101-D8 | 512x512 | 320000 | - | - | V100 | 42.61 | 43.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-320k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_320k_coco-stuff164k/deeplabv3_r101-d8_512x512_4x4_320k_coco-stuff164k_20210709_155402-3cbca14d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_320k_coco-stuff164k/deeplabv3_r101-d8_512x512_4x4_320k_coco-stuff164k_20210709_155402.log.json) | Note: - `D-8` here corresponding to the output stride 8 setting for DeepLab series. - `FP16` means Mixed Precision (FP16) is adopted in training. + +## Citation + +```bibtext +@article{chen2017rethinking, + title={Rethinking atrous convolution for semantic image segmentation}, + author={Chen, Liang-Chieh and Papandreou, George and Schroff, Florian and Adam, Hartwig}, + journal={arXiv preprint arXiv:1706.05587}, + year={2017} +} +``` diff --git a/configs/deeplabv3/deeplabv3.yml b/configs/deeplabv3/deeplabv3.yml deleted file mode 100644 index 6196212992..0000000000 --- a/configs/deeplabv3/deeplabv3.yml +++ /dev/null @@ -1,756 +0,0 @@ -Collections: -- Name: DeepLabV3 - Metadata: - Training Data: - - Cityscapes - - ADE20K - - Pascal VOC 2012 + Aug - - Pascal Context - - Pascal Context 59 - - COCO-Stuff 10k - - COCO-Stuff 164k - Paper: - URL: https://arxiv.org/abs/1706.05587 - Title: Rethinking atrous convolution for semantic image segmentation - README: configs/deeplabv3/README.md - Code: - URL: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 - Version: v0.17.0 - Converted From: - Code: https://github.com/tensorflow/models/tree/master/research/deeplab -Models: -- Name: deeplabv3_r50-d8_4xb2-40k_cityscapes-512x1024 - In Collection: DeepLabV3 - Metadata: - backbone: R-50-D8 - crop size: (512,1024) - lr schd: 40000 - inference time (ms/im): - - value: 389.11 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 6.1 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.09 - mIoU(ms+flip): 80.45 - Config: configs/deeplabv3/deeplabv3_r50-d8_4xb2-40k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x1024_40k_cityscapes/deeplabv3_r50-d8_512x1024_40k_cityscapes_20200605_022449-acadc2f8.pth -- Name: deeplabv3_r101-d8_4xb2-40k_cityscapes-512x1024 - In Collection: DeepLabV3 - Metadata: - backbone: R-101-D8 - crop size: (512,1024) - lr schd: 40000 - inference time (ms/im): - - value: 520.83 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 9.6 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 77.12 - mIoU(ms+flip): 79.61 - Config: configs/deeplabv3/deeplabv3_r101-d8_4xb2-40k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x1024_40k_cityscapes/deeplabv3_r101-d8_512x1024_40k_cityscapes_20200605_012241-7fd3f799.pth -- Name: deeplabv3_r50-d8_4xb2-40k_cityscapes-769x769 - In Collection: DeepLabV3 - Metadata: - backbone: R-50-D8 - crop size: (769,769) - lr schd: 40000 - inference time (ms/im): - - value: 900.9 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 6.9 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.58 - mIoU(ms+flip): 79.89 - Config: configs/deeplabv3/deeplabv3_r50-d8_4xb2-40k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_769x769_40k_cityscapes/deeplabv3_r50-d8_769x769_40k_cityscapes_20200606_113723-7eda553c.pth -- Name: deeplabv3_r101-d8_4xb2-40k_cityscapes-769x769 - In Collection: DeepLabV3 - Metadata: - backbone: R-101-D8 - crop size: (769,769) - lr schd: 40000 - inference time (ms/im): - - value: 1204.82 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 10.9 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.27 - mIoU(ms+flip): 80.11 - Config: configs/deeplabv3/deeplabv3_r101-d8_4xb2-40k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_769x769_40k_cityscapes/deeplabv3_r101-d8_769x769_40k_cityscapes_20200606_113809-c64f889f.pth -- Name: deeplabv3_r18-d8_4xb2-80k_cityscapes-512x1024 - In Collection: DeepLabV3 - Metadata: - backbone: R-18-D8 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 72.57 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 1.7 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 76.7 - mIoU(ms+flip): 78.27 - Config: configs/deeplabv3/deeplabv3_r18-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18-d8_512x1024_80k_cityscapes/deeplabv3_r18-d8_512x1024_80k_cityscapes_20201225_021506-23dffbe2.pth -- Name: deeplabv3_r50-d8_4xb2-80k_cityscapes-512x1024 - In Collection: DeepLabV3 - Metadata: - backbone: R-50-D8 - crop size: (512,1024) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.32 - mIoU(ms+flip): 80.57 - Config: configs/deeplabv3/deeplabv3_r50-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x1024_80k_cityscapes/deeplabv3_r50-d8_512x1024_80k_cityscapes_20200606_113404-b92cfdd4.pth -- Name: deeplabv3_r101-d8_4xb2-80k_cityscapes-512x1024 - In Collection: DeepLabV3 - Metadata: - backbone: R-101-D8 - crop size: (512,1024) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 80.2 - mIoU(ms+flip): 81.21 - Config: configs/deeplabv3/deeplabv3_r101-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x1024_80k_cityscapes/deeplabv3_r101-d8_512x1024_80k_cityscapes_20200606_113503-9e428899.pth -- Name: deeplabv3_r101-d8_4xb2-amp-80k_cityscapes-512x1024 - In Collection: DeepLabV3 - Metadata: - backbone: R-101-D8 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 259.07 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: AMP - resolution: (512,1024) - Training Memory (GB): 5.75 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 80.48 - Config: configs/deeplabv3/deeplabv3_r101-d8_4xb2-amp-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_fp16_512x1024_80k_cityscapes/deeplabv3_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230920-774d9cec.pth -- Name: deeplabv3_r18-d8_4xb2-80k_cityscapes-769x769 - In Collection: DeepLabV3 - Metadata: - backbone: R-18-D8 - crop size: (769,769) - lr schd: 80000 - inference time (ms/im): - - value: 180.18 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 1.9 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 76.6 - mIoU(ms+flip): 78.26 - Config: configs/deeplabv3/deeplabv3_r18-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18-d8_769x769_80k_cityscapes/deeplabv3_r18-d8_769x769_80k_cityscapes_20201225_021506-6452126a.pth -- Name: deeplabv3_r50-d8_4xb2-80k_cityscapes-769x769 - In Collection: DeepLabV3 - Metadata: - backbone: R-50-D8 - crop size: (769,769) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.89 - mIoU(ms+flip): 81.06 - Config: configs/deeplabv3/deeplabv3_r50-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_769x769_80k_cityscapes/deeplabv3_r50-d8_769x769_80k_cityscapes_20200606_221338-788d6228.pth -- Name: deeplabv3_r101-d8_4xb2-80k_cityscapes-769x769 - In Collection: DeepLabV3 - Metadata: - backbone: R-101-D8 - crop size: (769,769) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.67 - mIoU(ms+flip): 80.81 - Config: configs/deeplabv3/deeplabv3_r101-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_769x769_80k_cityscapes/deeplabv3_r101-d8_769x769_80k_cityscapes_20200607_013353-60e95418.pth -- Name: deeplabv3_r101-d16-mg124_4xb2-80k_cityscapes-512x1024 - In Collection: DeepLabV3 - Metadata: - backbone: R-101-D16-MG124 - crop size: (512,1024) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.36 - mIoU(ms+flip): 79.84 - Config: configs/deeplabv3/deeplabv3_r101-d16-mg124_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d16-mg124_512x1024_80k_cityscapes/deeplabv3_r101-d16-mg124_512x1024_80k_cityscapes_20200908_005644-57bb8425.pth -- Name: deeplabv3_r18b-d8_4xb2-80k_cityscapes-512x1024 - In Collection: DeepLabV3 - Metadata: - backbone: R-18b-D8 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 71.79 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 1.6 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 76.26 - mIoU(ms+flip): 77.88 - Config: configs/deeplabv3/deeplabv3_r18b-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18b-d8_512x1024_80k_cityscapes/deeplabv3_r18b-d8_512x1024_80k_cityscapes_20201225_094144-46040cef.pth -- Name: deeplabv3_r50b-d8_4xb2-80k_cityscapes-512x1024 - In Collection: DeepLabV3 - Metadata: - backbone: R-50b-D8 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 364.96 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 6.0 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.63 - mIoU(ms+flip): 80.98 - Config: configs/deeplabv3/deeplabv3_r50b-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50b-d8_512x1024_80k_cityscapes/deeplabv3_r50b-d8_512x1024_80k_cityscapes_20201225_155148-ec368954.pth -- Name: deeplabv3_r101b-d8_4xb2-80k_cityscapes-512x1024 - In Collection: DeepLabV3 - Metadata: - backbone: R-101b-D8 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 552.49 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 9.5 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 80.01 - mIoU(ms+flip): 81.21 - Config: configs/deeplabv3/deeplabv3_r101b-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101b-d8_512x1024_80k_cityscapes/deeplabv3_r101b-d8_512x1024_80k_cityscapes_20201226_171821-8fd49503.pth -- Name: deeplabv3_r18b-d8_4xb2-80k_cityscapes-769x769 - In Collection: DeepLabV3 - Metadata: - backbone: R-18b-D8 - crop size: (769,769) - lr schd: 80000 - inference time (ms/im): - - value: 172.71 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 1.8 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 75.63 - mIoU(ms+flip): 77.51 - Config: configs/deeplabv3/deeplabv3_r18b-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18b-d8_769x769_80k_cityscapes/deeplabv3_r18b-d8_769x769_80k_cityscapes_20201225_094144-fdc985d9.pth -- Name: deeplabv3_r50b-d8_4xb2-80k_cityscapes-769x769 - In Collection: DeepLabV3 - Metadata: - backbone: R-50b-D8 - crop size: (769,769) - lr schd: 80000 - inference time (ms/im): - - value: 862.07 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 6.8 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.8 - mIoU(ms+flip): 80.27 - Config: configs/deeplabv3/deeplabv3_r50b-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50b-d8_769x769_80k_cityscapes/deeplabv3_r50b-d8_769x769_80k_cityscapes_20201225_155404-87fb0cf4.pth -- Name: deeplabv3_r101b-d8_4xb2-80k_cityscapes-769x769 - In Collection: DeepLabV3 - Metadata: - backbone: R-101b-D8 - crop size: (769,769) - lr schd: 80000 - inference time (ms/im): - - value: 1219.51 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 10.7 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.41 - mIoU(ms+flip): 80.73 - Config: configs/deeplabv3/deeplabv3_r101b-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101b-d8_769x769_80k_cityscapes/deeplabv3_r101b-d8_769x769_80k_cityscapes_20201226_190843-9142ee57.pth -- Name: deeplabv3_r50-d8_4xb4-80k_ade20k-512x512 - In Collection: DeepLabV3 - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 67.75 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 8.9 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 42.42 - mIoU(ms+flip): 43.28 - Config: configs/deeplabv3/deeplabv3_r50-d8_4xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_80k_ade20k/deeplabv3_r50-d8_512x512_80k_ade20k_20200614_185028-0bb3f844.pth -- Name: deeplabv3_r101-d8_4xb4-80k_ade20k-512x512 - In Collection: DeepLabV3 - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 98.62 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 12.4 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 44.08 - mIoU(ms+flip): 45.19 - Config: configs/deeplabv3/deeplabv3_r101-d8_4xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_80k_ade20k/deeplabv3_r101-d8_512x512_80k_ade20k_20200615_021256-d89c7fa4.pth -- Name: deeplabv3_r50-d8_4xb4-160k_ade20k-512x512 - In Collection: DeepLabV3 - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 42.66 - mIoU(ms+flip): 44.09 - Config: configs/deeplabv3/deeplabv3_r50-d8_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_160k_ade20k/deeplabv3_r50-d8_512x512_160k_ade20k_20200615_123227-5d0ee427.pth -- Name: deeplabv3_r101-d8_4xb4-160k_ade20k-512x512 - In Collection: DeepLabV3 - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 45.0 - mIoU(ms+flip): 46.66 - Config: configs/deeplabv3/deeplabv3_r101-d8_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_160k_ade20k/deeplabv3_r101-d8_512x512_160k_ade20k_20200615_105816-b1f72b3b.pth -- Name: deeplabv3_r50-d8_4xb4-20k_voc12aug-512x512 - In Collection: DeepLabV3 - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 20000 - inference time (ms/im): - - value: 72.05 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 6.1 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 76.17 - mIoU(ms+flip): 77.42 - Config: configs/deeplabv3/deeplabv3_r50-d8_4xb4-20k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_20k_voc12aug/deeplabv3_r50-d8_512x512_20k_voc12aug_20200617_010906-596905ef.pth -- Name: deeplabv3_r101-d8_4xb4-20k_voc12aug-512x512 - In Collection: DeepLabV3 - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 20000 - inference time (ms/im): - - value: 101.94 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 9.6 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 78.7 - mIoU(ms+flip): 79.95 - Config: configs/deeplabv3/deeplabv3_r101-d8_4xb4-20k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_20k_voc12aug/deeplabv3_r101-d8_512x512_20k_voc12aug_20200617_010932-8d13832f.pth -- Name: deeplabv3_r50-d8_4xb4-40k_voc12aug-512x512 - In Collection: DeepLabV3 - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 40000 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 77.68 - mIoU(ms+flip): 78.78 - Config: configs/deeplabv3/deeplabv3_r50-d8_4xb4-40k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_40k_voc12aug/deeplabv3_r50-d8_512x512_40k_voc12aug_20200613_161546-2ae96e7e.pth -- Name: deeplabv3_r101-d8_4xb4-40k_voc12aug-512x512 - In Collection: DeepLabV3 - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 40000 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 77.92 - mIoU(ms+flip): 79.18 - Config: configs/deeplabv3/deeplabv3_r101-d8_4xb4-40k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_40k_voc12aug/deeplabv3_r101-d8_512x512_40k_voc12aug_20200613_161432-0017d784.pth -- Name: deeplabv3_r101-d8_4xb4-40k_pascal-context-480x480 - In Collection: DeepLabV3 - Metadata: - backbone: R-101-D8 - crop size: (480,480) - lr schd: 40000 - inference time (ms/im): - - value: 141.04 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (480,480) - Training Memory (GB): 9.2 - Results: - - Task: Semantic Segmentation - Dataset: Pascal Context - Metrics: - mIoU: 46.55 - mIoU(ms+flip): 47.81 - Config: configs/deeplabv3/deeplabv3_r101-d8_4xb4-40k_pascal-context-480x480.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_40k_pascal_context/deeplabv3_r101-d8_480x480_40k_pascal_context_20200911_204118-1aa27336.pth -- Name: deeplabv3_r101-d8_4xb4-80k_pascal-context-480x480 - In Collection: DeepLabV3 - Metadata: - backbone: R-101-D8 - crop size: (480,480) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Pascal Context - Metrics: - mIoU: 46.42 - mIoU(ms+flip): 47.53 - Config: configs/deeplabv3/deeplabv3_r101-d8_4xb4-80k_pascal-context-480x480.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_80k_pascal_context/deeplabv3_r101-d8_480x480_80k_pascal_context_20200911_170155-2a21fff3.pth -- Name: deeplabv3_r101-d8_4xb4-40k_pascal-context-59-480x480 - In Collection: DeepLabV3 - Metadata: - backbone: R-101-D8 - crop size: (480,480) - lr schd: 40000 - Results: - - Task: Semantic Segmentation - Dataset: Pascal Context 59 - Metrics: - mIoU: 52.61 - mIoU(ms+flip): 54.28 - Config: configs/deeplabv3/deeplabv3_r101-d8_4xb4-40k_pascal-context-59-480x480.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_40k_pascal_context_59/deeplabv3_r101-d8_480x480_40k_pascal_context_59_20210416_110332-cb08ea46.pth -- Name: deeplabv3_r101-d8_4xb4-80k_pascal-context-59-480x480 - In Collection: DeepLabV3 - Metadata: - backbone: R-101-D8 - crop size: (480,480) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Pascal Context 59 - Metrics: - mIoU: 52.46 - mIoU(ms+flip): 54.09 - Config: configs/deeplabv3/deeplabv3_r101-d8_4xb4-80k_pascal-context-59-480x480.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_80k_pascal_context_59/deeplabv3_r101-d8_480x480_80k_pascal_context_59_20210416_113002-26303993.pth -- Name: deeplabv3_r50-d8_4xb4-20k_coco-stuff10k-512x512 - In Collection: DeepLabV3 - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 20000 - inference time (ms/im): - - value: 92.59 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 9.6 - Results: - - Task: Semantic Segmentation - Dataset: COCO-Stuff 10k - Metrics: - mIoU: 34.66 - mIoU(ms+flip): 36.08 - Config: configs/deeplabv3/deeplabv3_r50-d8_4xb4-20k_coco-stuff10k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_20k_coco-stuff10k/deeplabv3_r50-d8_512x512_4x4_20k_coco-stuff10k_20210821_043025-b35f789d.pth -- Name: deeplabv3_r101-d8_4xb4-20k_coco-stuff10k-512x512 - In Collection: DeepLabV3 - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 20000 - inference time (ms/im): - - value: 114.94 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 13.2 - Results: - - Task: Semantic Segmentation - Dataset: COCO-Stuff 10k - Metrics: - mIoU: 37.3 - mIoU(ms+flip): 38.42 - Config: configs/deeplabv3/deeplabv3_r101-d8_4xb4-20k_coco-stuff10k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_20k_coco-stuff10k/deeplabv3_r101-d8_512x512_4x4_20k_coco-stuff10k_20210821_043025-c49752cb.pth -- Name: deeplabv3_r50-d8_4xb4-40k_coco-stuff10k-512x512 - In Collection: DeepLabV3 - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 40000 - Results: - - Task: Semantic Segmentation - Dataset: COCO-Stuff 10k - Metrics: - mIoU: 35.73 - mIoU(ms+flip): 37.09 - Config: configs/deeplabv3/deeplabv3_r50-d8_4xb4-40k_coco-stuff10k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_40k_coco-stuff10k/deeplabv3_r50-d8_512x512_4x4_40k_coco-stuff10k_20210821_043305-dc76f3ff.pth -- Name: deeplabv3_r101-d8_4xb4-40k_coco-stuff10k-512x512 - In Collection: DeepLabV3 - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 40000 - Results: - - Task: Semantic Segmentation - Dataset: COCO-Stuff 10k - Metrics: - mIoU: 37.81 - mIoU(ms+flip): 38.8 - Config: configs/deeplabv3/deeplabv3_r101-d8_4xb4-40k_coco-stuff10k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_40k_coco-stuff10k/deeplabv3_r101-d8_512x512_4x4_40k_coco-stuff10k_20210821_043305-636cb433.pth -- Name: deeplabv3_r50-d8_4xb4-80k_coco-stuff164k-512x512 - In Collection: DeepLabV3 - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 92.59 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 9.6 - Results: - - Task: Semantic Segmentation - Dataset: COCO-Stuff 164k - Metrics: - mIoU: 39.38 - mIoU(ms+flip): 40.03 - Config: configs/deeplabv3/deeplabv3_r50-d8_4xb4-80k_coco-stuff164k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_80k_coco-stuff164k/deeplabv3_r50-d8_512x512_4x4_80k_coco-stuff164k_20210709_163016-88675c24.pth -- Name: deeplabv3_r101-d8_4xb4-80k_coco-stuff164k-512x512 - In Collection: DeepLabV3 - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 114.94 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 13.2 - Results: - - Task: Semantic Segmentation - Dataset: COCO-Stuff 164k - Metrics: - mIoU: 40.87 - mIoU(ms+flip): 41.5 - Config: configs/deeplabv3/deeplabv3_r101-d8_4xb4-80k_coco-stuff164k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_80k_coco-stuff164k/deeplabv3_r101-d8_512x512_4x4_80k_coco-stuff164k_20210709_201252-13600dc2.pth -- Name: deeplabv3_r50-d8_4xb4-160k_coco-stuff164k-512x512 - In Collection: DeepLabV3 - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: COCO-Stuff 164k - Metrics: - mIoU: 41.09 - mIoU(ms+flip): 41.69 - Config: configs/deeplabv3/deeplabv3_r50-d8_4xb4-160k_coco-stuff164k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_160k_coco-stuff164k/deeplabv3_r50-d8_512x512_4x4_160k_coco-stuff164k_20210709_163016-49f2812b.pth -- Name: deeplabv3_r101-d8_4xb4-160k_coco-stuff164k-512x512 - In Collection: DeepLabV3 - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: COCO-Stuff 164k - Metrics: - mIoU: 41.82 - mIoU(ms+flip): 42.49 - Config: configs/deeplabv3/deeplabv3_r101-d8_4xb4-160k_coco-stuff164k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_160k_coco-stuff164k/deeplabv3_r101-d8_512x512_4x4_160k_coco-stuff164k_20210709_155402-f035acfd.pth -- Name: deeplabv3_r50-d8_4xb4-320k_coco-stuff164k-512x512 - In Collection: DeepLabV3 - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 320000 - Results: - - Task: Semantic Segmentation - Dataset: COCO-Stuff 164k - Metrics: - mIoU: 41.37 - mIoU(ms+flip): 42.22 - Config: configs/deeplabv3/deeplabv3_r50-d8_4xb4-320k_coco-stuff164k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_320k_coco-stuff164k/deeplabv3_r50-d8_512x512_4x4_320k_coco-stuff164k_20210709_155403-51b21115.pth -- Name: deeplabv3_r101-d8_4xb4-320k_coco-stuff164k-512x512 - In Collection: DeepLabV3 - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 320000 - Results: - - Task: Semantic Segmentation - Dataset: COCO-Stuff 164k - Metrics: - mIoU: 42.61 - mIoU(ms+flip): 43.42 - Config: configs/deeplabv3/deeplabv3_r101-d8_4xb4-320k_coco-stuff164k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_320k_coco-stuff164k/deeplabv3_r101-d8_512x512_4x4_320k_coco-stuff164k_20210709_155402-3cbca14d.pth diff --git a/configs/deeplabv3/metafile.yaml b/configs/deeplabv3/metafile.yaml new file mode 100644 index 0000000000..650f7d695d --- /dev/null +++ b/configs/deeplabv3/metafile.yaml @@ -0,0 +1,985 @@ +Collections: +- Name: DeepLabV3 + License: Apache License 2.0 + Metadata: + Training Data: + - Cityscapes + - ADE20K + - Pascal VOC 2012 + Aug + - Pascal Context + - Pascal Context 59 + - COCO-Stuff 10k + - COCO-Stuff 164k + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + README: configs/deeplabv3/README.md + Frameworks: + - PyTorch +Models: +- Name: deeplabv3_r50-d8_4xb2-40k_cityscapes-512x1024 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.09 + mIoU(ms+flip): 80.45 + Config: configs/deeplabv3/deeplabv3_r50-d8_4xb2-40k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Memory (GB): 6.1 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x1024_40k_cityscapes/deeplabv3_r50-d8_512x1024_40k_cityscapes_20200605_022449-acadc2f8.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x1024_40k_cityscapes/deeplabv3_r50-d8_512x1024_40k_cityscapes_20200605_022449.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r101-d8_4xb2-40k_cityscapes-512x1024 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 77.12 + mIoU(ms+flip): 79.61 + Config: configs/deeplabv3/deeplabv3_r101-d8_4xb2-40k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Memory (GB): 9.6 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x1024_40k_cityscapes/deeplabv3_r101-d8_512x1024_40k_cityscapes_20200605_012241-7fd3f799.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x1024_40k_cityscapes/deeplabv3_r101-d8_512x1024_40k_cityscapes_20200605_012241.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r50-d8_4xb2-40k_cityscapes-769x769 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.58 + mIoU(ms+flip): 79.89 + Config: configs/deeplabv3/deeplabv3_r50-d8_4xb2-40k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Memory (GB): 6.9 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_769x769_40k_cityscapes/deeplabv3_r50-d8_769x769_40k_cityscapes_20200606_113723-7eda553c.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_769x769_40k_cityscapes/deeplabv3_r50-d8_769x769_40k_cityscapes_20200606_113723.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r101-d8_4xb2-40k_cityscapes-769x769 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.27 + mIoU(ms+flip): 80.11 + Config: configs/deeplabv3/deeplabv3_r101-d8_4xb2-40k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Memory (GB): 10.9 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_769x769_40k_cityscapes/deeplabv3_r101-d8_769x769_40k_cityscapes_20200606_113809-c64f889f.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_769x769_40k_cityscapes/deeplabv3_r101-d8_769x769_40k_cityscapes_20200606_113809.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r18-d8_4xb2-80k_cityscapes-512x1024 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 76.7 + mIoU(ms+flip): 78.27 + Config: configs/deeplabv3/deeplabv3_r18-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-18-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Memory (GB): 1.7 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18-d8_512x1024_80k_cityscapes/deeplabv3_r18-d8_512x1024_80k_cityscapes_20201225_021506-23dffbe2.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18-d8_512x1024_80k_cityscapes/deeplabv3_r18-d8_512x1024_80k_cityscapes-20201225_021506.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r50-d8_4xb2-80k_cityscapes-512x1024 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.32 + mIoU(ms+flip): 80.57 + Config: configs/deeplabv3/deeplabv3_r50-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x1024_80k_cityscapes/deeplabv3_r50-d8_512x1024_80k_cityscapes_20200606_113404-b92cfdd4.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x1024_80k_cityscapes/deeplabv3_r50-d8_512x1024_80k_cityscapes_20200606_113404.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r101-d8_4xb2-80k_cityscapes-512x1024 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 80.2 + mIoU(ms+flip): 81.21 + Config: configs/deeplabv3/deeplabv3_r101-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x1024_80k_cityscapes/deeplabv3_r101-d8_512x1024_80k_cityscapes_20200606_113503-9e428899.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x1024_80k_cityscapes/deeplabv3_r101-d8_512x1024_80k_cityscapes_20200606_113503.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r101-d8_4xb2-amp-80k_cityscapes-512x1024 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 80.48 + Config: configs/deeplabv3/deeplabv3_r101-d8_4xb2-amp-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - DeepLabV3 + - (FP16) + Training Resources: 4x V100 GPUS + Memory (GB): 5.75 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_fp16_512x1024_80k_cityscapes/deeplabv3_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230920-774d9cec.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_fp16_512x1024_80k_cityscapes/deeplabv3_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230920.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r18-d8_4xb2-80k_cityscapes-769x769 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 76.6 + mIoU(ms+flip): 78.26 + Config: configs/deeplabv3/deeplabv3_r18-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-18-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Memory (GB): 1.9 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18-d8_769x769_80k_cityscapes/deeplabv3_r18-d8_769x769_80k_cityscapes_20201225_021506-6452126a.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18-d8_769x769_80k_cityscapes/deeplabv3_r18-d8_769x769_80k_cityscapes-20201225_021506.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r50-d8_4xb2-80k_cityscapes-769x769 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.89 + mIoU(ms+flip): 81.06 + Config: configs/deeplabv3/deeplabv3_r50-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_769x769_80k_cityscapes/deeplabv3_r50-d8_769x769_80k_cityscapes_20200606_221338-788d6228.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_769x769_80k_cityscapes/deeplabv3_r50-d8_769x769_80k_cityscapes_20200606_221338.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r101-d8_4xb2-80k_cityscapes-769x769 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.67 + mIoU(ms+flip): 80.81 + Config: configs/deeplabv3/deeplabv3_r101-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_769x769_80k_cityscapes/deeplabv3_r101-d8_769x769_80k_cityscapes_20200607_013353-60e95418.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_769x769_80k_cityscapes/deeplabv3_r101-d8_769x769_80k_cityscapes_20200607_013353.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r101-d16-mg124_4xb2-40k_cityscapes-512x1024 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 76.71 + mIoU(ms+flip): 78.63 + Config: configs/deeplabv3/deeplabv3_r101-d16-mg124_4xb2-40k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D16-MG124 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Memory (GB): 4.7 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d16-mg124_512x1024_40k_cityscapes/deeplabv3_r101-d16-mg124_512x1024_40k_cityscapes_20200908_005644-67b0c992.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d16-mg124_512x1024_40k_cityscapes/deeplabv3_r101-d16-mg124_512x1024_40k_cityscapes-20200908_005644.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r101-d16-mg124_4xb2-80k_cityscapes-512x1024 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.36 + mIoU(ms+flip): 79.84 + Config: configs/deeplabv3/deeplabv3_r101-d16-mg124_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D16-MG124 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d16-mg124_512x1024_80k_cityscapes/deeplabv3_r101-d16-mg124_512x1024_80k_cityscapes_20200908_005644-57bb8425.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d16-mg124_512x1024_80k_cityscapes/deeplabv3_r101-d16-mg124_512x1024_80k_cityscapes-20200908_005644.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r18b-d8_4xb2-80k_cityscapes-512x1024 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 76.26 + mIoU(ms+flip): 77.88 + Config: configs/deeplabv3/deeplabv3_r18b-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-18b-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Memory (GB): 1.6 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18b-d8_512x1024_80k_cityscapes/deeplabv3_r18b-d8_512x1024_80k_cityscapes_20201225_094144-46040cef.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18b-d8_512x1024_80k_cityscapes/deeplabv3_r18b-d8_512x1024_80k_cityscapes-20201225_094144.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r50b-d8_4xb2-80k_cityscapes-512x1024 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.63 + mIoU(ms+flip): 80.98 + Config: configs/deeplabv3/deeplabv3_r50b-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50b-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Memory (GB): 6.0 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50b-d8_512x1024_80k_cityscapes/deeplabv3_r50b-d8_512x1024_80k_cityscapes_20201225_155148-ec368954.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50b-d8_512x1024_80k_cityscapes/deeplabv3_r50b-d8_512x1024_80k_cityscapes-20201225_155148.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r101b-d8_4xb2-80k_cityscapes-512x1024 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 80.01 + mIoU(ms+flip): 81.21 + Config: configs/deeplabv3/deeplabv3_r101b-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101b-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Memory (GB): 9.5 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101b-d8_512x1024_80k_cityscapes/deeplabv3_r101b-d8_512x1024_80k_cityscapes_20201226_171821-8fd49503.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101b-d8_512x1024_80k_cityscapes/deeplabv3_r101b-d8_512x1024_80k_cityscapes-20201226_171821.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r18b-d8_4xb2-80k_cityscapes-769x769 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 75.63 + mIoU(ms+flip): 77.51 + Config: configs/deeplabv3/deeplabv3_r18b-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-18b-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Memory (GB): 1.8 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18b-d8_769x769_80k_cityscapes/deeplabv3_r18b-d8_769x769_80k_cityscapes_20201225_094144-fdc985d9.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18b-d8_769x769_80k_cityscapes/deeplabv3_r18b-d8_769x769_80k_cityscapes-20201225_094144.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r50b-d8_4xb2-80k_cityscapes-769x769 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.8 + mIoU(ms+flip): 80.27 + Config: configs/deeplabv3/deeplabv3_r50b-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50b-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Memory (GB): 6.8 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50b-d8_769x769_80k_cityscapes/deeplabv3_r50b-d8_769x769_80k_cityscapes_20201225_155404-87fb0cf4.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50b-d8_769x769_80k_cityscapes/deeplabv3_r50b-d8_769x769_80k_cityscapes-20201225_155404.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r101b-d8_4xb2-80k_cityscapes-769x769 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.41 + mIoU(ms+flip): 80.73 + Config: configs/deeplabv3/deeplabv3_r101b-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101b-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Memory (GB): 10.7 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101b-d8_769x769_80k_cityscapes/deeplabv3_r101b-d8_769x769_80k_cityscapes_20201226_190843-9142ee57.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101b-d8_769x769_80k_cityscapes/deeplabv3_r101b-d8_769x769_80k_cityscapes-20201226_190843.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r50-d8_4xb4-80k_ade20k-512x512 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 42.42 + mIoU(ms+flip): 43.28 + Config: configs/deeplabv3/deeplabv3_r50-d8_4xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Memory (GB): 8.9 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_80k_ade20k/deeplabv3_r50-d8_512x512_80k_ade20k_20200614_185028-0bb3f844.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_80k_ade20k/deeplabv3_r50-d8_512x512_80k_ade20k_20200614_185028.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r101-d8_4xb4-80k_ade20k-512x512 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 44.08 + mIoU(ms+flip): 45.19 + Config: configs/deeplabv3/deeplabv3_r101-d8_4xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-101-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Memory (GB): 12.4 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_80k_ade20k/deeplabv3_r101-d8_512x512_80k_ade20k_20200615_021256-d89c7fa4.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_80k_ade20k/deeplabv3_r101-d8_512x512_80k_ade20k_20200615_021256.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r50-d8_4xb4-160k_ade20k-512x512 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 42.66 + mIoU(ms+flip): 44.09 + Config: configs/deeplabv3/deeplabv3_r50-d8_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_160k_ade20k/deeplabv3_r50-d8_512x512_160k_ade20k_20200615_123227-5d0ee427.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_160k_ade20k/deeplabv3_r50-d8_512x512_160k_ade20k_20200615_123227.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r101-d8_4xb4-160k_ade20k-512x512 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 45.0 + mIoU(ms+flip): 46.66 + Config: configs/deeplabv3/deeplabv3_r101-d8_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-101-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_160k_ade20k/deeplabv3_r101-d8_512x512_160k_ade20k_20200615_105816-b1f72b3b.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_160k_ade20k/deeplabv3_r101-d8_512x512_160k_ade20k_20200615_105816.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r50-d8_4xb4-20k_voc12aug-512x512 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 76.17 + mIoU(ms+flip): 77.42 + Config: configs/deeplabv3/deeplabv3_r50-d8_4xb4-20k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - R-50-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Memory (GB): 6.1 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_20k_voc12aug/deeplabv3_r50-d8_512x512_20k_voc12aug_20200617_010906-596905ef.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_20k_voc12aug/deeplabv3_r50-d8_512x512_20k_voc12aug_20200617_010906.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r101-d8_4xb4-20k_voc12aug-512x512 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 78.7 + mIoU(ms+flip): 79.95 + Config: configs/deeplabv3/deeplabv3_r101-d8_4xb4-20k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - R-101-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Memory (GB): 9.6 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_20k_voc12aug/deeplabv3_r101-d8_512x512_20k_voc12aug_20200617_010932-8d13832f.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_20k_voc12aug/deeplabv3_r101-d8_512x512_20k_voc12aug_20200617_010932.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r50-d8_4xb4-40k_voc12aug-512x512 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 77.68 + mIoU(ms+flip): 78.78 + Config: configs/deeplabv3/deeplabv3_r50-d8_4xb4-40k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - R-50-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_40k_voc12aug/deeplabv3_r50-d8_512x512_40k_voc12aug_20200613_161546-2ae96e7e.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_40k_voc12aug/deeplabv3_r50-d8_512x512_40k_voc12aug_20200613_161546.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r101-d8_4xb4-40k_voc12aug-512x512 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 77.92 + mIoU(ms+flip): 79.18 + Config: configs/deeplabv3/deeplabv3_r101-d8_4xb4-40k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - R-101-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_40k_voc12aug/deeplabv3_r101-d8_512x512_40k_voc12aug_20200613_161432-0017d784.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_40k_voc12aug/deeplabv3_r101-d8_512x512_40k_voc12aug_20200613_161432.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r101-d8_4xb4-40k_pascal-context-480x480 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: Pascal Context + Metrics: + mIoU: 46.55 + mIoU(ms+flip): 47.81 + Config: configs/deeplabv3/deeplabv3_r101-d8_4xb4-40k_pascal-context-480x480.py + Metadata: + Training Data: Pascal Context + Batch Size: 16 + Architecture: + - R-101-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Memory (GB): 9.2 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_40k_pascal_context/deeplabv3_r101-d8_480x480_40k_pascal_context_20200911_204118-1aa27336.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_40k_pascal_context/deeplabv3_r101-d8_480x480_40k_pascal_context-20200911_204118.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r101-d8_4xb4-80k_pascal-context-480x480 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: Pascal Context + Metrics: + mIoU: 46.42 + mIoU(ms+flip): 47.53 + Config: configs/deeplabv3/deeplabv3_r101-d8_4xb4-80k_pascal-context-480x480.py + Metadata: + Training Data: Pascal Context + Batch Size: 16 + Architecture: + - R-101-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_80k_pascal_context/deeplabv3_r101-d8_480x480_80k_pascal_context_20200911_170155-2a21fff3.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_80k_pascal_context/deeplabv3_r101-d8_480x480_80k_pascal_context-20200911_170155.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r101-d8_4xb4-40k_pascal-context-59-480x480 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: Pascal Context 59 + Metrics: + mIoU: 52.61 + mIoU(ms+flip): 54.28 + Config: configs/deeplabv3/deeplabv3_r101-d8_4xb4-40k_pascal-context-59-480x480.py + Metadata: + Training Data: Pascal Context 59 + Batch Size: 16 + Architecture: + - R-101-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_40k_pascal_context_59/deeplabv3_r101-d8_480x480_40k_pascal_context_59_20210416_110332-cb08ea46.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_40k_pascal_context_59/deeplabv3_r101-d8_480x480_40k_pascal_context_59-20210416_110332.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r101-d8_4xb4-80k_pascal-context-59-480x480 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: Pascal Context 59 + Metrics: + mIoU: 52.46 + mIoU(ms+flip): 54.09 + Config: configs/deeplabv3/deeplabv3_r101-d8_4xb4-80k_pascal-context-59-480x480.py + Metadata: + Training Data: Pascal Context 59 + Batch Size: 16 + Architecture: + - R-101-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_80k_pascal_context_59/deeplabv3_r101-d8_480x480_80k_pascal_context_59_20210416_113002-26303993.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_80k_pascal_context_59/deeplabv3_r101-d8_480x480_80k_pascal_context_59-20210416_113002.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r50-d8_4xb4-20k_coco-stuff10k-512x512 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: COCO-Stuff 10k + Metrics: + mIoU: 34.66 + mIoU(ms+flip): 36.08 + Config: configs/deeplabv3/deeplabv3_r50-d8_4xb4-20k_coco-stuff10k-512x512.py + Metadata: + Training Data: COCO-Stuff 10k + Batch Size: 16 + Architecture: + - R-50-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Memory (GB): 9.6 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_20k_coco-stuff10k/deeplabv3_r50-d8_512x512_4x4_20k_coco-stuff10k_20210821_043025-b35f789d.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_20k_coco-stuff10k/deeplabv3_r50-d8_512x512_4x4_20k_coco-stuff10k_20210821_043025.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r101-d8_4xb4-20k_coco-stuff10k-512x512 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: COCO-Stuff 10k + Metrics: + mIoU: 37.3 + mIoU(ms+flip): 38.42 + Config: configs/deeplabv3/deeplabv3_r101-d8_4xb4-20k_coco-stuff10k-512x512.py + Metadata: + Training Data: COCO-Stuff 10k + Batch Size: 16 + Architecture: + - R-101-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Memory (GB): 13.2 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_20k_coco-stuff10k/deeplabv3_r101-d8_512x512_4x4_20k_coco-stuff10k_20210821_043025-c49752cb.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_20k_coco-stuff10k/deeplabv3_r101-d8_512x512_4x4_20k_coco-stuff10k_20210821_043025.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r50-d8_4xb4-40k_coco-stuff10k-512x512 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: COCO-Stuff 10k + Metrics: + mIoU: 35.73 + mIoU(ms+flip): 37.09 + Config: configs/deeplabv3/deeplabv3_r50-d8_4xb4-40k_coco-stuff10k-512x512.py + Metadata: + Training Data: COCO-Stuff 10k + Batch Size: 16 + Architecture: + - R-50-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_40k_coco-stuff10k/deeplabv3_r50-d8_512x512_4x4_40k_coco-stuff10k_20210821_043305-dc76f3ff.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_40k_coco-stuff10k/deeplabv3_r50-d8_512x512_4x4_40k_coco-stuff10k_20210821_043305.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r101-d8_4xb4-40k_coco-stuff10k-512x512 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: COCO-Stuff 10k + Metrics: + mIoU: 37.81 + mIoU(ms+flip): 38.8 + Config: configs/deeplabv3/deeplabv3_r101-d8_4xb4-40k_coco-stuff10k-512x512.py + Metadata: + Training Data: COCO-Stuff 10k + Batch Size: 16 + Architecture: + - R-101-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_40k_coco-stuff10k/deeplabv3_r101-d8_512x512_4x4_40k_coco-stuff10k_20210821_043305-636cb433.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_40k_coco-stuff10k/deeplabv3_r101-d8_512x512_4x4_40k_coco-stuff10k_20210821_043305.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r50-d8_4xb4-80k_coco-stuff164k-512x512 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: COCO-Stuff 164k + Metrics: + mIoU: 39.38 + mIoU(ms+flip): 40.03 + Config: configs/deeplabv3/deeplabv3_r50-d8_4xb4-80k_coco-stuff164k-512x512.py + Metadata: + Training Data: COCO-Stuff 164k + Batch Size: 16 + Architecture: + - R-50-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Memory (GB): 9.6 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_80k_coco-stuff164k/deeplabv3_r50-d8_512x512_4x4_80k_coco-stuff164k_20210709_163016-88675c24.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_80k_coco-stuff164k/deeplabv3_r50-d8_512x512_4x4_80k_coco-stuff164k_20210709_163016.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r101-d8_4xb4-80k_coco-stuff164k-512x512 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: COCO-Stuff 164k + Metrics: + mIoU: 40.87 + mIoU(ms+flip): 41.5 + Config: configs/deeplabv3/deeplabv3_r101-d8_4xb4-80k_coco-stuff164k-512x512.py + Metadata: + Training Data: COCO-Stuff 164k + Batch Size: 16 + Architecture: + - R-101-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Memory (GB): 13.2 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_80k_coco-stuff164k/deeplabv3_r101-d8_512x512_4x4_80k_coco-stuff164k_20210709_201252-13600dc2.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_80k_coco-stuff164k/deeplabv3_r101-d8_512x512_4x4_80k_coco-stuff164k_20210709_201252.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r50-d8_4xb4-160k_coco-stuff164k-512x512 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: COCO-Stuff 164k + Metrics: + mIoU: 41.09 + mIoU(ms+flip): 41.69 + Config: configs/deeplabv3/deeplabv3_r50-d8_4xb4-160k_coco-stuff164k-512x512.py + Metadata: + Training Data: COCO-Stuff 164k + Batch Size: 16 + Architecture: + - R-50-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_160k_coco-stuff164k/deeplabv3_r50-d8_512x512_4x4_160k_coco-stuff164k_20210709_163016-49f2812b.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_160k_coco-stuff164k/deeplabv3_r50-d8_512x512_4x4_160k_coco-stuff164k_20210709_163016.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r101-d8_4xb4-160k_coco-stuff164k-512x512 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: COCO-Stuff 164k + Metrics: + mIoU: 41.82 + mIoU(ms+flip): 42.49 + Config: configs/deeplabv3/deeplabv3_r101-d8_4xb4-160k_coco-stuff164k-512x512.py + Metadata: + Training Data: COCO-Stuff 164k + Batch Size: 16 + Architecture: + - R-101-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_160k_coco-stuff164k/deeplabv3_r101-d8_512x512_4x4_160k_coco-stuff164k_20210709_155402-f035acfd.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_160k_coco-stuff164k/deeplabv3_r101-d8_512x512_4x4_160k_coco-stuff164k_20210709_155402.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r50-d8_4xb4-320k_coco-stuff164k-512x512 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: COCO-Stuff 164k + Metrics: + mIoU: 41.37 + mIoU(ms+flip): 42.22 + Config: configs/deeplabv3/deeplabv3_r50-d8_4xb4-320k_coco-stuff164k-512x512.py + Metadata: + Training Data: COCO-Stuff 164k + Batch Size: 16 + Architecture: + - R-50-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_320k_coco-stuff164k/deeplabv3_r50-d8_512x512_4x4_320k_coco-stuff164k_20210709_155403-51b21115.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_320k_coco-stuff164k/deeplabv3_r50-d8_512x512_4x4_320k_coco-stuff164k_20210709_155403.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch +- Name: deeplabv3_r101-d8_4xb4-320k_coco-stuff164k-512x512 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: COCO-Stuff 164k + Metrics: + mIoU: 42.61 + mIoU(ms+flip): 43.42 + Config: configs/deeplabv3/deeplabv3_r101-d8_4xb4-320k_coco-stuff164k-512x512.py + Metadata: + Training Data: COCO-Stuff 164k + Batch Size: 16 + Architecture: + - R-101-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_320k_coco-stuff164k/deeplabv3_r101-d8_512x512_4x4_320k_coco-stuff164k_20210709_155402-3cbca14d.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_320k_coco-stuff164k/deeplabv3_r101-d8_512x512_4x4_320k_coco-stuff164k_20210709_155402.log.json + Paper: + Title: Rethinking atrous convolution for semantic image segmentation + URL: https://arxiv.org/abs/1706.05587 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/aspp_head.py#L54 + Framework: PyTorch diff --git a/configs/deeplabv3plus/README.md b/configs/deeplabv3plus/README.md index f60f547391..15c51a504a 100644 --- a/configs/deeplabv3plus/README.md +++ b/configs/deeplabv3plus/README.md @@ -1,6 +1,6 @@ # DeepLabV3+ -[Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation](https://arxiv.org/abs/1802.02611) +> [Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation](https://arxiv.org/abs/1802.02611) ## Introduction @@ -22,107 +22,96 @@ Spatial pyramid pooling module or encode-decoder structure are used in deep neur -## Citation - -```bibtex -@inproceedings{deeplabv3plus2018, - title={Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation}, - author={Liang-Chieh Chen and Yukun Zhu and George Papandreou and Florian Schroff and Hartwig Adam}, - booktitle={ECCV}, - year={2018} -} -``` - ## Results and models ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ----------------- | --------------- | --------- | ------: | -------- | -------------- | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| DeepLabV3+ | R-50-D8 | 512x1024 | 40000 | 7.5 | 3.94 | 79.61 | 81.01 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_40k_cityscapes/deeplabv3plus_r50-d8_512x1024_40k_cityscapes_20200605_094610-d222ffcd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_40k_cityscapes/deeplabv3plus_r50-d8_512x1024_40k_cityscapes_20200605_094610.log.json) | -| DeepLabV3+ | R-101-D8 | 512x1024 | 40000 | 11 | 2.60 | 80.21 | 81.82 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_40k_cityscapes/deeplabv3plus_r101-d8_512x1024_40k_cityscapes_20200605_094614-3769eecf.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_40k_cityscapes/deeplabv3plus_r101-d8_512x1024_40k_cityscapes_20200605_094614.log.json) | -| DeepLabV3+ | R-50-D8 | 769x769 | 40000 | 8.5 | 1.72 | 78.97 | 80.46 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_769x769_40k_cityscapes/deeplabv3plus_r50-d8_769x769_40k_cityscapes_20200606_114143-1dcb0e3c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_769x769_40k_cityscapes/deeplabv3plus_r50-d8_769x769_40k_cityscapes_20200606_114143.log.json) | -| DeepLabV3+ | R-101-D8 | 769x769 | 40000 | 12.5 | 1.15 | 79.46 | 80.50 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_769x769_40k_cityscapes/deeplabv3plus_r101-d8_769x769_40k_cityscapes_20200606_114304-ff414b9e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_769x769_40k_cityscapes/deeplabv3plus_r101-d8_769x769_40k_cityscapes_20200606_114304.log.json) | -| DeepLabV3+ | R-18-D8 | 512x1024 | 80000 | 2.2 | 14.27 | 76.89 | 78.76 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r18-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_512x1024_80k_cityscapes/deeplabv3plus_r18-d8_512x1024_80k_cityscapes_20201226_080942-cff257fe.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_512x1024_80k_cityscapes/deeplabv3plus_r18-d8_512x1024_80k_cityscapes-20201226_080942.log.json) | -| DeepLabV3+ | R-50-D8 | 512x1024 | 80000 | - | - | 80.09 | 81.13 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_80k_cityscapes/deeplabv3plus_r50-d8_512x1024_80k_cityscapes_20200606_114049-f9fb496d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_80k_cityscapes/deeplabv3plus_r50-d8_512x1024_80k_cityscapes_20200606_114049.log.json) | -| DeepLabV3+ | R-101-D8 | 512x1024 | 80000 | - | - | 80.97 | 82.03 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_80k_cityscapes/deeplabv3plus_r101-d8_512x1024_80k_cityscapes_20200606_114143-068fcfe9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_80k_cityscapes/deeplabv3plus_r101-d8_512x1024_80k_cityscapes_20200606_114143.log.json) | -| DeepLabV3+ (FP16) | R-101-D8 | 512x1024 | 80000 | 6.35 | 7.87 | 80.46 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb2-amp-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_fp16_512x1024_80k_cityscapes/deeplabv3plus_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230920-f1104f4b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_fp16_512x1024_80k_cityscapes/deeplabv3plus_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230920.log.json) | -| DeepLabV3+ | R-18-D8 | 769x769 | 80000 | 2.5 | 5.74 | 76.26 | 77.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r18-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_769x769_80k_cityscapes/deeplabv3plus_r18-d8_769x769_80k_cityscapes_20201226_083346-f326e06a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_769x769_80k_cityscapes/deeplabv3plus_r18-d8_769x769_80k_cityscapes-20201226_083346.log.json) | -| DeepLabV3+ | R-50-D8 | 769x769 | 80000 | - | - | 79.83 | 81.48 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_769x769_80k_cityscapes/deeplabv3plus_r50-d8_769x769_80k_cityscapes_20200606_210233-0e9dfdc4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_769x769_80k_cityscapes/deeplabv3plus_r50-d8_769x769_80k_cityscapes_20200606_210233.log.json) | -| DeepLabV3+ | R-101-D8 | 769x769 | 80000 | - | - | 80.65 | 81.47 | [config\[1\]](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_769x769_80k_cityscapes/deeplabv3plus_r101-d8_769x769_80k_cityscapes_20220406_154720-dfcc0b68.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_769x769_80k_cityscapes/deeplabv3plus_r101-d8_769x769_80k_cityscapes_20220406_154720.log.json) | -| DeepLabV3+ | R-101-D16-MG124 | 512x1024 | 40000 | 5.8 | 7.48 | 79.09 | 80.36 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/ddeeplabv3plus_r101-d16-mg124_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d16-mg124_512x1024_40k_cityscapes/deeplabv3plus_r101-d16-mg124_512x1024_40k_cityscapes_20200908_005644-cf9ce186.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d16-mg124_512x1024_40k_cityscapes/deeplabv3plus_r101-d16-mg124_512x1024_40k_cityscapes-20200908_005644.log.json) | -| DeepLabV3+ | R-101-D16-MG124 | 512x1024 | 80000 | 9.9 | - | 79.90 | 81.33 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d16-mg124_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d16-mg124_512x1024_80k_cityscapes/deeplabv3plus_r101-d16-mg124_512x1024_80k_cityscapes_20200908_005644-ee6158e0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d16-mg124_512x1024_80k_cityscapes/deeplabv3plus_r101-d16-mg124_512x1024_80k_cityscapes-20200908_005644.log.json) | -| DeepLabV3+ | R-18b-D8 | 512x1024 | 80000 | 2.1 | 14.95 | 75.87 | 77.52 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r18b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18b-d8_512x1024_80k_cityscapes/deeplabv3plus_r18b-d8_512x1024_80k_cityscapes_20201226_090828-e451abd9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18b-d8_512x1024_80k_cityscapes/deeplabv3plus_r18b-d8_512x1024_80k_cityscapes-20201226_090828.log.json) | -| DeepLabV3+ | R-50b-D8 | 512x1024 | 80000 | 7.4 | 3.94 | 80.28 | 81.44 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50b-d8_512x1024_80k_cityscapes/deeplabv3plus_r50b-d8_512x1024_80k_cityscapes_20201225_213645-a97e4e43.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50b-d8_512x1024_80k_cityscapes/deeplabv3plus_r50b-d8_512x1024_80k_cityscapes-20201225_213645.log.json) | -| DeepLabV3+ | R-101b-D8 | 512x1024 | 80000 | 10.9 | 2.60 | 80.16 | 81.41 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101b-d8_512x1024_80k_cityscapes/deeplabv3plus_r101b-d8_512x1024_80k_cityscapes_20201226_190843-9c3c93a4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101b-d8_512x1024_80k_cityscapes/deeplabv3plus_r101b-d8_512x1024_80k_cityscapes-20201226_190843.log.json) | -| DeepLabV3+ | R-18b-D8 | 769x769 | 80000 | 2.4 | 5.96 | 76.36 | 78.24 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r18b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18b-d8_769x769_80k_cityscapes/deeplabv3plus_r18b-d8_769x769_80k_cityscapes_20201226_151312-2c868aff.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18b-d8_769x769_80k_cityscapes/deeplabv3plus_r18b-d8_769x769_80k_cityscapes-20201226_151312.log.json) | -| DeepLabV3+ | R-50b-D8 | 769x769 | 80000 | 8.4 | 1.72 | 79.41 | 80.56 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50b-d8_769x769_80k_cityscapes/deeplabv3plus_r50b-d8_769x769_80k_cityscapes_20201225_224655-8b596d1c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50b-d8_769x769_80k_cityscapes/deeplabv3plus_r50b-d8_769x769_80k_cityscapes-20201225_224655.log.json) | -| DeepLabV3+ | R-101b-D8 | 769x769 | 80000 | 12.3 | 1.10 | 79.88 | 81.46 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101b-d8_769x769_80k_cityscapes/deeplabv3plus_r101b-d8_769x769_80k_cityscapes_20201226_205041-227cdf7c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101b-d8_769x769_80k_cityscapes/deeplabv3plus_r101b-d8_769x769_80k_cityscapes-20201226_205041.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ----------------- | --------------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| DeepLabV3+ | R-50-D8 | 512x1024 | 40000 | 7.5 | 3.94 | V100 | 79.61 | 81.01 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_40k_cityscapes/deeplabv3plus_r50-d8_512x1024_40k_cityscapes_20200605_094610-d222ffcd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_40k_cityscapes/deeplabv3plus_r50-d8_512x1024_40k_cityscapes_20200605_094610.log.json) | +| DeepLabV3+ | R-101-D8 | 512x1024 | 40000 | 11 | 2.60 | V100 | 80.21 | 81.82 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_40k_cityscapes/deeplabv3plus_r101-d8_512x1024_40k_cityscapes_20200605_094614-3769eecf.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_40k_cityscapes/deeplabv3plus_r101-d8_512x1024_40k_cityscapes_20200605_094614.log.json) | +| DeepLabV3+ | R-50-D8 | 769x769 | 40000 | 8.5 | 1.72 | V100 | 78.97 | 80.46 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_769x769_40k_cityscapes/deeplabv3plus_r50-d8_769x769_40k_cityscapes_20200606_114143-1dcb0e3c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_769x769_40k_cityscapes/deeplabv3plus_r50-d8_769x769_40k_cityscapes_20200606_114143.log.json) | +| DeepLabV3+ | R-101-D8 | 769x769 | 40000 | 12.5 | 1.15 | V100 | 79.46 | 80.50 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_769x769_40k_cityscapes/deeplabv3plus_r101-d8_769x769_40k_cityscapes_20200606_114304-ff414b9e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_769x769_40k_cityscapes/deeplabv3plus_r101-d8_769x769_40k_cityscapes_20200606_114304.log.json) | +| DeepLabV3+ | R-18-D8 | 512x1024 | 80000 | 2.2 | 14.27 | V100 | 76.89 | 78.76 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r18-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_512x1024_80k_cityscapes/deeplabv3plus_r18-d8_512x1024_80k_cityscapes_20201226_080942-cff257fe.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_512x1024_80k_cityscapes/deeplabv3plus_r18-d8_512x1024_80k_cityscapes-20201226_080942.log.json) | +| DeepLabV3+ | R-50-D8 | 512x1024 | 80000 | - | - | V100 | 80.09 | 81.13 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_80k_cityscapes/deeplabv3plus_r50-d8_512x1024_80k_cityscapes_20200606_114049-f9fb496d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_80k_cityscapes/deeplabv3plus_r50-d8_512x1024_80k_cityscapes_20200606_114049.log.json) | +| DeepLabV3+ | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 80.97 | 82.03 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_80k_cityscapes/deeplabv3plus_r101-d8_512x1024_80k_cityscapes_20200606_114143-068fcfe9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_80k_cityscapes/deeplabv3plus_r101-d8_512x1024_80k_cityscapes_20200606_114143.log.json) | +| DeepLabV3+ (FP16) | R-101-D8 | 512x1024 | 80000 | 6.35 | 7.87 | V100 | 80.46 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb2-amp-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_fp16_512x1024_80k_cityscapes/deeplabv3plus_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230920-f1104f4b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_fp16_512x1024_80k_cityscapes/deeplabv3plus_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230920.log.json) | +| DeepLabV3+ | R-18-D8 | 769x769 | 80000 | 2.5 | 5.74 | V100 | 76.26 | 77.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r18-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_769x769_80k_cityscapes/deeplabv3plus_r18-d8_769x769_80k_cityscapes_20201226_083346-f326e06a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_769x769_80k_cityscapes/deeplabv3plus_r18-d8_769x769_80k_cityscapes-20201226_083346.log.json) | +| DeepLabV3+ | R-50-D8 | 769x769 | 80000 | - | - | V100 | 79.83 | 81.48 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_769x769_80k_cityscapes/deeplabv3plus_r50-d8_769x769_80k_cityscapes_20200606_210233-0e9dfdc4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_769x769_80k_cityscapes/deeplabv3plus_r50-d8_769x769_80k_cityscapes_20200606_210233.log.json) | +| DeepLabV3+ | R-101-D8 | 769x769 | 80000 | - | - | V100 | 80.65 | 81.47 | [config\[1\]](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_769x769_80k_cityscapes/deeplabv3plus_r101-d8_769x769_80k_cityscapes_20220406_154720-dfcc0b68.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_769x769_80k_cityscapes/deeplabv3plus_r101-d8_769x769_80k_cityscapes_20220406_154720.log.json) | +| DeepLabV3+ | R-101-D16-MG124 | 512x1024 | 40000 | 5.8 | 7.48 | V100 | 79.09 | 80.36 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/ddeeplabv3plus_r101-d16-mg124_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d16-mg124_512x1024_40k_cityscapes/deeplabv3plus_r101-d16-mg124_512x1024_40k_cityscapes_20200908_005644-cf9ce186.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d16-mg124_512x1024_40k_cityscapes/deeplabv3plus_r101-d16-mg124_512x1024_40k_cityscapes-20200908_005644.log.json) | +| DeepLabV3+ | R-101-D16-MG124 | 512x1024 | 80000 | 9.9 | - | V100 | 79.90 | 81.33 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d16-mg124_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d16-mg124_512x1024_80k_cityscapes/deeplabv3plus_r101-d16-mg124_512x1024_80k_cityscapes_20200908_005644-ee6158e0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d16-mg124_512x1024_80k_cityscapes/deeplabv3plus_r101-d16-mg124_512x1024_80k_cityscapes-20200908_005644.log.json) | +| DeepLabV3+ | R-18b-D8 | 512x1024 | 80000 | 2.1 | 14.95 | V100 | 75.87 | 77.52 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r18b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18b-d8_512x1024_80k_cityscapes/deeplabv3plus_r18b-d8_512x1024_80k_cityscapes_20201226_090828-e451abd9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18b-d8_512x1024_80k_cityscapes/deeplabv3plus_r18b-d8_512x1024_80k_cityscapes-20201226_090828.log.json) | +| DeepLabV3+ | R-50b-D8 | 512x1024 | 80000 | 7.4 | 3.94 | V100 | 80.28 | 81.44 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50b-d8_512x1024_80k_cityscapes/deeplabv3plus_r50b-d8_512x1024_80k_cityscapes_20201225_213645-a97e4e43.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50b-d8_512x1024_80k_cityscapes/deeplabv3plus_r50b-d8_512x1024_80k_cityscapes-20201225_213645.log.json) | +| DeepLabV3+ | R-101b-D8 | 512x1024 | 80000 | 10.9 | 2.60 | V100 | 80.16 | 81.41 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101b-d8_512x1024_80k_cityscapes/deeplabv3plus_r101b-d8_512x1024_80k_cityscapes_20201226_190843-9c3c93a4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101b-d8_512x1024_80k_cityscapes/deeplabv3plus_r101b-d8_512x1024_80k_cityscapes-20201226_190843.log.json) | +| DeepLabV3+ | R-18b-D8 | 769x769 | 80000 | 2.4 | 5.96 | V100 | 76.36 | 78.24 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r18b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18b-d8_769x769_80k_cityscapes/deeplabv3plus_r18b-d8_769x769_80k_cityscapes_20201226_151312-2c868aff.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18b-d8_769x769_80k_cityscapes/deeplabv3plus_r18b-d8_769x769_80k_cityscapes-20201226_151312.log.json) | +| DeepLabV3+ | R-50b-D8 | 769x769 | 80000 | 8.4 | 1.72 | V100 | 79.41 | 80.56 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50b-d8_769x769_80k_cityscapes/deeplabv3plus_r50b-d8_769x769_80k_cityscapes_20201225_224655-8b596d1c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50b-d8_769x769_80k_cityscapes/deeplabv3plus_r50b-d8_769x769_80k_cityscapes-20201225_224655.log.json) | +| DeepLabV3+ | R-101b-D8 | 769x769 | 80000 | 12.3 | 1.10 | V100 | 79.88 | 81.46 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101b-d8_769x769_80k_cityscapes/deeplabv3plus_r101b-d8_769x769_80k_cityscapes_20201226_205041-227cdf7c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101b-d8_769x769_80k_cityscapes/deeplabv3plus_r101b-d8_769x769_80k_cityscapes-20201226_205041.log.json) | \[1\] The training of the model is sensitive to random seed, and the seed to train it is 1111. ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ---------- | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DeepLabV3+ | R-50-D8 | 512x512 | 80000 | 10.6 | 21.01 | 42.72 | 43.75 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_ade20k/deeplabv3plus_r50-d8_512x512_80k_ade20k_20200614_185028-bf1400d8.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_ade20k/deeplabv3plus_r50-d8_512x512_80k_ade20k_20200614_185028.log.json) | -| DeepLabV3+ | R-101-D8 | 512x512 | 80000 | 14.1 | 14.16 | 44.60 | 46.06 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_ade20k/deeplabv3plus_r101-d8_512x512_80k_ade20k_20200615_014139-d5730af7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_ade20k/deeplabv3plus_r101-d8_512x512_80k_ade20k_20200615_014139.log.json) | -| DeepLabV3+ | R-50-D8 | 512x512 | 160000 | - | - | 43.95 | 44.93 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_160k_ade20k/deeplabv3plus_r50-d8_512x512_160k_ade20k_20200615_124504-6135c7e0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_160k_ade20k/deeplabv3plus_r50-d8_512x512_160k_ade20k_20200615_124504.log.json) | -| DeepLabV3+ | R-101-D8 | 512x512 | 160000 | - | - | 45.47 | 46.35 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_160k_ade20k/deeplabv3plus_r101-d8_512x512_160k_ade20k_20200615_123232-38ed86bb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_160k_ade20k/deeplabv3plus_r101-d8_512x512_160k_ade20k_20200615_123232.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DeepLabV3+ | R-50-D8 | 512x512 | 80000 | 10.6 | 21.01 | V100 | 42.72 | 43.75 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_ade20k/deeplabv3plus_r50-d8_512x512_80k_ade20k_20200614_185028-bf1400d8.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_ade20k/deeplabv3plus_r50-d8_512x512_80k_ade20k_20200614_185028.log.json) | +| DeepLabV3+ | R-101-D8 | 512x512 | 80000 | 14.1 | 14.16 | V100 | 44.60 | 46.06 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_ade20k/deeplabv3plus_r101-d8_512x512_80k_ade20k_20200615_014139-d5730af7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_ade20k/deeplabv3plus_r101-d8_512x512_80k_ade20k_20200615_014139.log.json) | +| DeepLabV3+ | R-50-D8 | 512x512 | 160000 | - | - | V100 | 43.95 | 44.93 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_160k_ade20k/deeplabv3plus_r50-d8_512x512_160k_ade20k_20200615_124504-6135c7e0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_160k_ade20k/deeplabv3plus_r50-d8_512x512_160k_ade20k_20200615_124504.log.json) | +| DeepLabV3+ | R-101-D8 | 512x512 | 160000 | - | - | V100 | 45.47 | 46.35 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_160k_ade20k/deeplabv3plus_r101-d8_512x512_160k_ade20k_20200615_123232-38ed86bb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_160k_ade20k/deeplabv3plus_r101-d8_512x512_160k_ade20k_20200615_123232.log.json) | ### Pascal VOC 2012 + Aug -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ---------- | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DeepLabV3+ | R-50-D8 | 512x512 | 20000 | 7.6 | 21 | 75.93 | 77.50 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_20k_voc12aug/deeplabv3plus_r50-d8_512x512_20k_voc12aug_20200617_102323-aad58ef1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_20k_voc12aug/deeplabv3plus_r50-d8_512x512_20k_voc12aug_20200617_102323.log.json) | -| DeepLabV3+ | R-101-D8 | 512x512 | 20000 | 11 | 13.88 | 77.22 | 78.59 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_20k_voc12aug/deeplabv3plus_r101-d8_512x512_20k_voc12aug_20200617_102345-c7ff3d56.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_20k_voc12aug/deeplabv3plus_r101-d8_512x512_20k_voc12aug_20200617_102345.log.json) | -| DeepLabV3+ | R-50-D8 | 512x512 | 40000 | - | - | 76.81 | 77.57 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_40k_voc12aug/deeplabv3plus_r50-d8_512x512_40k_voc12aug_20200613_161759-e1b43aa9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_40k_voc12aug/deeplabv3plus_r50-d8_512x512_40k_voc12aug_20200613_161759.log.json) | -| DeepLabV3+ | R-101-D8 | 512x512 | 40000 | - | - | 78.62 | 79.53 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_40k_voc12aug/deeplabv3plus_r101-d8_512x512_40k_voc12aug_20200613_205333-faf03387.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_40k_voc12aug/deeplabv3plus_r101-d8_512x512_40k_voc12aug_20200613_205333.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DeepLabV3+ | R-50-D8 | 512x512 | 20000 | 7.6 | 21 | V100 | 75.93 | 77.50 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_20k_voc12aug/deeplabv3plus_r50-d8_512x512_20k_voc12aug_20200617_102323-aad58ef1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_20k_voc12aug/deeplabv3plus_r50-d8_512x512_20k_voc12aug_20200617_102323.log.json) | +| DeepLabV3+ | R-101-D8 | 512x512 | 20000 | 11 | 13.88 | V100 | 77.22 | 78.59 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_20k_voc12aug/deeplabv3plus_r101-d8_512x512_20k_voc12aug_20200617_102345-c7ff3d56.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_20k_voc12aug/deeplabv3plus_r101-d8_512x512_20k_voc12aug_20200617_102345.log.json) | +| DeepLabV3+ | R-50-D8 | 512x512 | 40000 | - | - | V100 | 76.81 | 77.57 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_40k_voc12aug/deeplabv3plus_r50-d8_512x512_40k_voc12aug_20200613_161759-e1b43aa9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_40k_voc12aug/deeplabv3plus_r50-d8_512x512_40k_voc12aug_20200613_161759.log.json) | +| DeepLabV3+ | R-101-D8 | 512x512 | 40000 | - | - | V100 | 78.62 | 79.53 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_40k_voc12aug/deeplabv3plus_r101-d8_512x512_40k_voc12aug_20200613_205333-faf03387.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_40k_voc12aug/deeplabv3plus_r101-d8_512x512_40k_voc12aug_20200613_205333.log.json) | ### Pascal Context -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ---------- | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DeepLabV3+ | R-101-D8 | 480x480 | 40000 | - | 9.09 | 47.30 | 48.47 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-40k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_40k_pascal_context/deeplabv3plus_r101-d8_480x480_40k_pascal_context_20200911_165459-d3c8a29e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_40k_pascal_context/deeplabv3plus_r101-d8_480x480_40k_pascal_context-20200911_165459.log.json) | -| DeepLabV3+ | R-101-D8 | 480x480 | 80000 | - | - | 47.23 | 48.26 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_80k_pascal_context/deeplabv3plus_r101-d8_480x480_80k_pascal_context_20200911_155322-145d3ee8.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_80k_pascal_context/deeplabv3plus_r101-d8_480x480_80k_pascal_context-20200911_155322.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DeepLabV3+ | R-101-D8 | 480x480 | 40000 | - | 9.09 | V100 | 47.30 | 48.47 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-40k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_40k_pascal_context/deeplabv3plus_r101-d8_480x480_40k_pascal_context_20200911_165459-d3c8a29e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_40k_pascal_context/deeplabv3plus_r101-d8_480x480_40k_pascal_context-20200911_165459.log.json) | +| DeepLabV3+ | R-101-D8 | 480x480 | 80000 | - | - | V100 | 47.23 | 48.26 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_80k_pascal_context/deeplabv3plus_r101-d8_480x480_80k_pascal_context_20200911_155322-145d3ee8.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_80k_pascal_context/deeplabv3plus_r101-d8_480x480_80k_pascal_context-20200911_155322.log.json) | ### Pascal Context 59 -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ---------- | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DeepLabV3+ | R-101-D8 | 480x480 | 40000 | - | - | 52.86 | 54.54 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-40k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_40k_pascal_context_59/deeplabv3plus_r101-d8_480x480_40k_pascal_context_59_20210416_111233-ed937f15.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_40k_pascal_context_59/deeplabv3plus_r101-d8_480x480_40k_pascal_context_59-20210416_111233.log.json) | -| DeepLabV3+ | R-101-D8 | 480x480 | 80000 | - | - | 53.2 | 54.67 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-80k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_80k_pascal_context_59/deeplabv3plus_r101-d8_480x480_80k_pascal_context_59_20210416_111127-7ca0331d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_80k_pascal_context_59/deeplabv3plus_r101-d8_480x480_80k_pascal_context_59-20210416_111127.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DeepLabV3+ | R-101-D8 | 480x480 | 40000 | - | - | V100 | 52.86 | 54.54 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-40k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_40k_pascal_context_59/deeplabv3plus_r101-d8_480x480_40k_pascal_context_59_20210416_111233-ed937f15.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_40k_pascal_context_59/deeplabv3plus_r101-d8_480x480_40k_pascal_context_59-20210416_111233.log.json) | +| DeepLabV3+ | R-101-D8 | 480x480 | 80000 | - | - | V100 | 53.2 | 54.67 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-80k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_80k_pascal_context_59/deeplabv3plus_r101-d8_480x480_80k_pascal_context_59_20210416_111127-7ca0331d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_80k_pascal_context_59/deeplabv3plus_r101-d8_480x480_80k_pascal_context_59-20210416_111127.log.json) | ### LoveDA -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ---------- | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| DeepLabV3+ | R-18-D8 | 512x512 | 80000 | 1.93 | 25.57 | 50.28 | 50.47 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r18-d8_4xb4-80k_loveda-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_512x512_80k_loveda/deeplabv3plus_r18-d8_512x512_80k_loveda_20211104_132800-ce0fa0ca.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_512x512_80k_loveda/deeplabv3plus_r18-d8_512x512_80k_loveda_20211104_132800.log.json) | -| DeepLabV3+ | R-50-D8 | 512x512 | 80000 | 7.37 | 6.00 | 50.99 | 50.65 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_loveda-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_loveda/deeplabv3plus_r50-d8_512x512_80k_loveda_20211105_080442-f0720392.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_loveda/deeplabv3plus_r50-d8_512x512_80k_loveda_20211105_080442.log.json) | -| DeepLabV3+ | R-101-D8 | 512x512 | 80000 | 10.84 | 4.33 | 51.47 | 51.32 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-80k_loveda-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_loveda/deeplabv3plus_r101-d8_512x512_80k_loveda_20211105_110759-4c1f297e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_loveda/deeplabv3plus_r101-d8_512x512_80k_loveda_20211105_110759.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| DeepLabV3+ | R-18-D8 | 512x512 | 80000 | 1.93 | 25.57 | V100 | 50.28 | 50.47 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r18-d8_4xb4-80k_loveda-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_512x512_80k_loveda/deeplabv3plus_r18-d8_512x512_80k_loveda_20211104_132800-ce0fa0ca.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_512x512_80k_loveda/deeplabv3plus_r18-d8_512x512_80k_loveda_20211104_132800.log.json) | +| DeepLabV3+ | R-50-D8 | 512x512 | 80000 | 7.37 | 6.00 | V100 | 50.99 | 50.65 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_loveda-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_loveda/deeplabv3plus_r50-d8_512x512_80k_loveda_20211105_080442-f0720392.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_loveda/deeplabv3plus_r50-d8_512x512_80k_loveda_20211105_080442.log.json) | +| DeepLabV3+ | R-101-D8 | 512x512 | 80000 | 10.84 | 4.33 | V100 | 51.47 | 51.32 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-80k_loveda-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_loveda/deeplabv3plus_r101-d8_512x512_80k_loveda_20211105_110759-4c1f297e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_loveda/deeplabv3plus_r101-d8_512x512_80k_loveda_20211105_110759.log.json) | ### Potsdam -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ---------- | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DeepLabV3+ | R-18-D8 | 512x512 | 80000 | 1.91 | 81.68 | 77.09 | 78.44 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r18-d8_4xb4-80k_potsdam-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_512x512_80k_potsdam/deeplabv3plus_r18-d8_512x512_80k_potsdam_20211219_020601-75fd5bc3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_512x512_80k_potsdam/deeplabv3plus_r18-d8_512x512_80k_potsdam_20211219_020601.log.json) | -| DeepLabV3+ | R-50-D8 | 512x512 | 80000 | 7.36 | 26.44 | 78.33 | 79.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_potsdam-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_potsdam/deeplabv3plus_r50-d8_512x512_80k_potsdam_20211219_031508-7e7a2b24.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_potsdam/deeplabv3plus_r50-d8_512x512_80k_potsdam_20211219_031508.log.json) | -| DeepLabV3+ | R-101-D8 | 512x512 | 80000 | 10.83 | 17.56 | 78.7 | 79.47 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-80k_potsdam-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_potsdam/deeplabv3plus_r101-d8_512x512_80k_potsdam_20211219_031508-8b112708.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_potsdam/deeplabv3plus_r101-d8_512x512_80k_potsdam_20211219_031508.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DeepLabV3+ | R-18-D8 | 512x512 | 80000 | 1.91 | 81.68 | V100 | 77.09 | 78.44 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r18-d8_4xb4-80k_potsdam-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_512x512_80k_potsdam/deeplabv3plus_r18-d8_512x512_80k_potsdam_20211219_020601-75fd5bc3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_512x512_80k_potsdam/deeplabv3plus_r18-d8_512x512_80k_potsdam_20211219_020601.log.json) | +| DeepLabV3+ | R-50-D8 | 512x512 | 80000 | 7.36 | 26.44 | V100 | 78.33 | 79.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_potsdam-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_potsdam/deeplabv3plus_r50-d8_512x512_80k_potsdam_20211219_031508-7e7a2b24.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_potsdam/deeplabv3plus_r50-d8_512x512_80k_potsdam_20211219_031508.log.json) | +| DeepLabV3+ | R-101-D8 | 512x512 | 80000 | 10.83 | 17.56 | V100 | 78.7 | 79.47 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-80k_potsdam-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_potsdam/deeplabv3plus_r101-d8_512x512_80k_potsdam_20211219_031508-8b112708.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_potsdam/deeplabv3plus_r101-d8_512x512_80k_potsdam_20211219_031508.log.json) | ### Vaihingen -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ---------- | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DeepLabV3+ | R-18-D8 | 512x512 | 80000 | 1.91 | 72.79 | 72.50 | 74.13 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r18-d8_4xb4-80k_vaihingen-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_4x4_512x512_80k_vaihingen/deeplabv3plus_r18-d8_4x4_512x512_80k_vaihingen_20211231_230805-7626a263.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_4x4_512x512_80k_vaihingen/deeplabv3plus_r18-d8_4x4_512x512_80k_vaihingen_20211231_230805.log.json) | -| DeepLabV3+ | R-50-D8 | 512x512 | 80000 | 7.36 | 26.91 | 73.97 | 75.05 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_vaihingen-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_4x4_512x512_80k_vaihingen/deeplabv3plus_r50-d8_4x4_512x512_80k_vaihingen_20211231_230816-5040938d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_4x4_512x512_80k_vaihingen/deeplabv3plus_r50-d8_4x4_512x512_80k_vaihingen_20211231_230816.log.json) | -| DeepLabV3+ | R-101-D8 | 512x512 | 80000 | 10.83 | 18.59 | 73.06 | 74.14 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-80k_vaihingen-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_4x4_512x512_80k_vaihingen/deeplabv3plus_r101-d8_4x4_512x512_80k_vaihingen_20211231_230816-8a095afa.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_4x4_512x512_80k_vaihingen/deeplabv3plus_r101-d8_4x4_512x512_80k_vaihingen_20211231_230816.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DeepLabV3+ | R-18-D8 | 512x512 | 80000 | 1.91 | 72.79 | V100 | 72.50 | 74.13 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r18-d8_4xb4-80k_vaihingen-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_4x4_512x512_80k_vaihingen/deeplabv3plus_r18-d8_4x4_512x512_80k_vaihingen_20211231_230805-7626a263.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_4x4_512x512_80k_vaihingen/deeplabv3plus_r18-d8_4x4_512x512_80k_vaihingen_20211231_230805.log.json) | +| DeepLabV3+ | R-50-D8 | 512x512 | 80000 | 7.36 | 26.91 | V100 | 73.97 | 75.05 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_vaihingen-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_4x4_512x512_80k_vaihingen/deeplabv3plus_r50-d8_4x4_512x512_80k_vaihingen_20211231_230816-5040938d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_4x4_512x512_80k_vaihingen/deeplabv3plus_r50-d8_4x4_512x512_80k_vaihingen_20211231_230816.log.json) | +| DeepLabV3+ | R-101-D8 | 512x512 | 80000 | 10.83 | 18.59 | V100 | 73.06 | 74.14 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-80k_vaihingen-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_4x4_512x512_80k_vaihingen/deeplabv3plus_r101-d8_4x4_512x512_80k_vaihingen_20211231_230816-8a095afa.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_4x4_512x512_80k_vaihingen/deeplabv3plus_r101-d8_4x4_512x512_80k_vaihingen_20211231_230816.log.json) | ### iSAID -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ---------- | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DeepLabV3+ | R-18-D8 | 896x896 | 80000 | 6.19 | 24.81 | 61.35 | 62.61 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r18-d8_4xb4-80k_isaid-896x896.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_4x4_896x896_80k_isaid/deeplabv3plus_r18-d8_4x4_896x896_80k_isaid_20220110_180526-7059991d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_4x4_896x896_80k_isaid/deeplabv3plus_r18-d8_4x4_896x896_80k_isaid_20220110_180526.log.json) | -| DeepLabV3+ | R-50-D8 | 896x896 | 80000 | 21.45 | 8.42 | 67.06 | 68.02 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_isaid-896x896.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_4x4_896x896_80k_isaid/deeplabv3plus_r50-d8_4x4_896x896_80k_isaid_20220110_180526-598be439.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_4x4_896x896_80k_isaid/deeplabv3plus_r50-d8_4x4_896x896_80k_isaid_20220110_180526.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DeepLabV3+ | R-18-D8 | 896x896 | 80000 | 6.19 | 24.81 | V100 | 61.35 | 62.61 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r18-d8_4xb4-80k_isaid-896x896.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_4x4_896x896_80k_isaid/deeplabv3plus_r18-d8_4x4_896x896_80k_isaid_20220110_180526-7059991d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_4x4_896x896_80k_isaid/deeplabv3plus_r18-d8_4x4_896x896_80k_isaid_20220110_180526.log.json) | +| DeepLabV3+ | R-50-D8 | 896x896 | 80000 | 21.45 | 8.42 | V100 | 67.06 | 68.02 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_isaid-896x896.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_4x4_896x896_80k_isaid/deeplabv3plus_r50-d8_4x4_896x896_80k_isaid_20220110_180526-598be439.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_4x4_896x896_80k_isaid/deeplabv3plus_r50-d8_4x4_896x896_80k_isaid_20220110_180526.log.json) | ### Mapillary Vistas v1.2 @@ -136,3 +125,14 @@ Note: - `MG-124` stands for multi-grid dilation in the last stage of ResNet. - `FP16` means Mixed Precision (FP16) is adopted in training. - `896x896` is the Crop Size of iSAID dataset, which is followed by the implementation of [PointFlow: Flowing Semantics Through Points for Aerial Image Segmentation](https://arxiv.org/pdf/2103.06564.pdf) + +## Citation + +```bibtex +@inproceedings{deeplabv3plus2018, + title={Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation}, + author={Liang-Chieh Chen and Yukun Zhu and George Papandreou and Florian Schroff and Hartwig Adam}, + booktitle={ECCV}, + year={2018} +} +``` diff --git a/configs/deeplabv3plus/deeplabv3plus.yml b/configs/deeplabv3plus/deeplabv3plus.yml deleted file mode 100644 index 949cbcecc0..0000000000 --- a/configs/deeplabv3plus/deeplabv3plus.yml +++ /dev/null @@ -1,872 +0,0 @@ -Collections: -- Name: DeepLabV3+ - Metadata: - Training Data: - - Cityscapes - - ADE20K - - Pascal VOC 2012 + Aug - - Pascal Context - - Pascal Context 59 - - LoveDA - - Potsdam - - Vaihingen - - iSAID - - Mapillary Vistas v1.2 - Paper: - URL: https://arxiv.org/abs/1802.02611 - Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation - README: configs/deeplabv3plus/README.md - Code: - URL: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 - Version: v0.17.0 - Converted From: - Code: https://github.com/tensorflow/models/tree/master/research/deeplab -Models: -- Name: deeplabv3plus_r50-d8_4xb2-40k_cityscapes-512x1024 - In Collection: DeepLabV3+ - Metadata: - backbone: R-50-D8 - crop size: (512,1024) - lr schd: 40000 - inference time (ms/im): - - value: 253.81 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 7.5 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.61 - mIoU(ms+flip): 81.01 - Config: configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-40k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_40k_cityscapes/deeplabv3plus_r50-d8_512x1024_40k_cityscapes_20200605_094610-d222ffcd.pth -- Name: deeplabv3plus_r101-d8_4xb2-40k_cityscapes-512x1024 - In Collection: DeepLabV3+ - Metadata: - backbone: R-101-D8 - crop size: (512,1024) - lr schd: 40000 - inference time (ms/im): - - value: 384.62 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 11.0 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 80.21 - mIoU(ms+flip): 81.82 - Config: configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb2-40k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_40k_cityscapes/deeplabv3plus_r101-d8_512x1024_40k_cityscapes_20200605_094614-3769eecf.pth -- Name: deeplabv3plus_r50-d8_4xb2-40k_cityscapes-769x769 - In Collection: DeepLabV3+ - Metadata: - backbone: R-50-D8 - crop size: (769,769) - lr schd: 40000 - inference time (ms/im): - - value: 581.4 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 8.5 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.97 - mIoU(ms+flip): 80.46 - Config: configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-40k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_769x769_40k_cityscapes/deeplabv3plus_r50-d8_769x769_40k_cityscapes_20200606_114143-1dcb0e3c.pth -- Name: deeplabv3plus_r101-d8_4xb2-40k_cityscapes-769x769 - In Collection: DeepLabV3+ - Metadata: - backbone: R-101-D8 - crop size: (769,769) - lr schd: 40000 - inference time (ms/im): - - value: 869.57 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 12.5 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.46 - mIoU(ms+flip): 80.5 - Config: configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb2-40k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_769x769_40k_cityscapes/deeplabv3plus_r101-d8_769x769_40k_cityscapes_20200606_114304-ff414b9e.pth -- Name: deeplabv3plus_r18-d8_4xb2-80k_cityscapes-512x1024 - In Collection: DeepLabV3+ - Metadata: - backbone: R-18-D8 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 70.08 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 2.2 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 76.89 - mIoU(ms+flip): 78.76 - Config: configs/deeplabv3plus/deeplabv3plus_r18-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_512x1024_80k_cityscapes/deeplabv3plus_r18-d8_512x1024_80k_cityscapes_20201226_080942-cff257fe.pth -- Name: deeplabv3plus_r50-d8_4xb2-80k_cityscapes-512x1024 - In Collection: DeepLabV3+ - Metadata: - backbone: R-50-D8 - crop size: (512,1024) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 80.09 - mIoU(ms+flip): 81.13 - Config: configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_80k_cityscapes/deeplabv3plus_r50-d8_512x1024_80k_cityscapes_20200606_114049-f9fb496d.pth -- Name: deeplabv3plus_r101-d8_4xb2-80k_cityscapes-512x1024 - In Collection: DeepLabV3+ - Metadata: - backbone: R-101-D8 - crop size: (512,1024) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 80.97 - mIoU(ms+flip): 82.03 - Config: configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_80k_cityscapes/deeplabv3plus_r101-d8_512x1024_80k_cityscapes_20200606_114143-068fcfe9.pth -- Name: deeplabv3plus_r101-d8_4xb2-amp-80k_cityscapes-512x1024 - In Collection: DeepLabV3+ - Metadata: - backbone: R-101-D8 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 127.06 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: AMP - resolution: (512,1024) - Training Memory (GB): 6.35 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 80.46 - Config: configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb2-amp-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_fp16_512x1024_80k_cityscapes/deeplabv3plus_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230920-f1104f4b.pth -- Name: deeplabv3plus_r18-d8_4xb2-80k_cityscapes-769x769 - In Collection: DeepLabV3+ - Metadata: - backbone: R-18-D8 - crop size: (769,769) - lr schd: 80000 - inference time (ms/im): - - value: 174.22 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 2.5 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 76.26 - mIoU(ms+flip): 77.91 - Config: configs/deeplabv3plus/deeplabv3plus_r18-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_769x769_80k_cityscapes/deeplabv3plus_r18-d8_769x769_80k_cityscapes_20201226_083346-f326e06a.pth -- Name: deeplabv3plus_r50-d8_4xb2-80k_cityscapes-769x769 - In Collection: DeepLabV3+ - Metadata: - backbone: R-50-D8 - crop size: (769,769) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.83 - mIoU(ms+flip): 81.48 - Config: configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_769x769_80k_cityscapes/deeplabv3plus_r50-d8_769x769_80k_cityscapes_20200606_210233-0e9dfdc4.pth -- Name: deeplabv3plus_r101-d8_4xb2-80k_cityscapes-769x769 - In Collection: DeepLabV3+ - Metadata: - backbone: R-101-D8 - crop size: (769,769) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 80.65 - mIoU(ms+flip): 81.47 - Config: configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_769x769_80k_cityscapes/deeplabv3plus_r101-d8_769x769_80k_cityscapes_20220406_154720-dfcc0b68.pth -- Name: deeplabv3plus_r101-d16-mg124_4xb2-40k_cityscapes-512x1024 - In Collection: DeepLabV3+ - Metadata: - backbone: R-101-D16-MG124 - crop size: (512,1024) - lr schd: 40000 - inference time (ms/im): - - value: 133.69 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 5.8 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.09 - mIoU(ms+flip): 80.36 - Config: configs/deeplabv3plus/deeplabv3plus_r101-d16-mg124_4xb2-40k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d16-mg124_512x1024_40k_cityscapes/deeplabv3plus_r101-d16-mg124_512x1024_40k_cityscapes_20200908_005644-cf9ce186.pth -- Name: deeplabv3plus_r101-d16-mg124_4xb2-80k_cityscapes-512x1024 - In Collection: DeepLabV3+ - Metadata: - backbone: R-101-D16-MG124 - crop size: (512,1024) - lr schd: 80000 - Training Memory (GB): 9.9 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.9 - mIoU(ms+flip): 81.33 - Config: configs/deeplabv3plus/deeplabv3plus_r101-d16-mg124_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d16-mg124_512x1024_80k_cityscapes/deeplabv3plus_r101-d16-mg124_512x1024_80k_cityscapes_20200908_005644-ee6158e0.pth -- Name: deeplabv3plus_r18b-d8_4xb2-80k_cityscapes-512x1024 - In Collection: DeepLabV3+ - Metadata: - backbone: R-18b-D8 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 66.89 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 2.1 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 75.87 - mIoU(ms+flip): 77.52 - Config: configs/deeplabv3plus/deeplabv3plus_r18b-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18b-d8_512x1024_80k_cityscapes/deeplabv3plus_r18b-d8_512x1024_80k_cityscapes_20201226_090828-e451abd9.pth -- Name: deeplabv3plus_r50b-d8_4xb2-80k_cityscapes-512x1024 - In Collection: DeepLabV3+ - Metadata: - backbone: R-50b-D8 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 253.81 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 7.4 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 80.28 - mIoU(ms+flip): 81.44 - Config: configs/deeplabv3plus/deeplabv3plus_r50b-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50b-d8_512x1024_80k_cityscapes/deeplabv3plus_r50b-d8_512x1024_80k_cityscapes_20201225_213645-a97e4e43.pth -- Name: deeplabv3plus_r101b-d8_4xb2-80k_cityscapes-512x1024 - In Collection: DeepLabV3+ - Metadata: - backbone: R-101b-D8 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 384.62 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 10.9 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 80.16 - mIoU(ms+flip): 81.41 - Config: configs/deeplabv3plus/deeplabv3plus_r101b-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101b-d8_512x1024_80k_cityscapes/deeplabv3plus_r101b-d8_512x1024_80k_cityscapes_20201226_190843-9c3c93a4.pth -- Name: deeplabv3plus_r18b-d8_4xb2-80k_cityscapes-769x769 - In Collection: DeepLabV3+ - Metadata: - backbone: R-18b-D8 - crop size: (769,769) - lr schd: 80000 - inference time (ms/im): - - value: 167.79 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 2.4 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 76.36 - mIoU(ms+flip): 78.24 - Config: configs/deeplabv3plus/deeplabv3plus_r18b-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18b-d8_769x769_80k_cityscapes/deeplabv3plus_r18b-d8_769x769_80k_cityscapes_20201226_151312-2c868aff.pth -- Name: deeplabv3plus_r50b-d8_4xb2-80k_cityscapes-769x769 - In Collection: DeepLabV3+ - Metadata: - backbone: R-50b-D8 - crop size: (769,769) - lr schd: 80000 - inference time (ms/im): - - value: 581.4 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 8.4 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.41 - mIoU(ms+flip): 80.56 - Config: configs/deeplabv3plus/deeplabv3plus_r50b-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50b-d8_769x769_80k_cityscapes/deeplabv3plus_r50b-d8_769x769_80k_cityscapes_20201225_224655-8b596d1c.pth -- Name: deeplabv3plus_r101b-d8_4xb2-80k_cityscapes-769x769 - In Collection: DeepLabV3+ - Metadata: - backbone: R-101b-D8 - crop size: (769,769) - lr schd: 80000 - inference time (ms/im): - - value: 909.09 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 12.3 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.88 - mIoU(ms+flip): 81.46 - Config: configs/deeplabv3plus/deeplabv3plus_r101b-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101b-d8_769x769_80k_cityscapes/deeplabv3plus_r101b-d8_769x769_80k_cityscapes_20201226_205041-227cdf7c.pth -- Name: deeplabv3plus_r50-d8_4xb4-80k_ade20k-512x512 - In Collection: DeepLabV3+ - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 47.6 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 10.6 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 42.72 - mIoU(ms+flip): 43.75 - Config: configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_ade20k/deeplabv3plus_r50-d8_512x512_80k_ade20k_20200614_185028-bf1400d8.pth -- Name: deeplabv3plus_r101-d8_4xb4-160k_ade20k-512x512 - In Collection: DeepLabV3+ - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 70.62 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 14.1 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 44.6 - mIoU(ms+flip): 46.06 - Config: configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_ade20k/deeplabv3plus_r101-d8_512x512_80k_ade20k_20200615_014139-d5730af7.pth -- Name: deeplabv3plus_r50-d8_4xb4-160k_ade20k-512x512 - In Collection: DeepLabV3+ - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 43.95 - mIoU(ms+flip): 44.93 - Config: configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_160k_ade20k/deeplabv3plus_r50-d8_512x512_160k_ade20k_20200615_124504-6135c7e0.pth -- Name: deeplabv3plus_r101-d8_4xb4-160k_ade20k-512x512 - In Collection: DeepLabV3+ - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 45.47 - mIoU(ms+flip): 46.35 - Config: configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_160k_ade20k/deeplabv3plus_r101-d8_512x512_160k_ade20k_20200615_123232-38ed86bb.pth -- Name: deeplabv3plus_r50-d8_4xb4-20k_voc12aug-512x512 - In Collection: DeepLabV3+ - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 20000 - inference time (ms/im): - - value: 47.62 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 7.6 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 75.93 - mIoU(ms+flip): 77.5 - Config: configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-20k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_20k_voc12aug/deeplabv3plus_r50-d8_512x512_20k_voc12aug_20200617_102323-aad58ef1.pth -- Name: deeplabv3plus_r101-d8_4xb4-20k_voc12aug-512x512 - In Collection: DeepLabV3+ - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 20000 - inference time (ms/im): - - value: 72.05 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 11.0 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 77.22 - mIoU(ms+flip): 78.59 - Config: configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-20k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_20k_voc12aug/deeplabv3plus_r101-d8_512x512_20k_voc12aug_20200617_102345-c7ff3d56.pth -- Name: deeplabv3plus_r50-d8_4xb4-40k_voc12aug-512x512 - In Collection: DeepLabV3+ - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 40000 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 76.81 - mIoU(ms+flip): 77.57 - Config: configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-40k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_40k_voc12aug/deeplabv3plus_r50-d8_512x512_40k_voc12aug_20200613_161759-e1b43aa9.pth -- Name: deeplabv3plus_r101-d8_4xb4-40k_voc12aug-512x512 - In Collection: DeepLabV3+ - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 40000 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 78.62 - mIoU(ms+flip): 79.53 - Config: configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-40k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_40k_voc12aug/deeplabv3plus_r101-d8_512x512_40k_voc12aug_20200613_205333-faf03387.pth -- Name: deeplabv3plus_r50-d8_4xb4-40k_pascal-context-480x480 - In Collection: DeepLabV3+ - Metadata: - backbone: R-101-D8 - crop size: (480,480) - lr schd: 40000 - inference time (ms/im): - - value: 110.01 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (480,480) - Results: - - Task: Semantic Segmentation - Dataset: Pascal Context - Metrics: - mIoU: 47.3 - mIoU(ms+flip): 48.47 - Config: configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-40k_pascal-context-480x480.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_40k_pascal_context/deeplabv3plus_r101-d8_480x480_40k_pascal_context_20200911_165459-d3c8a29e.pth -- Name: deeplabv3plus_r50-d8_4xb4-80k_pascal-context-480x480 - In Collection: DeepLabV3+ - Metadata: - backbone: R-101-D8 - crop size: (480,480) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Pascal Context - Metrics: - mIoU: 47.23 - mIoU(ms+flip): 48.26 - Config: configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_pascal-context-480x480.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_80k_pascal_context/deeplabv3plus_r101-d8_480x480_80k_pascal_context_20200911_155322-145d3ee8.pth -- Name: deeplabv3plus_r101-d8_4xb4-40k_pascal-context-59-480x480 - In Collection: DeepLabV3+ - Metadata: - backbone: R-101-D8 - crop size: (480,480) - lr schd: 40000 - Results: - - Task: Semantic Segmentation - Dataset: Pascal Context 59 - Metrics: - mIoU: 52.86 - mIoU(ms+flip): 54.54 - Config: configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-40k_pascal-context-59-480x480.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_40k_pascal_context_59/deeplabv3plus_r101-d8_480x480_40k_pascal_context_59_20210416_111233-ed937f15.pth -- Name: deeplabv3plus_r101-d8_4xb4-80k_pascal-context-59-480x480 - In Collection: DeepLabV3+ - Metadata: - backbone: R-101-D8 - crop size: (480,480) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Pascal Context 59 - Metrics: - mIoU: 53.2 - mIoU(ms+flip): 54.67 - Config: configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-80k_pascal-context-59-480x480.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_80k_pascal_context_59/deeplabv3plus_r101-d8_480x480_80k_pascal_context_59_20210416_111127-7ca0331d.pth -- Name: deeplabv3plus_r18-d8_4xb4-80k_loveda-512x512 - In Collection: DeepLabV3+ - Metadata: - backbone: R-18-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 39.11 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 1.93 - Results: - - Task: Semantic Segmentation - Dataset: LoveDA - Metrics: - mIoU: 50.28 - mIoU(ms+flip): 50.47 - Config: configs/deeplabv3plus/deeplabv3plus_r18-d8_4xb4-80k_loveda-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_512x512_80k_loveda/deeplabv3plus_r18-d8_512x512_80k_loveda_20211104_132800-ce0fa0ca.pth -- Name: deeplabv3plus_r50-d8_4xb4-80k_loveda-512x512 - In Collection: DeepLabV3+ - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 166.67 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 7.37 - Results: - - Task: Semantic Segmentation - Dataset: LoveDA - Metrics: - mIoU: 50.99 - mIoU(ms+flip): 50.65 - Config: configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_loveda-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_loveda/deeplabv3plus_r50-d8_512x512_80k_loveda_20211105_080442-f0720392.pth -- Name: deeplabv3plus_r101-d8_4xb4-80k_loveda-512x512 - In Collection: DeepLabV3+ - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 230.95 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 10.84 - Results: - - Task: Semantic Segmentation - Dataset: LoveDA - Metrics: - mIoU: 51.47 - mIoU(ms+flip): 51.32 - Config: configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-80k_loveda-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_loveda/deeplabv3plus_r101-d8_512x512_80k_loveda_20211105_110759-4c1f297e.pth -- Name: deeplabv3plus_r18-d8_4xb4-80k_potsdam-512x512 - In Collection: DeepLabV3+ - Metadata: - backbone: R-18-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 12.24 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 1.91 - Results: - - Task: Semantic Segmentation - Dataset: Potsdam - Metrics: - mIoU: 77.09 - mIoU(ms+flip): 78.44 - Config: configs/deeplabv3plus/deeplabv3plus_r18-d8_4xb4-80k_potsdam-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_512x512_80k_potsdam/deeplabv3plus_r18-d8_512x512_80k_potsdam_20211219_020601-75fd5bc3.pth -- Name: deeplabv3plus_r50-d8_4xb4-80k_potsdam-512x512 - In Collection: DeepLabV3+ - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 37.82 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 7.36 - Results: - - Task: Semantic Segmentation - Dataset: Potsdam - Metrics: - mIoU: 78.33 - mIoU(ms+flip): 79.27 - Config: configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_potsdam-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_potsdam/deeplabv3plus_r50-d8_512x512_80k_potsdam_20211219_031508-7e7a2b24.pth -- Name: deeplabv3plus_r101-d8_4xb4-80k_potsdam-512x512 - In Collection: DeepLabV3+ - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 56.95 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 10.83 - Results: - - Task: Semantic Segmentation - Dataset: Potsdam - Metrics: - mIoU: 78.7 - mIoU(ms+flip): 79.47 - Config: configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-80k_potsdam-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_potsdam/deeplabv3plus_r101-d8_512x512_80k_potsdam_20211219_031508-8b112708.pth -- Name: deeplabv3plus_r18-d8_4xb4-80k_vaihingen-512x512 - In Collection: DeepLabV3+ - Metadata: - backbone: R-18-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 13.74 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 1.91 - Results: - - Task: Semantic Segmentation - Dataset: Vaihingen - Metrics: - mIoU: 72.5 - mIoU(ms+flip): 74.13 - Config: configs/deeplabv3plus/deeplabv3plus_r18-d8_4xb4-80k_vaihingen-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_4x4_512x512_80k_vaihingen/deeplabv3plus_r18-d8_4x4_512x512_80k_vaihingen_20211231_230805-7626a263.pth -- Name: deeplabv3plus_r50-d8_4xb4-80k_vaihingen-512x512 - In Collection: DeepLabV3+ - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 37.16 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 7.36 - Results: - - Task: Semantic Segmentation - Dataset: Vaihingen - Metrics: - mIoU: 73.97 - mIoU(ms+flip): 75.05 - Config: configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_vaihingen-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_4x4_512x512_80k_vaihingen/deeplabv3plus_r50-d8_4x4_512x512_80k_vaihingen_20211231_230816-5040938d.pth -- Name: deeplabv3plus_r101-d8_4xb4-80k_vaihingen-512x512 - In Collection: DeepLabV3+ - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 53.79 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 10.83 - Results: - - Task: Semantic Segmentation - Dataset: Vaihingen - Metrics: - mIoU: 73.06 - mIoU(ms+flip): 74.14 - Config: configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-80k_vaihingen-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_4x4_512x512_80k_vaihingen/deeplabv3plus_r101-d8_4x4_512x512_80k_vaihingen_20211231_230816-8a095afa.pth -- Name: deeplabv3plus_r18-d8_4xb4-80k_isaid-896x896 - In Collection: DeepLabV3+ - Metadata: - backbone: R-18-D8 - crop size: (896,896) - lr schd: 80000 - inference time (ms/im): - - value: 40.31 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (896,896) - Training Memory (GB): 6.19 - Results: - - Task: Semantic Segmentation - Dataset: iSAID - Metrics: - mIoU: 61.35 - mIoU(ms+flip): 62.61 - Config: configs/deeplabv3plus/deeplabv3plus_r18-d8_4xb4-80k_isaid-896x896.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_4x4_896x896_80k_isaid/deeplabv3plus_r18-d8_4x4_896x896_80k_isaid_20220110_180526-7059991d.pth -- Name: deeplabv3plus_r50-d8_4xb4-80k_isaid-896x896 - In Collection: DeepLabV3+ - Metadata: - backbone: R-50-D8 - crop size: (896,896) - lr schd: 80000 - inference time (ms/im): - - value: 118.76 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (896,896) - Training Memory (GB): 21.45 - Results: - - Task: Semantic Segmentation - Dataset: iSAID - Metrics: - mIoU: 67.06 - mIoU(ms+flip): 68.02 - Config: configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_isaid-896x896.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_4x4_896x896_80k_isaid/deeplabv3plus_r50-d8_4x4_896x896_80k_isaid_20220110_180526-598be439.pth -- Name: deeplabv3plus_r50-d8_4xb2-300k_mapillay_v1_65-1280x1280 - In Collection: DeepLabV3+ - Metadata: - backbone: R-50-D8 - crop size: (1280,1280) - lr schd: 300000 - inference time (ms/im): - - value: 55.8 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (1280,1280) - Training Memory (GB): 24.04 - Results: - - Task: Semantic Segmentation - Dataset: Mapillary Vistas v1.2 - Metrics: - mIoU: 47.35 - Config: configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-300k_mapillay_v1_65-1280x1280.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-300k_mapillay_v1_65-1280x1280/deeplabv3plus_r50-d8_4xb2-300k_mapillay_v1_65-1280x1280_20230301_110504-655f8e43.pth diff --git a/configs/deeplabv3plus/metafile.yaml b/configs/deeplabv3plus/metafile.yaml new file mode 100644 index 0000000000..b41de4dee2 --- /dev/null +++ b/configs/deeplabv3plus/metafile.yaml @@ -0,0 +1,1041 @@ +Collections: +- Name: DeepLabV3+ + License: Apache License 2.0 + Metadata: + Training Data: + - Cityscapes + - ADE20K + - Pascal VOC 2012 + Aug + - Pascal Context + - Pascal Context 59 + - LoveDA + - Potsdam + - Vaihingen + - iSAID + - Mapillary Vistas v1.2 + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + README: configs/deeplabv3plus/README.md + Frameworks: + - PyTorch +Models: +- Name: deeplabv3plus_r50-d8_4xb2-40k_cityscapes-512x1024 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.61 + mIoU(ms+flip): 81.01 + Config: configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-40k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Memory (GB): 7.5 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_40k_cityscapes/deeplabv3plus_r50-d8_512x1024_40k_cityscapes_20200605_094610-d222ffcd.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_40k_cityscapes/deeplabv3plus_r50-d8_512x1024_40k_cityscapes_20200605_094610.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r101-d8_4xb2-40k_cityscapes-512x1024 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 80.21 + mIoU(ms+flip): 81.82 + Config: configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb2-40k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Memory (GB): 11.0 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_40k_cityscapes/deeplabv3plus_r101-d8_512x1024_40k_cityscapes_20200605_094614-3769eecf.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_40k_cityscapes/deeplabv3plus_r101-d8_512x1024_40k_cityscapes_20200605_094614.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r50-d8_4xb2-40k_cityscapes-769x769 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.97 + mIoU(ms+flip): 80.46 + Config: configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-40k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Memory (GB): 8.5 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_769x769_40k_cityscapes/deeplabv3plus_r50-d8_769x769_40k_cityscapes_20200606_114143-1dcb0e3c.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_769x769_40k_cityscapes/deeplabv3plus_r50-d8_769x769_40k_cityscapes_20200606_114143.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r101-d8_4xb2-40k_cityscapes-769x769 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.46 + mIoU(ms+flip): 80.5 + Config: configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb2-40k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Memory (GB): 12.5 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_769x769_40k_cityscapes/deeplabv3plus_r101-d8_769x769_40k_cityscapes_20200606_114304-ff414b9e.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_769x769_40k_cityscapes/deeplabv3plus_r101-d8_769x769_40k_cityscapes_20200606_114304.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r18-d8_4xb2-80k_cityscapes-512x1024 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 76.89 + mIoU(ms+flip): 78.76 + Config: configs/deeplabv3plus/deeplabv3plus_r18-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-18-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Memory (GB): 2.2 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_512x1024_80k_cityscapes/deeplabv3plus_r18-d8_512x1024_80k_cityscapes_20201226_080942-cff257fe.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_512x1024_80k_cityscapes/deeplabv3plus_r18-d8_512x1024_80k_cityscapes-20201226_080942.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r50-d8_4xb2-80k_cityscapes-512x1024 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 80.09 + mIoU(ms+flip): 81.13 + Config: configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_80k_cityscapes/deeplabv3plus_r50-d8_512x1024_80k_cityscapes_20200606_114049-f9fb496d.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_80k_cityscapes/deeplabv3plus_r50-d8_512x1024_80k_cityscapes_20200606_114049.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r101-d8_4xb2-80k_cityscapes-512x1024 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 80.97 + mIoU(ms+flip): 82.03 + Config: configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_80k_cityscapes/deeplabv3plus_r101-d8_512x1024_80k_cityscapes_20200606_114143-068fcfe9.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_80k_cityscapes/deeplabv3plus_r101-d8_512x1024_80k_cityscapes_20200606_114143.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r101-d8_4xb2-amp-80k_cityscapes-512x1024 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 80.46 + Config: configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb2-amp-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - DeepLabV3+ + - (FP16) + Training Resources: 4x V100 GPUS + Memory (GB): 6.35 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_fp16_512x1024_80k_cityscapes/deeplabv3plus_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230920-f1104f4b.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_fp16_512x1024_80k_cityscapes/deeplabv3plus_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230920.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r18-d8_4xb2-80k_cityscapes-769x769 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 76.26 + mIoU(ms+flip): 77.91 + Config: configs/deeplabv3plus/deeplabv3plus_r18-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-18-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Memory (GB): 2.5 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_769x769_80k_cityscapes/deeplabv3plus_r18-d8_769x769_80k_cityscapes_20201226_083346-f326e06a.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_769x769_80k_cityscapes/deeplabv3plus_r18-d8_769x769_80k_cityscapes-20201226_083346.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r50-d8_4xb2-80k_cityscapes-769x769 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.83 + mIoU(ms+flip): 81.48 + Config: configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_769x769_80k_cityscapes/deeplabv3plus_r50-d8_769x769_80k_cityscapes_20200606_210233-0e9dfdc4.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_769x769_80k_cityscapes/deeplabv3plus_r50-d8_769x769_80k_cityscapes_20200606_210233.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r101-d8_4xb2-80k_cityscapes-769x769 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 80.65 + mIoU(ms+flip): 81.47 + Config: configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_769x769_80k_cityscapes/deeplabv3plus_r101-d8_769x769_80k_cityscapes_20220406_154720-dfcc0b68.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_769x769_80k_cityscapes/deeplabv3plus_r101-d8_769x769_80k_cityscapes_20220406_154720.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: ddeeplabv3plus_r101-d16-mg124_4xb2-40k_cityscapes-512x1024 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.09 + mIoU(ms+flip): 80.36 + Config: configs/deeplabv3plus/ddeeplabv3plus_r101-d16-mg124_4xb2-40k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D16-MG124 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Memory (GB): 5.8 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d16-mg124_512x1024_40k_cityscapes/deeplabv3plus_r101-d16-mg124_512x1024_40k_cityscapes_20200908_005644-cf9ce186.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d16-mg124_512x1024_40k_cityscapes/deeplabv3plus_r101-d16-mg124_512x1024_40k_cityscapes-20200908_005644.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r101-d16-mg124_4xb2-80k_cityscapes-512x1024 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.9 + mIoU(ms+flip): 81.33 + Config: configs/deeplabv3plus/deeplabv3plus_r101-d16-mg124_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D16-MG124 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Memory (GB): 9.9 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d16-mg124_512x1024_80k_cityscapes/deeplabv3plus_r101-d16-mg124_512x1024_80k_cityscapes_20200908_005644-ee6158e0.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d16-mg124_512x1024_80k_cityscapes/deeplabv3plus_r101-d16-mg124_512x1024_80k_cityscapes-20200908_005644.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r18b-d8_4xb2-80k_cityscapes-512x1024 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 75.87 + mIoU(ms+flip): 77.52 + Config: configs/deeplabv3plus/deeplabv3plus_r18b-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-18b-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Memory (GB): 2.1 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18b-d8_512x1024_80k_cityscapes/deeplabv3plus_r18b-d8_512x1024_80k_cityscapes_20201226_090828-e451abd9.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18b-d8_512x1024_80k_cityscapes/deeplabv3plus_r18b-d8_512x1024_80k_cityscapes-20201226_090828.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r50b-d8_4xb2-80k_cityscapes-512x1024 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 80.28 + mIoU(ms+flip): 81.44 + Config: configs/deeplabv3plus/deeplabv3plus_r50b-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50b-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Memory (GB): 7.4 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50b-d8_512x1024_80k_cityscapes/deeplabv3plus_r50b-d8_512x1024_80k_cityscapes_20201225_213645-a97e4e43.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50b-d8_512x1024_80k_cityscapes/deeplabv3plus_r50b-d8_512x1024_80k_cityscapes-20201225_213645.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r101b-d8_4xb2-80k_cityscapes-512x1024 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 80.16 + mIoU(ms+flip): 81.41 + Config: configs/deeplabv3plus/deeplabv3plus_r101b-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101b-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Memory (GB): 10.9 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101b-d8_512x1024_80k_cityscapes/deeplabv3plus_r101b-d8_512x1024_80k_cityscapes_20201226_190843-9c3c93a4.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101b-d8_512x1024_80k_cityscapes/deeplabv3plus_r101b-d8_512x1024_80k_cityscapes-20201226_190843.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r18b-d8_4xb2-80k_cityscapes-769x769 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 76.36 + mIoU(ms+flip): 78.24 + Config: configs/deeplabv3plus/deeplabv3plus_r18b-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-18b-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Memory (GB): 2.4 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18b-d8_769x769_80k_cityscapes/deeplabv3plus_r18b-d8_769x769_80k_cityscapes_20201226_151312-2c868aff.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18b-d8_769x769_80k_cityscapes/deeplabv3plus_r18b-d8_769x769_80k_cityscapes-20201226_151312.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r50b-d8_4xb2-80k_cityscapes-769x769 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.41 + mIoU(ms+flip): 80.56 + Config: configs/deeplabv3plus/deeplabv3plus_r50b-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50b-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Memory (GB): 8.4 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50b-d8_769x769_80k_cityscapes/deeplabv3plus_r50b-d8_769x769_80k_cityscapes_20201225_224655-8b596d1c.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50b-d8_769x769_80k_cityscapes/deeplabv3plus_r50b-d8_769x769_80k_cityscapes-20201225_224655.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r101b-d8_4xb2-80k_cityscapes-769x769 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.88 + mIoU(ms+flip): 81.46 + Config: configs/deeplabv3plus/deeplabv3plus_r101b-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101b-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Memory (GB): 12.3 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101b-d8_769x769_80k_cityscapes/deeplabv3plus_r101b-d8_769x769_80k_cityscapes_20201226_205041-227cdf7c.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101b-d8_769x769_80k_cityscapes/deeplabv3plus_r101b-d8_769x769_80k_cityscapes-20201226_205041.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r50-d8_4xb4-80k_ade20k-512x512 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 42.72 + mIoU(ms+flip): 43.75 + Config: configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Memory (GB): 10.6 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_ade20k/deeplabv3plus_r50-d8_512x512_80k_ade20k_20200614_185028-bf1400d8.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_ade20k/deeplabv3plus_r50-d8_512x512_80k_ade20k_20200614_185028.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r101-d8_4xb4-160k_ade20k-512x512 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 44.6 + mIoU(ms+flip): 46.06 + Config: configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-101-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Memory (GB): 14.1 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_ade20k/deeplabv3plus_r101-d8_512x512_80k_ade20k_20200615_014139-d5730af7.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_ade20k/deeplabv3plus_r101-d8_512x512_80k_ade20k_20200615_014139.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r50-d8_4xb4-160k_ade20k-512x512 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 43.95 + mIoU(ms+flip): 44.93 + Config: configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_160k_ade20k/deeplabv3plus_r50-d8_512x512_160k_ade20k_20200615_124504-6135c7e0.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_160k_ade20k/deeplabv3plus_r50-d8_512x512_160k_ade20k_20200615_124504.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r101-d8_4xb4-160k_ade20k-512x512 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 45.47 + mIoU(ms+flip): 46.35 + Config: configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-101-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_160k_ade20k/deeplabv3plus_r101-d8_512x512_160k_ade20k_20200615_123232-38ed86bb.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_160k_ade20k/deeplabv3plus_r101-d8_512x512_160k_ade20k_20200615_123232.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r50-d8_4xb4-20k_voc12aug-512x512 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 75.93 + mIoU(ms+flip): 77.5 + Config: configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-20k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - R-50-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Memory (GB): 7.6 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_20k_voc12aug/deeplabv3plus_r50-d8_512x512_20k_voc12aug_20200617_102323-aad58ef1.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_20k_voc12aug/deeplabv3plus_r50-d8_512x512_20k_voc12aug_20200617_102323.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r101-d8_4xb4-20k_voc12aug-512x512 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 77.22 + mIoU(ms+flip): 78.59 + Config: configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-20k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - R-101-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Memory (GB): 11.0 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_20k_voc12aug/deeplabv3plus_r101-d8_512x512_20k_voc12aug_20200617_102345-c7ff3d56.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_20k_voc12aug/deeplabv3plus_r101-d8_512x512_20k_voc12aug_20200617_102345.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r50-d8_4xb4-40k_voc12aug-512x512 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 76.81 + mIoU(ms+flip): 77.57 + Config: configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-40k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - R-50-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_40k_voc12aug/deeplabv3plus_r50-d8_512x512_40k_voc12aug_20200613_161759-e1b43aa9.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_40k_voc12aug/deeplabv3plus_r50-d8_512x512_40k_voc12aug_20200613_161759.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r101-d8_4xb4-40k_voc12aug-512x512 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 78.62 + mIoU(ms+flip): 79.53 + Config: configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-40k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - R-101-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_40k_voc12aug/deeplabv3plus_r101-d8_512x512_40k_voc12aug_20200613_205333-faf03387.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_40k_voc12aug/deeplabv3plus_r101-d8_512x512_40k_voc12aug_20200613_205333.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r50-d8_4xb4-40k_pascal-context-480x480 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: Pascal Context + Metrics: + mIoU: 47.3 + mIoU(ms+flip): 48.47 + Config: configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-40k_pascal-context-480x480.py + Metadata: + Training Data: Pascal Context + Batch Size: 16 + Architecture: + - R-101-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_40k_pascal_context/deeplabv3plus_r101-d8_480x480_40k_pascal_context_20200911_165459-d3c8a29e.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_40k_pascal_context/deeplabv3plus_r101-d8_480x480_40k_pascal_context-20200911_165459.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r50-d8_4xb4-80k_pascal-context-480x480 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: Pascal Context + Metrics: + mIoU: 47.23 + mIoU(ms+flip): 48.26 + Config: configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_pascal-context-480x480.py + Metadata: + Training Data: Pascal Context + Batch Size: 16 + Architecture: + - R-101-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_80k_pascal_context/deeplabv3plus_r101-d8_480x480_80k_pascal_context_20200911_155322-145d3ee8.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_80k_pascal_context/deeplabv3plus_r101-d8_480x480_80k_pascal_context-20200911_155322.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r101-d8_4xb4-40k_pascal-context-59-480x480 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: Pascal Context 59 + Metrics: + mIoU: 52.86 + mIoU(ms+flip): 54.54 + Config: configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-40k_pascal-context-59-480x480.py + Metadata: + Training Data: Pascal Context 59 + Batch Size: 16 + Architecture: + - R-101-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_40k_pascal_context_59/deeplabv3plus_r101-d8_480x480_40k_pascal_context_59_20210416_111233-ed937f15.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_40k_pascal_context_59/deeplabv3plus_r101-d8_480x480_40k_pascal_context_59-20210416_111233.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r101-d8_4xb4-80k_pascal-context-59-480x480 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: Pascal Context 59 + Metrics: + mIoU: 53.2 + mIoU(ms+flip): 54.67 + Config: configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-80k_pascal-context-59-480x480.py + Metadata: + Training Data: Pascal Context 59 + Batch Size: 16 + Architecture: + - R-101-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_80k_pascal_context_59/deeplabv3plus_r101-d8_480x480_80k_pascal_context_59_20210416_111127-7ca0331d.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_80k_pascal_context_59/deeplabv3plus_r101-d8_480x480_80k_pascal_context_59-20210416_111127.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r18-d8_4xb4-80k_loveda-512x512 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: LoveDA + Metrics: + mIoU: 50.28 + mIoU(ms+flip): 50.47 + Config: configs/deeplabv3plus/deeplabv3plus_r18-d8_4xb4-80k_loveda-512x512.py + Metadata: + Training Data: LoveDA + Batch Size: 16 + Architecture: + - R-18-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Memory (GB): 1.93 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_512x512_80k_loveda/deeplabv3plus_r18-d8_512x512_80k_loveda_20211104_132800-ce0fa0ca.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_512x512_80k_loveda/deeplabv3plus_r18-d8_512x512_80k_loveda_20211104_132800.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r50-d8_4xb4-80k_loveda-512x512 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: LoveDA + Metrics: + mIoU: 50.99 + mIoU(ms+flip): 50.65 + Config: configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_loveda-512x512.py + Metadata: + Training Data: LoveDA + Batch Size: 16 + Architecture: + - R-50-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Memory (GB): 7.37 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_loveda/deeplabv3plus_r50-d8_512x512_80k_loveda_20211105_080442-f0720392.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_loveda/deeplabv3plus_r50-d8_512x512_80k_loveda_20211105_080442.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r101-d8_4xb4-80k_loveda-512x512 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: LoveDA + Metrics: + mIoU: 51.47 + mIoU(ms+flip): 51.32 + Config: configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-80k_loveda-512x512.py + Metadata: + Training Data: LoveDA + Batch Size: 16 + Architecture: + - R-101-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Memory (GB): 10.84 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_loveda/deeplabv3plus_r101-d8_512x512_80k_loveda_20211105_110759-4c1f297e.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_loveda/deeplabv3plus_r101-d8_512x512_80k_loveda_20211105_110759.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r18-d8_4xb4-80k_potsdam-512x512 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: Potsdam + Metrics: + mIoU: 77.09 + mIoU(ms+flip): 78.44 + Config: configs/deeplabv3plus/deeplabv3plus_r18-d8_4xb4-80k_potsdam-512x512.py + Metadata: + Training Data: Potsdam + Batch Size: 16 + Architecture: + - R-18-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Memory (GB): 1.91 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_512x512_80k_potsdam/deeplabv3plus_r18-d8_512x512_80k_potsdam_20211219_020601-75fd5bc3.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_512x512_80k_potsdam/deeplabv3plus_r18-d8_512x512_80k_potsdam_20211219_020601.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r50-d8_4xb4-80k_potsdam-512x512 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: Potsdam + Metrics: + mIoU: 78.33 + mIoU(ms+flip): 79.27 + Config: configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_potsdam-512x512.py + Metadata: + Training Data: Potsdam + Batch Size: 16 + Architecture: + - R-50-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Memory (GB): 7.36 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_potsdam/deeplabv3plus_r50-d8_512x512_80k_potsdam_20211219_031508-7e7a2b24.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_potsdam/deeplabv3plus_r50-d8_512x512_80k_potsdam_20211219_031508.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r101-d8_4xb4-80k_potsdam-512x512 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: Potsdam + Metrics: + mIoU: 78.7 + mIoU(ms+flip): 79.47 + Config: configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-80k_potsdam-512x512.py + Metadata: + Training Data: Potsdam + Batch Size: 16 + Architecture: + - R-101-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Memory (GB): 10.83 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_potsdam/deeplabv3plus_r101-d8_512x512_80k_potsdam_20211219_031508-8b112708.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_potsdam/deeplabv3plus_r101-d8_512x512_80k_potsdam_20211219_031508.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r18-d8_4xb4-80k_vaihingen-512x512 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: Vaihingen + Metrics: + mIoU: 72.5 + mIoU(ms+flip): 74.13 + Config: configs/deeplabv3plus/deeplabv3plus_r18-d8_4xb4-80k_vaihingen-512x512.py + Metadata: + Training Data: Vaihingen + Batch Size: 16 + Architecture: + - R-18-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Memory (GB): 1.91 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_4x4_512x512_80k_vaihingen/deeplabv3plus_r18-d8_4x4_512x512_80k_vaihingen_20211231_230805-7626a263.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_4x4_512x512_80k_vaihingen/deeplabv3plus_r18-d8_4x4_512x512_80k_vaihingen_20211231_230805.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r50-d8_4xb4-80k_vaihingen-512x512 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: Vaihingen + Metrics: + mIoU: 73.97 + mIoU(ms+flip): 75.05 + Config: configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_vaihingen-512x512.py + Metadata: + Training Data: Vaihingen + Batch Size: 16 + Architecture: + - R-50-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Memory (GB): 7.36 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_4x4_512x512_80k_vaihingen/deeplabv3plus_r50-d8_4x4_512x512_80k_vaihingen_20211231_230816-5040938d.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_4x4_512x512_80k_vaihingen/deeplabv3plus_r50-d8_4x4_512x512_80k_vaihingen_20211231_230816.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r101-d8_4xb4-80k_vaihingen-512x512 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: Vaihingen + Metrics: + mIoU: 73.06 + mIoU(ms+flip): 74.14 + Config: configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-80k_vaihingen-512x512.py + Metadata: + Training Data: Vaihingen + Batch Size: 16 + Architecture: + - R-101-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Memory (GB): 10.83 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_4x4_512x512_80k_vaihingen/deeplabv3plus_r101-d8_4x4_512x512_80k_vaihingen_20211231_230816-8a095afa.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_4x4_512x512_80k_vaihingen/deeplabv3plus_r101-d8_4x4_512x512_80k_vaihingen_20211231_230816.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r18-d8_4xb4-80k_isaid-896x896 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: iSAID + Metrics: + mIoU: 61.35 + mIoU(ms+flip): 62.61 + Config: configs/deeplabv3plus/deeplabv3plus_r18-d8_4xb4-80k_isaid-896x896.py + Metadata: + Training Data: iSAID + Batch Size: 16 + Architecture: + - R-18-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Memory (GB): 6.19 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_4x4_896x896_80k_isaid/deeplabv3plus_r18-d8_4x4_896x896_80k_isaid_20220110_180526-7059991d.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_4x4_896x896_80k_isaid/deeplabv3plus_r18-d8_4x4_896x896_80k_isaid_20220110_180526.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r50-d8_4xb4-80k_isaid-896x896 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: iSAID + Metrics: + mIoU: 67.06 + mIoU(ms+flip): 68.02 + Config: configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_isaid-896x896.py + Metadata: + Training Data: iSAID + Batch Size: 16 + Architecture: + - R-50-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Memory (GB): 21.45 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_4x4_896x896_80k_isaid/deeplabv3plus_r50-d8_4x4_896x896_80k_isaid_20220110_180526-598be439.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_4x4_896x896_80k_isaid/deeplabv3plus_r50-d8_4x4_896x896_80k_isaid_20220110_180526.log.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch +- Name: deeplabv3plus_r50-d8_4xb2-300k_mapillay_v1_65-1280x1280 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: Mapillary Vistas v1.2 + Metrics: + mIoU: 47.35 + Config: configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-300k_mapillay_v1_65-1280x1280.py + Metadata: + Training Data: Mapillary Vistas v1.2 + Batch Size: 8 + Architecture: + - R-50-D8 + - DeepLabV3+ + Training Resources: 4x A100 GPUS + Memory (GB): 24.04 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-300k_mapillay_v1_65-1280x1280/deeplabv3plus_r50-d8_4xb2-300k_mapillay_v1_65-1280x1280_20230301_110504-655f8e43.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-300k_mapillay_v1_65-1280x1280/deeplabv3plus_r50-d8_4xb2-300k_mapillay_v1_65-1280x1280_20230301_110504.json + Paper: + Title: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + URL: https://arxiv.org/abs/1802.02611 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/sep_aspp_head.py#L30 + Framework: PyTorch diff --git a/configs/dmnet/README.md b/configs/dmnet/README.md index 535740ddd3..6004c06ccb 100644 --- a/configs/dmnet/README.md +++ b/configs/dmnet/README.md @@ -1,6 +1,6 @@ # DMNet -[Dynamic Multi-scale Filters for Semantic Segmentation](https://openaccess.thecvf.com/content_ICCV_2019/papers/He_Dynamic_Multi-Scale_Filters_for_Semantic_Segmentation_ICCV_2019_paper.pdf) +> [Dynamic Multi-scale Filters for Semantic Segmentation](https://openaccess.thecvf.com/content_ICCV_2019/papers/He_Dynamic_Multi-Scale_Filters_for_Semantic_Segmentation_ICCV_2019_paper.pdf) ## Introduction @@ -22,6 +22,30 @@ Multi-scale representation provides an effective way toaddress scale variation o +## Results and models + +### Cityscapes + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DMNet | R-50-D8 | 512x1024 | 40000 | 7.0 | 3.66 | V100 | 77.78 | 79.14 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dmnet/dmnet_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x1024_40k_cityscapes/dmnet_r50-d8_512x1024_40k_cityscapes_20201215_042326-615373cf.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x1024_40k_cityscapes/dmnet_r50-d8_512x1024_40k_cityscapes-20201215_042326.log.json) | +| DMNet | R-101-D8 | 512x1024 | 40000 | 10.6 | 2.54 | V100 | 78.37 | 79.72 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dmnet/dmnet_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x1024_40k_cityscapes/dmnet_r101-d8_512x1024_40k_cityscapes_20201215_043100-8291e976.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x1024_40k_cityscapes/dmnet_r101-d8_512x1024_40k_cityscapes-20201215_043100.log.json) | +| DMNet | R-50-D8 | 769x769 | 40000 | 7.9 | 1.57 | V100 | 78.49 | 80.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dmnet/dmnet_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_769x769_40k_cityscapes/dmnet_r50-d8_769x769_40k_cityscapes_20201215_093706-e7f0e23e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_769x769_40k_cityscapes/dmnet_r50-d8_769x769_40k_cityscapes-20201215_093706.log.json) | +| DMNet | R-101-D8 | 769x769 | 40000 | 12.0 | 1.01 | V100 | 77.62 | 78.94 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dmnet/dmnet_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_769x769_40k_cityscapes/dmnet_r101-d8_769x769_40k_cityscapes_20201215_081348-a74261f6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_769x769_40k_cityscapes/dmnet_r101-d8_769x769_40k_cityscapes-20201215_081348.log.json) | +| DMNet | R-50-D8 | 512x1024 | 80000 | - | - | V100 | 79.07 | 80.22 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dmnet/dmnet_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x1024_80k_cityscapes/dmnet_r50-d8_512x1024_80k_cityscapes_20201215_053728-3c8893b9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x1024_80k_cityscapes/dmnet_r50-d8_512x1024_80k_cityscapes-20201215_053728.log.json) | +| DMNet | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 79.64 | 80.67 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dmnet/dmnet_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x1024_80k_cityscapes/dmnet_r101-d8_512x1024_80k_cityscapes_20201215_031718-fa081cb8.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x1024_80k_cityscapes/dmnet_r101-d8_512x1024_80k_cityscapes-20201215_031718.log.json) | +| DMNet | R-50-D8 | 769x769 | 80000 | - | - | V100 | 79.22 | 80.55 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dmnet/dmnet_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_769x769_80k_cityscapes/dmnet_r50-d8_769x769_80k_cityscapes_20201215_034006-6060840e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_769x769_80k_cityscapes/dmnet_r50-d8_769x769_80k_cityscapes-20201215_034006.log.json) | +| DMNet | R-101-D8 | 769x769 | 80000 | - | - | V100 | 79.19 | 80.65 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dmnet/dmnet_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_769x769_80k_cityscapes/dmnet_r101-d8_769x769_80k_cityscapes_20201215_082810-7f0de59a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_769x769_80k_cityscapes/dmnet_r101-d8_769x769_80k_cityscapes-20201215_082810.log.json) | + +### ADE20K + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DMNet | R-50-D8 | 512x512 | 80000 | 9.4 | 20.95 | V100 | 42.37 | 43.62 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dmnet/dmnet_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x512_80k_ade20k/dmnet_r50-d8_512x512_80k_ade20k_20201215_144744-f89092a6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x512_80k_ade20k/dmnet_r50-d8_512x512_80k_ade20k-20201215_144744.log.json) | +| DMNet | R-101-D8 | 512x512 | 80000 | 13.0 | 13.88 | V100 | 45.34 | 46.13 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dmnet/dmnet_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x512_80k_ade20k/dmnet_r101-d8_512x512_80k_ade20k_20201215_104812-bfa45311.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x512_80k_ade20k/dmnet_r101-d8_512x512_80k_ade20k-20201215_104812.log.json) | +| DMNet | R-50-D8 | 512x512 | 160000 | - | - | V100 | 43.15 | 44.17 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dmnet/dmnet_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x512_160k_ade20k/dmnet_r50-d8_512x512_160k_ade20k_20201215_115313-025ab3f9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x512_160k_ade20k/dmnet_r50-d8_512x512_160k_ade20k-20201215_115313.log.json) | +| DMNet | R-101-D8 | 512x512 | 160000 | - | - | V100 | 45.42 | 46.76 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dmnet/dmnet_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x512_160k_ade20k/dmnet_r101-d8_512x512_160k_ade20k_20201215_111145-a0bc02ef.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x512_160k_ade20k/dmnet_r101-d8_512x512_160k_ade20k-20201215_111145.log.json) | + ## Citation ```bibtex @@ -33,27 +57,3 @@ month = {October}, year = {2019} } ``` - -## Results and models - -### Cityscapes - -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DMNet | R-50-D8 | 512x1024 | 40000 | 7.0 | 3.66 | 77.78 | 79.14 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dmnet/dmnet_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x1024_40k_cityscapes/dmnet_r50-d8_512x1024_40k_cityscapes_20201215_042326-615373cf.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x1024_40k_cityscapes/dmnet_r50-d8_512x1024_40k_cityscapes-20201215_042326.log.json) | -| DMNet | R-101-D8 | 512x1024 | 40000 | 10.6 | 2.54 | 78.37 | 79.72 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dmnet/dmnet_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x1024_40k_cityscapes/dmnet_r101-d8_512x1024_40k_cityscapes_20201215_043100-8291e976.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x1024_40k_cityscapes/dmnet_r101-d8_512x1024_40k_cityscapes-20201215_043100.log.json) | -| DMNet | R-50-D8 | 769x769 | 40000 | 7.9 | 1.57 | 78.49 | 80.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dmnet/dmnet_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_769x769_40k_cityscapes/dmnet_r50-d8_769x769_40k_cityscapes_20201215_093706-e7f0e23e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_769x769_40k_cityscapes/dmnet_r50-d8_769x769_40k_cityscapes-20201215_093706.log.json) | -| DMNet | R-101-D8 | 769x769 | 40000 | 12.0 | 1.01 | 77.62 | 78.94 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dmnet/dmnet_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_769x769_40k_cityscapes/dmnet_r101-d8_769x769_40k_cityscapes_20201215_081348-a74261f6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_769x769_40k_cityscapes/dmnet_r101-d8_769x769_40k_cityscapes-20201215_081348.log.json) | -| DMNet | R-50-D8 | 512x1024 | 80000 | - | - | 79.07 | 80.22 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dmnet/dmnet_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x1024_80k_cityscapes/dmnet_r50-d8_512x1024_80k_cityscapes_20201215_053728-3c8893b9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x1024_80k_cityscapes/dmnet_r50-d8_512x1024_80k_cityscapes-20201215_053728.log.json) | -| DMNet | R-101-D8 | 512x1024 | 80000 | - | - | 79.64 | 80.67 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dmnet/dmnet_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x1024_80k_cityscapes/dmnet_r101-d8_512x1024_80k_cityscapes_20201215_031718-fa081cb8.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x1024_80k_cityscapes/dmnet_r101-d8_512x1024_80k_cityscapes-20201215_031718.log.json) | -| DMNet | R-50-D8 | 769x769 | 80000 | - | - | 79.22 | 80.55 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dmnet/dmnet_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_769x769_80k_cityscapes/dmnet_r50-d8_769x769_80k_cityscapes_20201215_034006-6060840e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_769x769_80k_cityscapes/dmnet_r50-d8_769x769_80k_cityscapes-20201215_034006.log.json) | -| DMNet | R-101-D8 | 769x769 | 80000 | - | - | 79.19 | 80.65 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dmnet/dmnet_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_769x769_80k_cityscapes/dmnet_r101-d8_769x769_80k_cityscapes_20201215_082810-7f0de59a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_769x769_80k_cityscapes/dmnet_r101-d8_769x769_80k_cityscapes-20201215_082810.log.json) | - -### ADE20K - -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DMNet | R-50-D8 | 512x512 | 80000 | 9.4 | 20.95 | 42.37 | 43.62 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dmnet/dmnet_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x512_80k_ade20k/dmnet_r50-d8_512x512_80k_ade20k_20201215_144744-f89092a6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x512_80k_ade20k/dmnet_r50-d8_512x512_80k_ade20k-20201215_144744.log.json) | -| DMNet | R-101-D8 | 512x512 | 80000 | 13.0 | 13.88 | 45.34 | 46.13 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dmnet/dmnet_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x512_80k_ade20k/dmnet_r101-d8_512x512_80k_ade20k_20201215_104812-bfa45311.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x512_80k_ade20k/dmnet_r101-d8_512x512_80k_ade20k-20201215_104812.log.json) | -| DMNet | R-50-D8 | 512x512 | 160000 | - | - | 43.15 | 44.17 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dmnet/dmnet_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x512_160k_ade20k/dmnet_r50-d8_512x512_160k_ade20k_20201215_115313-025ab3f9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x512_160k_ade20k/dmnet_r50-d8_512x512_160k_ade20k-20201215_115313.log.json) | -| DMNet | R-101-D8 | 512x512 | 160000 | - | - | 45.42 | 46.76 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dmnet/dmnet_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x512_160k_ade20k/dmnet_r101-d8_512x512_160k_ade20k_20201215_111145-a0bc02ef.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x512_160k_ade20k/dmnet_r101-d8_512x512_160k_ade20k-20201215_111145.log.json) | diff --git a/configs/dmnet/dmnet.yml b/configs/dmnet/dmnet.yml deleted file mode 100644 index dfb80ba7e1..0000000000 --- a/configs/dmnet/dmnet.yml +++ /dev/null @@ -1,232 +0,0 @@ -Collections: -- Name: DMNet - Metadata: - Training Data: - - Cityscapes - - ADE20K - Paper: - URL: https://openaccess.thecvf.com/content_ICCV_2019/papers/He_Dynamic_Multi-Scale_Filters_for_Semantic_Segmentation_ICCV_2019_paper.pdf - Title: Dynamic Multi-scale Filters for Semantic Segmentation - README: configs/dmnet/README.md - Code: - URL: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/dm_head.py#L93 - Version: v0.17.0 - Converted From: - Code: https://github.com/Junjun2016/DMNet -Models: -- Name: dmnet_r50-d8_4xb2-40k_cityscapes-512x1024 - In Collection: DMNet - Metadata: - backbone: R-50-D8 - crop size: (512,1024) - lr schd: 40000 - inference time (ms/im): - - value: 273.22 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 7.0 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 77.78 - mIoU(ms+flip): 79.14 - Config: configs/dmnet/dmnet_r50-d8_4xb2-40k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x1024_40k_cityscapes/dmnet_r50-d8_512x1024_40k_cityscapes_20201215_042326-615373cf.pth -- Name: dmnet_r101-d8_4xb2-40k_cityscapes-512x1024 - In Collection: DMNet - Metadata: - backbone: R-101-D8 - crop size: (512,1024) - lr schd: 40000 - inference time (ms/im): - - value: 393.7 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 10.6 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.37 - mIoU(ms+flip): 79.72 - Config: configs/dmnet/dmnet_r101-d8_4xb2-40k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x1024_40k_cityscapes/dmnet_r101-d8_512x1024_40k_cityscapes_20201215_043100-8291e976.pth -- Name: dmnet_r50-d8_4xb2-40k_cityscapes-769x769 - In Collection: DMNet - Metadata: - backbone: R-50-D8 - crop size: (769,769) - lr schd: 40000 - inference time (ms/im): - - value: 636.94 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 7.9 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.49 - mIoU(ms+flip): 80.27 - Config: configs/dmnet/dmnet_r50-d8_4xb2-40k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_769x769_40k_cityscapes/dmnet_r50-d8_769x769_40k_cityscapes_20201215_093706-e7f0e23e.pth -- Name: dmnet_r101-d8_4xb2-40k_cityscapes-769x769 - In Collection: DMNet - Metadata: - backbone: R-101-D8 - crop size: (769,769) - lr schd: 40000 - inference time (ms/im): - - value: 990.1 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 12.0 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 77.62 - mIoU(ms+flip): 78.94 - Config: configs/dmnet/dmnet_r101-d8_4xb2-40k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_769x769_40k_cityscapes/dmnet_r101-d8_769x769_40k_cityscapes_20201215_081348-a74261f6.pth -- Name: dmnet_r50-d8_4xb2-80k_cityscapes-512x1024 - In Collection: DMNet - Metadata: - backbone: R-50-D8 - crop size: (512,1024) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.07 - mIoU(ms+flip): 80.22 - Config: configs/dmnet/dmnet_r50-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x1024_80k_cityscapes/dmnet_r50-d8_512x1024_80k_cityscapes_20201215_053728-3c8893b9.pth -- Name: dmnet_r101-d8_4xb2-80k_cityscapes-512x1024 - In Collection: DMNet - Metadata: - backbone: R-101-D8 - crop size: (512,1024) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.64 - mIoU(ms+flip): 80.67 - Config: configs/dmnet/dmnet_r101-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x1024_80k_cityscapes/dmnet_r101-d8_512x1024_80k_cityscapes_20201215_031718-fa081cb8.pth -- Name: dmnet_r50-d8_4xb2-80k_cityscapes-769x769 - In Collection: DMNet - Metadata: - backbone: R-50-D8 - crop size: (769,769) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.22 - mIoU(ms+flip): 80.55 - Config: configs/dmnet/dmnet_r50-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_769x769_80k_cityscapes/dmnet_r50-d8_769x769_80k_cityscapes_20201215_034006-6060840e.pth -- Name: dmnet_r101-d8_4xb2-80k_cityscapes-769x769 - In Collection: DMNet - Metadata: - backbone: R-101-D8 - crop size: (769,769) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.19 - mIoU(ms+flip): 80.65 - Config: configs/dmnet/dmnet_r101-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_769x769_80k_cityscapes/dmnet_r101-d8_769x769_80k_cityscapes_20201215_082810-7f0de59a.pth -- Name: dmnet_r50-d8_4xb4-80k_ade20k-512x512 - In Collection: DMNet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 47.73 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 9.4 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 42.37 - mIoU(ms+flip): 43.62 - Config: configs/dmnet/dmnet_r50-d8_4xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x512_80k_ade20k/dmnet_r50-d8_512x512_80k_ade20k_20201215_144744-f89092a6.pth -- Name: dmnet_r101-d8_4xb4-80k_ade20k-512x512 - In Collection: DMNet - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 72.05 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 13.0 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 45.34 - mIoU(ms+flip): 46.13 - Config: configs/dmnet/dmnet_r101-d8_4xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x512_80k_ade20k/dmnet_r101-d8_512x512_80k_ade20k_20201215_104812-bfa45311.pth -- Name: dmnet_r50-d8_4xb4-160k_ade20k-512x512 - In Collection: DMNet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 43.15 - mIoU(ms+flip): 44.17 - Config: configs/dmnet/dmnet_r50-d8_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x512_160k_ade20k/dmnet_r50-d8_512x512_160k_ade20k_20201215_115313-025ab3f9.pth -- Name: dmnet_r101-d8_4xb4-160k_ade20k-512x512 - In Collection: DMNet - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 45.42 - mIoU(ms+flip): 46.76 - Config: configs/dmnet/dmnet_r101-d8_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x512_160k_ade20k/dmnet_r101-d8_512x512_160k_ade20k_20201215_111145-a0bc02ef.pth diff --git a/configs/dmnet/metafile.yaml b/configs/dmnet/metafile.yaml new file mode 100644 index 0000000000..7f5e536753 --- /dev/null +++ b/configs/dmnet/metafile.yaml @@ -0,0 +1,296 @@ +Collections: +- Name: DMNet + License: Apache License 2.0 + Metadata: + Training Data: + - Cityscapes + - ADE20K + Paper: + Title: Dynamic Multi-scale Filters for Semantic Segmentation + URL: https://openaccess.thecvf.com/content_ICCV_2019/papers/He_Dynamic_Multi-Scale_Filters_for_Semantic_Segmentation_ICCV_2019_paper.pdf + README: configs/dmnet/README.md + Frameworks: + - PyTorch +Models: +- Name: dmnet_r50-d8_4xb2-40k_cityscapes-512x1024 + In Collection: DMNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 77.78 + mIoU(ms+flip): 79.14 + Config: configs/dmnet/dmnet_r50-d8_4xb2-40k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - DMNet + Training Resources: 4x V100 GPUS + Memory (GB): 7.0 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x1024_40k_cityscapes/dmnet_r50-d8_512x1024_40k_cityscapes_20201215_042326-615373cf.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x1024_40k_cityscapes/dmnet_r50-d8_512x1024_40k_cityscapes-20201215_042326.log.json + Paper: + Title: Dynamic Multi-scale Filters for Semantic Segmentation + URL: https://openaccess.thecvf.com/content_ICCV_2019/papers/He_Dynamic_Multi-Scale_Filters_for_Semantic_Segmentation_ICCV_2019_paper.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/dm_head.py#L93 + Framework: PyTorch +- Name: dmnet_r101-d8_4xb2-40k_cityscapes-512x1024 + In Collection: DMNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.37 + mIoU(ms+flip): 79.72 + Config: configs/dmnet/dmnet_r101-d8_4xb2-40k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - DMNet + Training Resources: 4x V100 GPUS + Memory (GB): 10.6 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x1024_40k_cityscapes/dmnet_r101-d8_512x1024_40k_cityscapes_20201215_043100-8291e976.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x1024_40k_cityscapes/dmnet_r101-d8_512x1024_40k_cityscapes-20201215_043100.log.json + Paper: + Title: Dynamic Multi-scale Filters for Semantic Segmentation + URL: https://openaccess.thecvf.com/content_ICCV_2019/papers/He_Dynamic_Multi-Scale_Filters_for_Semantic_Segmentation_ICCV_2019_paper.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/dm_head.py#L93 + Framework: PyTorch +- Name: dmnet_r50-d8_4xb2-40k_cityscapes-769x769 + In Collection: DMNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.49 + mIoU(ms+flip): 80.27 + Config: configs/dmnet/dmnet_r50-d8_4xb2-40k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - DMNet + Training Resources: 4x V100 GPUS + Memory (GB): 7.9 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_769x769_40k_cityscapes/dmnet_r50-d8_769x769_40k_cityscapes_20201215_093706-e7f0e23e.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_769x769_40k_cityscapes/dmnet_r50-d8_769x769_40k_cityscapes-20201215_093706.log.json + Paper: + Title: Dynamic Multi-scale Filters for Semantic Segmentation + URL: https://openaccess.thecvf.com/content_ICCV_2019/papers/He_Dynamic_Multi-Scale_Filters_for_Semantic_Segmentation_ICCV_2019_paper.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/dm_head.py#L93 + Framework: PyTorch +- Name: dmnet_r101-d8_4xb2-40k_cityscapes-769x769 + In Collection: DMNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 77.62 + mIoU(ms+flip): 78.94 + Config: configs/dmnet/dmnet_r101-d8_4xb2-40k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - DMNet + Training Resources: 4x V100 GPUS + Memory (GB): 12.0 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_769x769_40k_cityscapes/dmnet_r101-d8_769x769_40k_cityscapes_20201215_081348-a74261f6.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_769x769_40k_cityscapes/dmnet_r101-d8_769x769_40k_cityscapes-20201215_081348.log.json + Paper: + Title: Dynamic Multi-scale Filters for Semantic Segmentation + URL: https://openaccess.thecvf.com/content_ICCV_2019/papers/He_Dynamic_Multi-Scale_Filters_for_Semantic_Segmentation_ICCV_2019_paper.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/dm_head.py#L93 + Framework: PyTorch +- Name: dmnet_r50-d8_4xb2-80k_cityscapes-512x1024 + In Collection: DMNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.07 + mIoU(ms+flip): 80.22 + Config: configs/dmnet/dmnet_r50-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - DMNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x1024_80k_cityscapes/dmnet_r50-d8_512x1024_80k_cityscapes_20201215_053728-3c8893b9.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x1024_80k_cityscapes/dmnet_r50-d8_512x1024_80k_cityscapes-20201215_053728.log.json + Paper: + Title: Dynamic Multi-scale Filters for Semantic Segmentation + URL: https://openaccess.thecvf.com/content_ICCV_2019/papers/He_Dynamic_Multi-Scale_Filters_for_Semantic_Segmentation_ICCV_2019_paper.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/dm_head.py#L93 + Framework: PyTorch +- Name: dmnet_r101-d8_4xb2-80k_cityscapes-512x1024 + In Collection: DMNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.64 + mIoU(ms+flip): 80.67 + Config: configs/dmnet/dmnet_r101-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - DMNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x1024_80k_cityscapes/dmnet_r101-d8_512x1024_80k_cityscapes_20201215_031718-fa081cb8.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x1024_80k_cityscapes/dmnet_r101-d8_512x1024_80k_cityscapes-20201215_031718.log.json + Paper: + Title: Dynamic Multi-scale Filters for Semantic Segmentation + URL: https://openaccess.thecvf.com/content_ICCV_2019/papers/He_Dynamic_Multi-Scale_Filters_for_Semantic_Segmentation_ICCV_2019_paper.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/dm_head.py#L93 + Framework: PyTorch +- Name: dmnet_r50-d8_4xb2-80k_cityscapes-769x769 + In Collection: DMNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.22 + mIoU(ms+flip): 80.55 + Config: configs/dmnet/dmnet_r50-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - DMNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_769x769_80k_cityscapes/dmnet_r50-d8_769x769_80k_cityscapes_20201215_034006-6060840e.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_769x769_80k_cityscapes/dmnet_r50-d8_769x769_80k_cityscapes-20201215_034006.log.json + Paper: + Title: Dynamic Multi-scale Filters for Semantic Segmentation + URL: https://openaccess.thecvf.com/content_ICCV_2019/papers/He_Dynamic_Multi-Scale_Filters_for_Semantic_Segmentation_ICCV_2019_paper.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/dm_head.py#L93 + Framework: PyTorch +- Name: dmnet_r101-d8_4xb2-80k_cityscapes-769x769 + In Collection: DMNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.19 + mIoU(ms+flip): 80.65 + Config: configs/dmnet/dmnet_r101-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - DMNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_769x769_80k_cityscapes/dmnet_r101-d8_769x769_80k_cityscapes_20201215_082810-7f0de59a.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_769x769_80k_cityscapes/dmnet_r101-d8_769x769_80k_cityscapes-20201215_082810.log.json + Paper: + Title: Dynamic Multi-scale Filters for Semantic Segmentation + URL: https://openaccess.thecvf.com/content_ICCV_2019/papers/He_Dynamic_Multi-Scale_Filters_for_Semantic_Segmentation_ICCV_2019_paper.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/dm_head.py#L93 + Framework: PyTorch +- Name: dmnet_r50-d8_4xb4-80k_ade20k-512x512 + In Collection: DMNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 42.37 + mIoU(ms+flip): 43.62 + Config: configs/dmnet/dmnet_r50-d8_4xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50-D8 + - DMNet + Training Resources: 4x V100 GPUS + Memory (GB): 9.4 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x512_80k_ade20k/dmnet_r50-d8_512x512_80k_ade20k_20201215_144744-f89092a6.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x512_80k_ade20k/dmnet_r50-d8_512x512_80k_ade20k-20201215_144744.log.json + Paper: + Title: Dynamic Multi-scale Filters for Semantic Segmentation + URL: https://openaccess.thecvf.com/content_ICCV_2019/papers/He_Dynamic_Multi-Scale_Filters_for_Semantic_Segmentation_ICCV_2019_paper.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/dm_head.py#L93 + Framework: PyTorch +- Name: dmnet_r101-d8_4xb4-80k_ade20k-512x512 + In Collection: DMNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 45.34 + mIoU(ms+flip): 46.13 + Config: configs/dmnet/dmnet_r101-d8_4xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-101-D8 + - DMNet + Training Resources: 4x V100 GPUS + Memory (GB): 13.0 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x512_80k_ade20k/dmnet_r101-d8_512x512_80k_ade20k_20201215_104812-bfa45311.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x512_80k_ade20k/dmnet_r101-d8_512x512_80k_ade20k-20201215_104812.log.json + Paper: + Title: Dynamic Multi-scale Filters for Semantic Segmentation + URL: https://openaccess.thecvf.com/content_ICCV_2019/papers/He_Dynamic_Multi-Scale_Filters_for_Semantic_Segmentation_ICCV_2019_paper.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/dm_head.py#L93 + Framework: PyTorch +- Name: dmnet_r50-d8_4xb4-160k_ade20k-512x512 + In Collection: DMNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 43.15 + mIoU(ms+flip): 44.17 + Config: configs/dmnet/dmnet_r50-d8_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50-D8 + - DMNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x512_160k_ade20k/dmnet_r50-d8_512x512_160k_ade20k_20201215_115313-025ab3f9.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x512_160k_ade20k/dmnet_r50-d8_512x512_160k_ade20k-20201215_115313.log.json + Paper: + Title: Dynamic Multi-scale Filters for Semantic Segmentation + URL: https://openaccess.thecvf.com/content_ICCV_2019/papers/He_Dynamic_Multi-Scale_Filters_for_Semantic_Segmentation_ICCV_2019_paper.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/dm_head.py#L93 + Framework: PyTorch +- Name: dmnet_r101-d8_4xb4-160k_ade20k-512x512 + In Collection: DMNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 45.42 + mIoU(ms+flip): 46.76 + Config: configs/dmnet/dmnet_r101-d8_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-101-D8 + - DMNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x512_160k_ade20k/dmnet_r101-d8_512x512_160k_ade20k_20201215_111145-a0bc02ef.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x512_160k_ade20k/dmnet_r101-d8_512x512_160k_ade20k-20201215_111145.log.json + Paper: + Title: Dynamic Multi-scale Filters for Semantic Segmentation + URL: https://openaccess.thecvf.com/content_ICCV_2019/papers/He_Dynamic_Multi-Scale_Filters_for_Semantic_Segmentation_ICCV_2019_paper.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/dm_head.py#L93 + Framework: PyTorch diff --git a/configs/dnlnet/README.md b/configs/dnlnet/README.md index ab24549ed6..12338c730c 100644 --- a/configs/dnlnet/README.md +++ b/configs/dnlnet/README.md @@ -1,6 +1,6 @@ # DNLNet -[Disentangled Non-Local Neural Networks](https://arxiv.org/abs/2006.06668) +> [Disentangled Non-Local Neural Networks](https://arxiv.org/abs/2006.06668) ## Introduction @@ -22,7 +22,31 @@ The non-local block is a popular module for strengthening the context modeling a -## Citation +## Results and models (in progress) + +### Cityscapes + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------: | -------------- | ------ | ----: | ------------- | ------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DNLNet | R-50-D8 | 512x1024 | 40000 | 7.3 | 2.56 | V100 | 78.61 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dnlnet/dnl_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x1024_40k_cityscapes/dnl_r50-d8_512x1024_40k_cityscapes_20200904_233629-53d4ea93.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x1024_40k_cityscapes/dnl_r50-d8_512x1024_40k_cityscapes-20200904_233629.log.json) | +| DNLNet | R-101-D8 | 512x1024 | 40000 | 10.9 | 1.96 | V100 | 78.31 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dnlnet/dnl_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x1024_40k_cityscapes/dnl_r101-d8_512x1024_40k_cityscapes_20200904_233629-9928ffef.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x1024_40k_cityscapes/dnl_r101-d8_512x1024_40k_cityscapes-20200904_233629.log.json) | +| DNLNet | R-50-D8 | 769x769 | 40000 | 9.2 | 1.50 | V100 | 78.44 | 80.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dnlnet/dnl_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_769x769_40k_cityscapes/dnl_r50-d8_769x769_40k_cityscapes_20200820_232206-0f283785.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_769x769_40k_cityscapes/dnl_r50-d8_769x769_40k_cityscapes-20200820_232206.log.json) | +| DNLNet | R-101-D8 | 769x769 | 40000 | 12.6 | 1.02 | V100 | 76.39 | 77.77 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dnlnet/dnl_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_769x769_40k_cityscapes/dnl_r101-d8_769x769_40k_cityscapes_20200820_171256-76c596df.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_769x769_40k_cityscapes/dnl_r101-d8_769x769_40k_cityscapes-20200820_171256.log.json) | +| DNLNet | R-50-D8 | 512x1024 | 80000 | - | - | V100 | 79.33 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dnlnet/dnl_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x1024_80k_cityscapes/dnl_r50-d8_512x1024_80k_cityscapes_20200904_233629-58b2f778.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x1024_80k_cityscapes/dnl_r50-d8_512x1024_80k_cityscapes-20200904_233629.log.json) | +| DNLNet | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 80.41 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dnlnet/dnl_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x1024_80k_cityscapes/dnl_r101-d8_512x1024_80k_cityscapes_20200904_233629-758e2dd4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x1024_80k_cityscapes/dnl_r101-d8_512x1024_80k_cityscapes-20200904_233629.log.json) | +| DNLNet | R-50-D8 | 769x769 | 80000 | - | - | V100 | 79.36 | 80.70 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dnlnet/dnl_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_769x769_80k_cityscapes/dnl_r50-d8_769x769_80k_cityscapes_20200820_011925-366bc4c7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_769x769_80k_cityscapes/dnl_r50-d8_769x769_80k_cityscapes-20200820_011925.log.json) | +| DNLNet | R-101-D8 | 769x769 | 80000 | - | - | V100 | 79.41 | 80.68 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dnlnet/dnl_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_769x769_80k_cityscapes/dnl_r101-d8_769x769_80k_cityscapes_20200821_051111-95ff84ab.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_769x769_80k_cityscapes/dnl_r101-d8_769x769_80k_cityscapes-20200821_051111.log.json) | + +### ADE20K + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------: | -------------- | ------ | ----: | ------------- | -------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DNLNet | R-50-D8 | 512x512 | 80000 | 8.8 | 20.66 | V100 | 41.76 | 42.99 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dnlnet/dnl_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x512_80k_ade20k/dnl_r50-d8_512x512_80k_ade20k_20200826_183354-1cf6e0c1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x512_80k_ade20k/dnl_r50-d8_512x512_80k_ade20k-20200826_183354.log.json) | +| DNLNet | R-101-D8 | 512x512 | 80000 | 12.8 | 12.54 | V100 | 43.76 | 44.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dnlnet/dnl_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x512_80k_ade20k/dnl_r101-d8_512x512_80k_ade20k_20200826_183354-d820d6ea.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x512_80k_ade20k/dnl_r101-d8_512x512_80k_ade20k-20200826_183354.log.json) | +| DNLNet | R-50-D8 | 512x512 | 160000 | - | - | V100 | 41.87 | 43.01 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dnlnet/dnl_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x512_160k_ade20k/dnl_r50-d8_512x512_160k_ade20k_20200826_183350-37837798.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x512_160k_ade20k/dnl_r50-d8_512x512_160k_ade20k-20200826_183350.log.json) | +| DNLNet | R-101-D8 | 512x512 | 160000 | - | - | V100 | 44.25 | 45.78 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dnlnet/dnl_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x512_160k_ade20k/dnl_r101-d8_512x512_160k_ade20k_20200826_183350-ed522c61.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x512_160k_ade20k/dnl_r101-d8_512x512_160k_ade20k-20200826_183350.log.json) | + +## Notes This example is to reproduce ["Disentangled Non-Local Neural Networks"](https://arxiv.org/abs/2006.06668) for semantic segmentation. It is still in progress. @@ -36,27 +60,3 @@ This example is to reproduce ["Disentangled Non-Local Neural Networks"](https:// booktitle={ECCV} } ``` - -## Results and models (in progress) - -### Cityscapes - -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------: | -------------- | ----: | ------------- | ------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DNLNet | R-50-D8 | 512x1024 | 40000 | 7.3 | 2.56 | 78.61 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dnlnet/dnl_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x1024_40k_cityscapes/dnl_r50-d8_512x1024_40k_cityscapes_20200904_233629-53d4ea93.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x1024_40k_cityscapes/dnl_r50-d8_512x1024_40k_cityscapes-20200904_233629.log.json) | -| DNLNet | R-101-D8 | 512x1024 | 40000 | 10.9 | 1.96 | 78.31 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dnlnet/dnl_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x1024_40k_cityscapes/dnl_r101-d8_512x1024_40k_cityscapes_20200904_233629-9928ffef.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x1024_40k_cityscapes/dnl_r101-d8_512x1024_40k_cityscapes-20200904_233629.log.json) | -| DNLNet | R-50-D8 | 769x769 | 40000 | 9.2 | 1.50 | 78.44 | 80.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dnlnet/dnl_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_769x769_40k_cityscapes/dnl_r50-d8_769x769_40k_cityscapes_20200820_232206-0f283785.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_769x769_40k_cityscapes/dnl_r50-d8_769x769_40k_cityscapes-20200820_232206.log.json) | -| DNLNet | R-101-D8 | 769x769 | 40000 | 12.6 | 1.02 | 76.39 | 77.77 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dnlnet/dnl_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_769x769_40k_cityscapes/dnl_r101-d8_769x769_40k_cityscapes_20200820_171256-76c596df.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_769x769_40k_cityscapes/dnl_r101-d8_769x769_40k_cityscapes-20200820_171256.log.json) | -| DNLNet | R-50-D8 | 512x1024 | 80000 | - | - | 79.33 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dnlnet/dnl_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x1024_80k_cityscapes/dnl_r50-d8_512x1024_80k_cityscapes_20200904_233629-58b2f778.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x1024_80k_cityscapes/dnl_r50-d8_512x1024_80k_cityscapes-20200904_233629.log.json) | -| DNLNet | R-101-D8 | 512x1024 | 80000 | - | - | 80.41 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dnlnet/dnl_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x1024_80k_cityscapes/dnl_r101-d8_512x1024_80k_cityscapes_20200904_233629-758e2dd4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x1024_80k_cityscapes/dnl_r101-d8_512x1024_80k_cityscapes-20200904_233629.log.json) | -| DNLNet | R-50-D8 | 769x769 | 80000 | - | - | 79.36 | 80.70 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dnlnet/dnl_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_769x769_80k_cityscapes/dnl_r50-d8_769x769_80k_cityscapes_20200820_011925-366bc4c7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_769x769_80k_cityscapes/dnl_r50-d8_769x769_80k_cityscapes-20200820_011925.log.json) | -| DNLNet | R-101-D8 | 769x769 | 80000 | - | - | 79.41 | 80.68 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dnlnet/dnl_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_769x769_80k_cityscapes/dnl_r101-d8_769x769_80k_cityscapes_20200821_051111-95ff84ab.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_769x769_80k_cityscapes/dnl_r101-d8_769x769_80k_cityscapes-20200821_051111.log.json) | - -### ADE20K - -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------: | -------------- | ----: | ------------- | -------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DNLNet | R-50-D8 | 512x512 | 80000 | 8.8 | 20.66 | 41.76 | 42.99 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dnlnet/dnl_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x512_80k_ade20k/dnl_r50-d8_512x512_80k_ade20k_20200826_183354-1cf6e0c1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x512_80k_ade20k/dnl_r50-d8_512x512_80k_ade20k-20200826_183354.log.json) | -| DNLNet | R-101-D8 | 512x512 | 80000 | 12.8 | 12.54 | 43.76 | 44.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dnlnet/dnl_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x512_80k_ade20k/dnl_r101-d8_512x512_80k_ade20k_20200826_183354-d820d6ea.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x512_80k_ade20k/dnl_r101-d8_512x512_80k_ade20k-20200826_183354.log.json) | -| DNLNet | R-50-D8 | 512x512 | 160000 | - | - | 41.87 | 43.01 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dnlnet/dnl_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x512_160k_ade20k/dnl_r50-d8_512x512_160k_ade20k_20200826_183350-37837798.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x512_160k_ade20k/dnl_r50-d8_512x512_160k_ade20k-20200826_183350.log.json) | -| DNLNet | R-101-D8 | 512x512 | 160000 | - | - | 44.25 | 45.78 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dnlnet/dnl_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x512_160k_ade20k/dnl_r101-d8_512x512_160k_ade20k_20200826_183350-ed522c61.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x512_160k_ade20k/dnl_r101-d8_512x512_160k_ade20k-20200826_183350.log.json) | diff --git a/configs/dnlnet/dnlnet.yml b/configs/dnlnet/dnlnet.yml deleted file mode 100644 index ae65dbbaca..0000000000 --- a/configs/dnlnet/dnlnet.yml +++ /dev/null @@ -1,228 +0,0 @@ -Collections: -- Name: DNLNet - Metadata: - Training Data: - - Cityscapes - - ADE20K - Paper: - URL: https://arxiv.org/abs/2006.06668 - Title: Disentangled Non-Local Neural Networks - README: configs/dnlnet/README.md - Code: - URL: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/dnl_head.py#L88 - Version: v0.17.0 - Converted From: - Code: https://github.com/yinmh17/DNL-Semantic-Segmentation -Models: -- Name: dnl_r50-d8_4xb2-40k_cityscapes-512x1024 - In Collection: DNLNet - Metadata: - backbone: R-50-D8 - crop size: (512,1024) - lr schd: 40000 - inference time (ms/im): - - value: 390.62 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 7.3 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.61 - Config: configs/dnlnet/dnl_r50-d8_4xb2-40k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x1024_40k_cityscapes/dnl_r50-d8_512x1024_40k_cityscapes_20200904_233629-53d4ea93.pth -- Name: dnl_r101-d8_4xb2-40k_cityscapes-512x1024 - In Collection: DNLNet - Metadata: - backbone: R-101-D8 - crop size: (512,1024) - lr schd: 40000 - inference time (ms/im): - - value: 510.2 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 10.9 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.31 - Config: configs/dnlnet/dnl_r101-d8_4xb2-40k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x1024_40k_cityscapes/dnl_r101-d8_512x1024_40k_cityscapes_20200904_233629-9928ffef.pth -- Name: dnl_r50-d8_4xb2-40k_cityscapes-769x769 - In Collection: DNLNet - Metadata: - backbone: R-50-D8 - crop size: (769,769) - lr schd: 40000 - inference time (ms/im): - - value: 666.67 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 9.2 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.44 - mIoU(ms+flip): 80.27 - Config: configs/dnlnet/dnl_r50-d8_4xb2-40k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_769x769_40k_cityscapes/dnl_r50-d8_769x769_40k_cityscapes_20200820_232206-0f283785.pth -- Name: dnl_r101-d8_4xb2-40k_cityscapes-769x769 - In Collection: DNLNet - Metadata: - backbone: R-101-D8 - crop size: (769,769) - lr schd: 40000 - inference time (ms/im): - - value: 980.39 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 12.6 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 76.39 - mIoU(ms+flip): 77.77 - Config: configs/dnlnet/dnl_r101-d8_4xb2-40k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_769x769_40k_cityscapes/dnl_r101-d8_769x769_40k_cityscapes_20200820_171256-76c596df.pth -- Name: dnl_r50-d8_4xb2-80k_cityscapes-512x1024 - In Collection: DNLNet - Metadata: - backbone: R-50-D8 - crop size: (512,1024) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.33 - Config: configs/dnlnet/dnl_r50-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x1024_80k_cityscapes/dnl_r50-d8_512x1024_80k_cityscapes_20200904_233629-58b2f778.pth -- Name: dnl_r101-d8_4xb2-80k_cityscapes-512x1024 - In Collection: DNLNet - Metadata: - backbone: R-101-D8 - crop size: (512,1024) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 80.41 - Config: configs/dnlnet/dnl_r101-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x1024_80k_cityscapes/dnl_r101-d8_512x1024_80k_cityscapes_20200904_233629-758e2dd4.pth -- Name: dnl_r50-d8_4xb2-80k_cityscapes-769x769 - In Collection: DNLNet - Metadata: - backbone: R-50-D8 - crop size: (769,769) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.36 - mIoU(ms+flip): 80.7 - Config: configs/dnlnet/dnl_r50-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_769x769_80k_cityscapes/dnl_r50-d8_769x769_80k_cityscapes_20200820_011925-366bc4c7.pth -- Name: dnl_r101-d8_4xb2-80k_cityscapes-769x769 - In Collection: DNLNet - Metadata: - backbone: R-101-D8 - crop size: (769,769) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.41 - mIoU(ms+flip): 80.68 - Config: configs/dnlnet/dnl_r101-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_769x769_80k_cityscapes/dnl_r101-d8_769x769_80k_cityscapes_20200821_051111-95ff84ab.pth -- Name: dnl_r50-d8_4xb4-80k_ade20k-512x512 - In Collection: DNLNet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 48.4 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 8.8 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 41.76 - mIoU(ms+flip): 42.99 - Config: configs/dnlnet/dnl_r50-d8_4xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x512_80k_ade20k/dnl_r50-d8_512x512_80k_ade20k_20200826_183354-1cf6e0c1.pth -- Name: dnl_r101-d8_4xb4-80k_ade20k-512x512 - In Collection: DNLNet - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 79.74 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 12.8 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 43.76 - mIoU(ms+flip): 44.91 - Config: configs/dnlnet/dnl_r101-d8_4xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x512_80k_ade20k/dnl_r101-d8_512x512_80k_ade20k_20200826_183354-d820d6ea.pth -- Name: dnl_r50-d8_4xb4-160k_ade20k-512x512 - In Collection: DNLNet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 41.87 - mIoU(ms+flip): 43.01 - Config: configs/dnlnet/dnl_r50-d8_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x512_160k_ade20k/dnl_r50-d8_512x512_160k_ade20k_20200826_183350-37837798.pth -- Name: dnl_r101-d8_4xb4-160k_ade20k-512x512 - In Collection: DNLNet - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 44.25 - mIoU(ms+flip): 45.78 - Config: configs/dnlnet/dnl_r101-d8_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x512_160k_ade20k/dnl_r101-d8_512x512_160k_ade20k_20200826_183350-ed522c61.pth diff --git a/configs/dnlnet/metafile.yaml b/configs/dnlnet/metafile.yaml new file mode 100644 index 0000000000..22e48d3dc5 --- /dev/null +++ b/configs/dnlnet/metafile.yaml @@ -0,0 +1,292 @@ +Collections: +- Name: DNLNet + License: Apache License 2.0 + Metadata: + Training Data: + - Cityscapes + - ADE20K + Paper: + Title: Disentangled Non-Local Neural Networks + URL: https://arxiv.org/abs/2006.06668 + README: configs/dnlnet/README.md + Frameworks: + - PyTorch +Models: +- Name: dnl_r50-d8_4xb2-40k_cityscapes-512x1024 + In Collection: DNLNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.61 + Config: configs/dnlnet/dnl_r50-d8_4xb2-40k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - DNLNet + Training Resources: 4x V100 GPUS + Memory (GB): 7.3 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x1024_40k_cityscapes/dnl_r50-d8_512x1024_40k_cityscapes_20200904_233629-53d4ea93.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x1024_40k_cityscapes/dnl_r50-d8_512x1024_40k_cityscapes-20200904_233629.log.json + Paper: + Title: Disentangled Non-Local Neural Networks + URL: https://arxiv.org/abs/2006.06668 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/dnl_head.py#L88 + Framework: PyTorch +- Name: dnl_r101-d8_4xb2-40k_cityscapes-512x1024 + In Collection: DNLNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.31 + Config: configs/dnlnet/dnl_r101-d8_4xb2-40k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - DNLNet + Training Resources: 4x V100 GPUS + Memory (GB): 10.9 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x1024_40k_cityscapes/dnl_r101-d8_512x1024_40k_cityscapes_20200904_233629-9928ffef.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x1024_40k_cityscapes/dnl_r101-d8_512x1024_40k_cityscapes-20200904_233629.log.json + Paper: + Title: Disentangled Non-Local Neural Networks + URL: https://arxiv.org/abs/2006.06668 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/dnl_head.py#L88 + Framework: PyTorch +- Name: dnl_r50-d8_4xb2-40k_cityscapes-769x769 + In Collection: DNLNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.44 + mIoU(ms+flip): 80.27 + Config: configs/dnlnet/dnl_r50-d8_4xb2-40k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - DNLNet + Training Resources: 4x V100 GPUS + Memory (GB): 9.2 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_769x769_40k_cityscapes/dnl_r50-d8_769x769_40k_cityscapes_20200820_232206-0f283785.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_769x769_40k_cityscapes/dnl_r50-d8_769x769_40k_cityscapes-20200820_232206.log.json + Paper: + Title: Disentangled Non-Local Neural Networks + URL: https://arxiv.org/abs/2006.06668 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/dnl_head.py#L88 + Framework: PyTorch +- Name: dnl_r101-d8_4xb2-40k_cityscapes-769x769 + In Collection: DNLNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 76.39 + mIoU(ms+flip): 77.77 + Config: configs/dnlnet/dnl_r101-d8_4xb2-40k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - DNLNet + Training Resources: 4x V100 GPUS + Memory (GB): 12.6 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_769x769_40k_cityscapes/dnl_r101-d8_769x769_40k_cityscapes_20200820_171256-76c596df.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_769x769_40k_cityscapes/dnl_r101-d8_769x769_40k_cityscapes-20200820_171256.log.json + Paper: + Title: Disentangled Non-Local Neural Networks + URL: https://arxiv.org/abs/2006.06668 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/dnl_head.py#L88 + Framework: PyTorch +- Name: dnl_r50-d8_4xb2-80k_cityscapes-512x1024 + In Collection: DNLNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.33 + Config: configs/dnlnet/dnl_r50-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - DNLNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x1024_80k_cityscapes/dnl_r50-d8_512x1024_80k_cityscapes_20200904_233629-58b2f778.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x1024_80k_cityscapes/dnl_r50-d8_512x1024_80k_cityscapes-20200904_233629.log.json + Paper: + Title: Disentangled Non-Local Neural Networks + URL: https://arxiv.org/abs/2006.06668 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/dnl_head.py#L88 + Framework: PyTorch +- Name: dnl_r101-d8_4xb2-80k_cityscapes-512x1024 + In Collection: DNLNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 80.41 + Config: configs/dnlnet/dnl_r101-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - DNLNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x1024_80k_cityscapes/dnl_r101-d8_512x1024_80k_cityscapes_20200904_233629-758e2dd4.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x1024_80k_cityscapes/dnl_r101-d8_512x1024_80k_cityscapes-20200904_233629.log.json + Paper: + Title: Disentangled Non-Local Neural Networks + URL: https://arxiv.org/abs/2006.06668 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/dnl_head.py#L88 + Framework: PyTorch +- Name: dnl_r50-d8_4xb2-80k_cityscapes-769x769 + In Collection: DNLNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.36 + mIoU(ms+flip): 80.7 + Config: configs/dnlnet/dnl_r50-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - DNLNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_769x769_80k_cityscapes/dnl_r50-d8_769x769_80k_cityscapes_20200820_011925-366bc4c7.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_769x769_80k_cityscapes/dnl_r50-d8_769x769_80k_cityscapes-20200820_011925.log.json + Paper: + Title: Disentangled Non-Local Neural Networks + URL: https://arxiv.org/abs/2006.06668 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/dnl_head.py#L88 + Framework: PyTorch +- Name: dnl_r101-d8_4xb2-80k_cityscapes-769x769 + In Collection: DNLNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.41 + mIoU(ms+flip): 80.68 + Config: configs/dnlnet/dnl_r101-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - DNLNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_769x769_80k_cityscapes/dnl_r101-d8_769x769_80k_cityscapes_20200821_051111-95ff84ab.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_769x769_80k_cityscapes/dnl_r101-d8_769x769_80k_cityscapes-20200821_051111.log.json + Paper: + Title: Disentangled Non-Local Neural Networks + URL: https://arxiv.org/abs/2006.06668 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/dnl_head.py#L88 + Framework: PyTorch +- Name: dnl_r50-d8_4xb4-80k_ade20k-512x512 + In Collection: DNLNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 41.76 + mIoU(ms+flip): 42.99 + Config: configs/dnlnet/dnl_r50-d8_4xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50-D8 + - DNLNet + Training Resources: 4x V100 GPUS + Memory (GB): 8.8 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x512_80k_ade20k/dnl_r50-d8_512x512_80k_ade20k_20200826_183354-1cf6e0c1.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x512_80k_ade20k/dnl_r50-d8_512x512_80k_ade20k-20200826_183354.log.json + Paper: + Title: Disentangled Non-Local Neural Networks + URL: https://arxiv.org/abs/2006.06668 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/dnl_head.py#L88 + Framework: PyTorch +- Name: dnl_r101-d8_4xb4-80k_ade20k-512x512 + In Collection: DNLNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 43.76 + mIoU(ms+flip): 44.91 + Config: configs/dnlnet/dnl_r101-d8_4xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-101-D8 + - DNLNet + Training Resources: 4x V100 GPUS + Memory (GB): 12.8 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x512_80k_ade20k/dnl_r101-d8_512x512_80k_ade20k_20200826_183354-d820d6ea.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x512_80k_ade20k/dnl_r101-d8_512x512_80k_ade20k-20200826_183354.log.json + Paper: + Title: Disentangled Non-Local Neural Networks + URL: https://arxiv.org/abs/2006.06668 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/dnl_head.py#L88 + Framework: PyTorch +- Name: dnl_r50-d8_4xb4-160k_ade20k-512x512 + In Collection: DNLNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 41.87 + mIoU(ms+flip): 43.01 + Config: configs/dnlnet/dnl_r50-d8_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50-D8 + - DNLNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x512_160k_ade20k/dnl_r50-d8_512x512_160k_ade20k_20200826_183350-37837798.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x512_160k_ade20k/dnl_r50-d8_512x512_160k_ade20k-20200826_183350.log.json + Paper: + Title: Disentangled Non-Local Neural Networks + URL: https://arxiv.org/abs/2006.06668 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/dnl_head.py#L88 + Framework: PyTorch +- Name: dnl_r101-d8_4xb4-160k_ade20k-512x512 + In Collection: DNLNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 44.25 + mIoU(ms+flip): 45.78 + Config: configs/dnlnet/dnl_r101-d8_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-101-D8 + - DNLNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x512_160k_ade20k/dnl_r101-d8_512x512_160k_ade20k_20200826_183350-ed522c61.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x512_160k_ade20k/dnl_r101-d8_512x512_160k_ade20k-20200826_183350.log.json + Paper: + Title: Disentangled Non-Local Neural Networks + URL: https://arxiv.org/abs/2006.06668 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/dnl_head.py#L88 + Framework: PyTorch diff --git a/configs/dpt/README.md b/configs/dpt/README.md index 41d73ea57a..432d1dd226 100644 --- a/configs/dpt/README.md +++ b/configs/dpt/README.md @@ -1,6 +1,6 @@ # DPT -[Vision Transformer for Dense Prediction](https://arxiv.org/abs/2103.13413) +> [Vision Transformer for Dense Prediction](https://arxiv.org/abs/2103.13413) ## Introduction @@ -22,24 +22,6 @@ We introduce dense vision transformers, an architecture that leverages vision tr -## Citation - -```bibtex -@article{dosoViTskiy2020, - title={An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale}, - author={DosoViTskiy, Alexey and Beyer, Lucas and Kolesnikov, Alexander and Weissenborn, Dirk and Zhai, Xiaohua and Unterthiner, Thomas and Dehghani, Mostafa and Minderer, Matthias and Heigold, Georg and Gelly, Sylvain and Uszkoreit, Jakob and Houlsby, Neil}, - journal={arXiv preprint arXiv:2010.11929}, - year={2020} -} - -@article{Ranftl2021, - author = {Ren\'{e} Ranftl and Alexey Bochkovskiy and Vladlen Koltun}, - title = {Vision Transformers for Dense Prediction}, - journal = {ArXiv preprint}, - year = {2021}, -} -``` - ## Usage To use other repositories' pre-trained models, it is necessary to convert keys. @@ -62,6 +44,24 @@ This script convert model from `PRETRAIN_PATH` and store the converted model in ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| DPT | ViT-B | 512x512 | 160000 | 8.09 | 10.41 | 46.97 | 48.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dpt/dpt_vit-b16_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dpt/dpt_vit-b16_512x512_160k_ade20k/dpt_vit-b16_512x512_160k_ade20k-db31cf52.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dpt/dpt_vit-b16_512x512_160k_ade20k/dpt_vit-b16_512x512_160k_ade20k-20210809_172025.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| DPT | ViT-B | 512x512 | 160000 | 8.09 | 10.41 | V100 | 46.97 | 48.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dpt/dpt_vit-b16_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dpt/dpt_vit-b16_512x512_160k_ade20k/dpt_vit-b16_512x512_160k_ade20k-db31cf52.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dpt/dpt_vit-b16_512x512_160k_ade20k/dpt_vit-b16_512x512_160k_ade20k-20210809_172025.log.json) | + +## Citation + +```bibtex +@article{dosoViTskiy2020, + title={An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale}, + author={DosoViTskiy, Alexey and Beyer, Lucas and Kolesnikov, Alexander and Weissenborn, Dirk and Zhai, Xiaohua and Unterthiner, Thomas and Dehghani, Mostafa and Minderer, Matthias and Heigold, Georg and Gelly, Sylvain and Uszkoreit, Jakob and Houlsby, Neil}, + journal={arXiv preprint arXiv:2010.11929}, + year={2020} +} + +@article{Ranftl2021, + author = {Ren\'{e} Ranftl and Alexey Bochkovskiy and Vladlen Koltun}, + title = {Vision Transformers for Dense Prediction}, + journal = {ArXiv preprint}, + year = {2021}, +} +``` diff --git a/configs/dpt/dpt.yml b/configs/dpt/dpt.yml deleted file mode 100644 index 32324d3459..0000000000 --- a/configs/dpt/dpt.yml +++ /dev/null @@ -1,37 +0,0 @@ -Collections: -- Name: DPT - Metadata: - Training Data: - - ADE20K - Paper: - URL: https://arxiv.org/abs/2103.13413 - Title: Vision Transformer for Dense Prediction - README: configs/dpt/README.md - Code: - URL: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/dpt_head.py#L215 - Version: v0.17.0 - Converted From: - Code: https://github.com/isl-org/DPT -Models: -- Name: dpt_vit-b16_8xb2-160k_ade20k-512x512 - In Collection: DPT - Metadata: - backbone: ViT-B - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 96.06 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 8.09 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 46.97 - mIoU(ms+flip): 48.34 - Config: configs/dpt/dpt_vit-b16_8xb2-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dpt/dpt_vit-b16_512x512_160k_ade20k/dpt_vit-b16_512x512_160k_ade20k-db31cf52.pth diff --git a/configs/dpt/metafile.yaml b/configs/dpt/metafile.yaml new file mode 100644 index 0000000000..b721e041b6 --- /dev/null +++ b/configs/dpt/metafile.yaml @@ -0,0 +1,37 @@ +Collections: +- Name: DPT + License: Apache License 2.0 + Metadata: + Training Data: + - ADE20K + Paper: + Title: Vision Transformer for Dense Prediction + URL: https://arxiv.org/abs/2103.13413 + README: configs/dpt/README.md + Frameworks: + - PyTorch +Models: +- Name: dpt_vit-b16_8xb2-160k_ade20k-512x512 + In Collection: DPT + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 46.97 + mIoU(ms+flip): 48.34 + Config: configs/dpt/dpt_vit-b16_8xb2-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - ViT-B + - DPT + Training Resources: 8x V100 GPUS + Memory (GB): 8.09 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/dpt/dpt_vit-b16_512x512_160k_ade20k/dpt_vit-b16_512x512_160k_ade20k-db31cf52.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/dpt/dpt_vit-b16_512x512_160k_ade20k/dpt_vit-b16_512x512_160k_ade20k-20210809_172025.log.json + Paper: + Title: Vision Transformer for Dense Prediction + URL: https://arxiv.org/abs/2103.13413 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/dpt_head.py#L215 + Framework: PyTorch diff --git a/configs/emanet/README.md b/configs/emanet/README.md index 5a9bfc326a..8ffaf471ca 100644 --- a/configs/emanet/README.md +++ b/configs/emanet/README.md @@ -1,6 +1,6 @@ # EMANet -[Expectation-Maximization Attention Networks for Semantic Segmentation](https://arxiv.org/abs/1907.13426) +> [Expectation-Maximization Attention Networks for Semantic Segmentation](https://arxiv.org/abs/1907.13426) ## Introduction @@ -22,6 +22,17 @@ Self-attention mechanism has been widely used for various tasks. It is designed +## Results and models + +### Cityscapes + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------: | -------------- | ------ | ----: | ------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| EMANet | R-50-D8 | 512x1024 | 80000 | 5.4 | 4.58 | V100 | 77.59 | 79.44 | [config](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/emanet/eemanet_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/emanet/emanet_r50-d8_512x1024_80k_cityscapes/emanet_r50-d8_512x1024_80k_cityscapes_20200901_100301-c43fcef1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/emanet/emanet_r50-d8_512x1024_80k_cityscapes/emanet_r50-d8_512x1024_80k_cityscapes-20200901_100301.log.json) | +| EMANet | R-101-D8 | 512x1024 | 80000 | 6.2 | 2.87 | V100 | 79.10 | 81.21 | [config](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/emanet/emanet_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/emanet/emanet_r101-d8_512x1024_80k_cityscapes/emanet_r101-d8_512x1024_80k_cityscapes_20200901_100301-2d970745.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/emanet/emanet_r101-d8_512x1024_80k_cityscapes/emanet_r101-d8_512x1024_80k_cityscapes-20200901_100301.log.json) | +| EMANet | R-50-D8 | 769x769 | 80000 | 8.9 | 1.97 | V100 | 79.33 | 80.49 | [config](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/emanet/emanet_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/emanet/emanet_r50-d8_769x769_80k_cityscapes/emanet_r50-d8_769x769_80k_cityscapes_20200901_100301-16f8de52.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/emanet/emanet_r50-d8_769x769_80k_cityscapes/emanet_r50-d8_769x769_80k_cityscapes-20200901_100301.log.json) | +| EMANet | R-101-D8 | 769x769 | 80000 | 10.1 | 1.22 | V100 | 79.62 | 81.00 | [config](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/emanet/emanet_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/emanet/emanet_r101-d8_769x769_80k_cityscapes/emanet_r101-d8_769x769_80k_cityscapes_20200901_100301-47a324ce.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/emanet/emanet_r101-d8_769x769_80k_cityscapes/emanet_r101-d8_769x769_80k_cityscapes-20200901_100301.log.json) | + ## Citation ```bibtex @@ -33,14 +44,3 @@ Self-attention mechanism has been widely used for various tasks. It is designed year={2019} } ``` - -## Results and models - -### Cityscapes - -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------: | -------------- | ----: | ------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| EMANet | R-50-D8 | 512x1024 | 80000 | 5.4 | 4.58 | 77.59 | 79.44 | [config](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/emanet/eemanet_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/emanet/emanet_r50-d8_512x1024_80k_cityscapes/emanet_r50-d8_512x1024_80k_cityscapes_20200901_100301-c43fcef1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/emanet/emanet_r50-d8_512x1024_80k_cityscapes/emanet_r50-d8_512x1024_80k_cityscapes-20200901_100301.log.json) | -| EMANet | R-101-D8 | 512x1024 | 80000 | 6.2 | 2.87 | 79.10 | 81.21 | [config](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/emanet/emanet_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/emanet/emanet_r101-d8_512x1024_80k_cityscapes/emanet_r101-d8_512x1024_80k_cityscapes_20200901_100301-2d970745.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/emanet/emanet_r101-d8_512x1024_80k_cityscapes/emanet_r101-d8_512x1024_80k_cityscapes-20200901_100301.log.json) | -| EMANet | R-50-D8 | 769x769 | 80000 | 8.9 | 1.97 | 79.33 | 80.49 | [config](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/emanet/emanet_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/emanet/emanet_r50-d8_769x769_80k_cityscapes/emanet_r50-d8_769x769_80k_cityscapes_20200901_100301-16f8de52.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/emanet/emanet_r50-d8_769x769_80k_cityscapes/emanet_r50-d8_769x769_80k_cityscapes-20200901_100301.log.json) | -| EMANet | R-101-D8 | 769x769 | 80000 | 10.1 | 1.22 | 79.62 | 81.00 | [config](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/emanet/emanet_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/emanet/emanet_r101-d8_769x769_80k_cityscapes/emanet_r101-d8_769x769_80k_cityscapes_20200901_100301-47a324ce.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/emanet/emanet_r101-d8_769x769_80k_cityscapes/emanet_r101-d8_769x769_80k_cityscapes-20200901_100301.log.json) | diff --git a/configs/emanet/emanet.yml b/configs/emanet/emanet.yml deleted file mode 100644 index ac194f2a0f..0000000000 --- a/configs/emanet/emanet.yml +++ /dev/null @@ -1,103 +0,0 @@ -Collections: -- Name: EMANet - Metadata: - Training Data: - - Cityscapes - Paper: - URL: https://arxiv.org/abs/1907.13426 - Title: Expectation-Maximization Attention Networks for Semantic Segmentation - README: configs/emanet/README.md - Code: - URL: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/ema_head.py#L80 - Version: v0.17.0 - Converted From: - Code: https://xialipku.github.io/EMANet -Models: -- Name: emanet_r50-d8_4xb2-80k_cityscapes-512x1024 - In Collection: EMANet - Metadata: - backbone: R-50-D8 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 218.34 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 5.4 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 77.59 - mIoU(ms+flip): 79.44 - Config: configs/emanet/emanet_r50-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/emanet/emanet_r50-d8_512x1024_80k_cityscapes/emanet_r50-d8_512x1024_80k_cityscapes_20200901_100301-c43fcef1.pth -- Name: emanet_r101-d8_4xb2-80k_cityscapes-512x1024 - In Collection: EMANet - Metadata: - backbone: R-101-D8 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 348.43 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 6.2 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.1 - mIoU(ms+flip): 81.21 - Config: configs/emanet/emanet_r101-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/emanet/emanet_r101-d8_512x1024_80k_cityscapes/emanet_r101-d8_512x1024_80k_cityscapes_20200901_100301-2d970745.pth -- Name: emanet_r50-d8_4xb2-80k_cityscapes-769x769 - In Collection: EMANet - Metadata: - backbone: R-50-D8 - crop size: (769,769) - lr schd: 80000 - inference time (ms/im): - - value: 507.61 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 8.9 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.33 - mIoU(ms+flip): 80.49 - Config: configs/emanet/emanet_r50-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/emanet/emanet_r50-d8_769x769_80k_cityscapes/emanet_r50-d8_769x769_80k_cityscapes_20200901_100301-16f8de52.pth -- Name: emanet_r101-d8_4xb2-80k_cityscapes-769x769 - In Collection: EMANet - Metadata: - backbone: R-101-D8 - crop size: (769,769) - lr schd: 80000 - inference time (ms/im): - - value: 819.67 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 10.1 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.62 - mIoU(ms+flip): 81.0 - Config: configs/emanet/emanet_r101-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/emanet/emanet_r101-d8_769x769_80k_cityscapes/emanet_r101-d8_769x769_80k_cityscapes_20200901_100301-47a324ce.pth diff --git a/configs/emanet/metafile.yaml b/configs/emanet/metafile.yaml new file mode 100644 index 0000000000..b2a6b09ed7 --- /dev/null +++ b/configs/emanet/metafile.yaml @@ -0,0 +1,109 @@ +Collections: +- Name: EMANet + License: Apache License 2.0 + Metadata: + Training Data: + - Cityscapes + Paper: + Title: Expectation-Maximization Attention Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1907.13426 + README: configs/emanet/README.md + Frameworks: + - PyTorch +Models: +- Name: eemanet_r50-d8_4xb2-80k_cityscapes-512x1024 + In Collection: EMANet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 77.59 + mIoU(ms+flip): 79.44 + Config: configs/emanet/eemanet_r50-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - EMANet + Training Resources: 4x V100 GPUS + Memory (GB): 5.4 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/emanet/emanet_r50-d8_512x1024_80k_cityscapes/emanet_r50-d8_512x1024_80k_cityscapes_20200901_100301-c43fcef1.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/emanet/emanet_r50-d8_512x1024_80k_cityscapes/emanet_r50-d8_512x1024_80k_cityscapes-20200901_100301.log.json + Paper: + Title: Expectation-Maximization Attention Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1907.13426 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/ema_head.py#L80 + Framework: PyTorch +- Name: emanet_r101-d8_4xb2-80k_cityscapes-512x1024 + In Collection: EMANet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.1 + mIoU(ms+flip): 81.21 + Config: configs/emanet/emanet_r101-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - EMANet + Training Resources: 4x V100 GPUS + Memory (GB): 6.2 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/emanet/emanet_r101-d8_512x1024_80k_cityscapes/emanet_r101-d8_512x1024_80k_cityscapes_20200901_100301-2d970745.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/emanet/emanet_r101-d8_512x1024_80k_cityscapes/emanet_r101-d8_512x1024_80k_cityscapes-20200901_100301.log.json + Paper: + Title: Expectation-Maximization Attention Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1907.13426 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/ema_head.py#L80 + Framework: PyTorch +- Name: emanet_r50-d8_4xb2-80k_cityscapes-769x769 + In Collection: EMANet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.33 + mIoU(ms+flip): 80.49 + Config: configs/emanet/emanet_r50-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - EMANet + Training Resources: 4x V100 GPUS + Memory (GB): 8.9 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/emanet/emanet_r50-d8_769x769_80k_cityscapes/emanet_r50-d8_769x769_80k_cityscapes_20200901_100301-16f8de52.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/emanet/emanet_r50-d8_769x769_80k_cityscapes/emanet_r50-d8_769x769_80k_cityscapes-20200901_100301.log.json + Paper: + Title: Expectation-Maximization Attention Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1907.13426 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/ema_head.py#L80 + Framework: PyTorch +- Name: emanet_r101-d8_4xb2-80k_cityscapes-769x769 + In Collection: EMANet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.62 + mIoU(ms+flip): 81.0 + Config: configs/emanet/emanet_r101-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - EMANet + Training Resources: 4x V100 GPUS + Memory (GB): 10.1 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/emanet/emanet_r101-d8_769x769_80k_cityscapes/emanet_r101-d8_769x769_80k_cityscapes_20200901_100301-47a324ce.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/emanet/emanet_r101-d8_769x769_80k_cityscapes/emanet_r101-d8_769x769_80k_cityscapes-20200901_100301.log.json + Paper: + Title: Expectation-Maximization Attention Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1907.13426 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/ema_head.py#L80 + Framework: PyTorch diff --git a/configs/encnet/README.md b/configs/encnet/README.md index 7be0c6d926..31bbd98c6b 100644 --- a/configs/encnet/README.md +++ b/configs/encnet/README.md @@ -1,6 +1,6 @@ # EncNet -[Context Encoding for Semantic Segmentation](https://arxiv.org/abs/1803.08904) +> [Context Encoding for Semantic Segmentation](https://arxiv.org/abs/1803.08904) ## Introduction @@ -22,6 +22,30 @@ Recent work has made significant progress in improving spatial resolution for pi +## Results and models + +### Cityscapes + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| EncNet | R-50-D8 | 512x1024 | 40000 | 8.6 | 4.58 | V100 | 75.67 | 77.08 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet/encnet_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x1024_40k_cityscapes/encnet_r50-d8_512x1024_40k_cityscapes_20200621_220958-68638a47.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x1024_40k_cityscapes/encnet_r50-d8_512x1024_40k_cityscapes-20200621_220958.log.json) | +| EncNet | R-101-D8 | 512x1024 | 40000 | 12.1 | 2.66 | V100 | 75.81 | 77.21 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet/encnet_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x1024_40k_cityscapes/encnet_r101-d8_512x1024_40k_cityscapes_20200621_220933-35e0a3e8.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x1024_40k_cityscapes/encnet_r101-d8_512x1024_40k_cityscapes-20200621_220933.log.json) | +| EncNet | R-50-D8 | 769x769 | 40000 | 9.8 | 1.82 | V100 | 76.24 | 77.85 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet/encnet_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_769x769_40k_cityscapes/encnet_r50-d8_769x769_40k_cityscapes_20200621_220958-3bcd2884.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_769x769_40k_cityscapes/encnet_r50-d8_769x769_40k_cityscapes-20200621_220958.log.json) | +| EncNet | R-101-D8 | 769x769 | 40000 | 13.7 | 1.26 | V100 | 74.25 | 76.25 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet/encnet_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_769x769_40k_cityscapes/encnet_r101-d8_769x769_40k_cityscapes_20200621_220933-2fafed55.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_769x769_40k_cityscapes/encnet_r101-d8_769x769_40k_cityscapes-20200621_220933.log.json) | +| EncNet | R-50-D8 | 512x1024 | 80000 | - | - | V100 | 77.94 | 79.13 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet/encnet_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x1024_80k_cityscapes/encnet_r50-d8_512x1024_80k_cityscapes_20200622_003554-fc5c5624.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x1024_80k_cityscapes/encnet_r50-d8_512x1024_80k_cityscapes-20200622_003554.log.json) | +| EncNet | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 78.55 | 79.47 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet/encnet_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x1024_80k_cityscapes/encnet_r101-d8_512x1024_80k_cityscapes_20200622_003555-1de64bec.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x1024_80k_cityscapes/encnet_r101-d8_512x1024_80k_cityscapes-20200622_003555.log.json) | +| EncNet | R-50-D8 | 769x769 | 80000 | - | - | V100 | 77.44 | 78.72 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet/encnet_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_769x769_80k_cityscapes/encnet_r50-d8_769x769_80k_cityscapes_20200622_003554-55096dcb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_769x769_80k_cityscapes/encnet_r50-d8_769x769_80k_cityscapes-20200622_003554.log.json) | +| EncNet | R-101-D8 | 769x769 | 80000 | - | - | V100 | 76.10 | 76.97 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet/encnet_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_769x769_80k_cityscapes/encnet_r101-d8_769x769_80k_cityscapes_20200622_003555-470ef79d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_769x769_80k_cityscapes/encnet_r101-d8_769x769_80k_cityscapes-20200622_003555.log.json) | + +### ADE20K + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| EncNet | R-50-D8 | 512x512 | 80000 | 10.1 | 22.81 | V100 | 39.53 | 41.17 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet/encnet_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x512_80k_ade20k/encnet_r50-d8_512x512_80k_ade20k_20200622_042412-44b46b04.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x512_80k_ade20k/encnet_r50-d8_512x512_80k_ade20k-20200622_042412.log.json) | +| EncNet | R-101-D8 | 512x512 | 80000 | 13.6 | 14.87 | V100 | 42.11 | 43.61 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet/encnet_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x512_80k_ade20k/encnet_r101-d8_512x512_80k_ade20k_20200622_101128-dd35e237.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x512_80k_ade20k/encnet_r101-d8_512x512_80k_ade20k-20200622_101128.log.json) | +| EncNet | R-50-D8 | 512x512 | 160000 | - | - | V100 | 40.10 | 41.71 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet/encnet_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x512_160k_ade20k/encnet_r50-d8_512x512_160k_ade20k_20200622_101059-b2db95e0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x512_160k_ade20k/encnet_r50-d8_512x512_160k_ade20k-20200622_101059.log.json) | +| EncNet | R-101-D8 | 512x512 | 160000 | - | - | V100 | 42.61 | 44.01 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet/encnet_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x512_160k_ade20k/encnet_r101-d8_512x512_160k_ade20k_20200622_073348-7989641f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x512_160k_ade20k/encnet_r101-d8_512x512_160k_ade20k-20200622_073348.log.json) | + ## Citation ```bibtex @@ -33,27 +57,3 @@ month = {June}, year = {2018} } ``` - -## Results and models - -### Cityscapes - -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| EncNet | R-50-D8 | 512x1024 | 40000 | 8.6 | 4.58 | 75.67 | 77.08 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet/encnet_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x1024_40k_cityscapes/encnet_r50-d8_512x1024_40k_cityscapes_20200621_220958-68638a47.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x1024_40k_cityscapes/encnet_r50-d8_512x1024_40k_cityscapes-20200621_220958.log.json) | -| EncNet | R-101-D8 | 512x1024 | 40000 | 12.1 | 2.66 | 75.81 | 77.21 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet/encnet_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x1024_40k_cityscapes/encnet_r101-d8_512x1024_40k_cityscapes_20200621_220933-35e0a3e8.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x1024_40k_cityscapes/encnet_r101-d8_512x1024_40k_cityscapes-20200621_220933.log.json) | -| EncNet | R-50-D8 | 769x769 | 40000 | 9.8 | 1.82 | 76.24 | 77.85 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet/encnet_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_769x769_40k_cityscapes/encnet_r50-d8_769x769_40k_cityscapes_20200621_220958-3bcd2884.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_769x769_40k_cityscapes/encnet_r50-d8_769x769_40k_cityscapes-20200621_220958.log.json) | -| EncNet | R-101-D8 | 769x769 | 40000 | 13.7 | 1.26 | 74.25 | 76.25 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet/encnet_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_769x769_40k_cityscapes/encnet_r101-d8_769x769_40k_cityscapes_20200621_220933-2fafed55.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_769x769_40k_cityscapes/encnet_r101-d8_769x769_40k_cityscapes-20200621_220933.log.json) | -| EncNet | R-50-D8 | 512x1024 | 80000 | - | - | 77.94 | 79.13 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet/encnet_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x1024_80k_cityscapes/encnet_r50-d8_512x1024_80k_cityscapes_20200622_003554-fc5c5624.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x1024_80k_cityscapes/encnet_r50-d8_512x1024_80k_cityscapes-20200622_003554.log.json) | -| EncNet | R-101-D8 | 512x1024 | 80000 | - | - | 78.55 | 79.47 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet/encnet_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x1024_80k_cityscapes/encnet_r101-d8_512x1024_80k_cityscapes_20200622_003555-1de64bec.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x1024_80k_cityscapes/encnet_r101-d8_512x1024_80k_cityscapes-20200622_003555.log.json) | -| EncNet | R-50-D8 | 769x769 | 80000 | - | - | 77.44 | 78.72 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet/encnet_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_769x769_80k_cityscapes/encnet_r50-d8_769x769_80k_cityscapes_20200622_003554-55096dcb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_769x769_80k_cityscapes/encnet_r50-d8_769x769_80k_cityscapes-20200622_003554.log.json) | -| EncNet | R-101-D8 | 769x769 | 80000 | - | - | 76.10 | 76.97 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet/encnet_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_769x769_80k_cityscapes/encnet_r101-d8_769x769_80k_cityscapes_20200622_003555-470ef79d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_769x769_80k_cityscapes/encnet_r101-d8_769x769_80k_cityscapes-20200622_003555.log.json) | - -### ADE20K - -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| EncNet | R-50-D8 | 512x512 | 80000 | 10.1 | 22.81 | 39.53 | 41.17 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet/encnet_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x512_80k_ade20k/encnet_r50-d8_512x512_80k_ade20k_20200622_042412-44b46b04.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x512_80k_ade20k/encnet_r50-d8_512x512_80k_ade20k-20200622_042412.log.json) | -| EncNet | R-101-D8 | 512x512 | 80000 | 13.6 | 14.87 | 42.11 | 43.61 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet/encnet_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x512_80k_ade20k/encnet_r101-d8_512x512_80k_ade20k_20200622_101128-dd35e237.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x512_80k_ade20k/encnet_r101-d8_512x512_80k_ade20k-20200622_101128.log.json) | -| EncNet | R-50-D8 | 512x512 | 160000 | - | - | 40.10 | 41.71 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet/encnet_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x512_160k_ade20k/encnet_r50-d8_512x512_160k_ade20k_20200622_101059-b2db95e0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x512_160k_ade20k/encnet_r50-d8_512x512_160k_ade20k-20200622_101059.log.json) | -| EncNet | R-101-D8 | 512x512 | 160000 | - | - | 42.61 | 44.01 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet/encnet_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x512_160k_ade20k/encnet_r101-d8_512x512_160k_ade20k_20200622_073348-7989641f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x512_160k_ade20k/encnet_r101-d8_512x512_160k_ade20k-20200622_073348.log.json) | diff --git a/configs/encnet/encnet.yml b/configs/encnet/encnet.yml deleted file mode 100644 index bea147b286..0000000000 --- a/configs/encnet/encnet.yml +++ /dev/null @@ -1,232 +0,0 @@ -Collections: -- Name: EncNet - Metadata: - Training Data: - - Cityscapes - - ADE20K - Paper: - URL: https://arxiv.org/abs/1803.08904 - Title: Context Encoding for Semantic Segmentation - README: configs/encnet/README.md - Code: - URL: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/enc_head.py#L63 - Version: v0.17.0 - Converted From: - Code: https://github.com/zhanghang1989/PyTorch-Encoding -Models: -- Name: encnet_r50-d8_4xb2-40k_cityscapes-512x1024 - In Collection: EncNet - Metadata: - backbone: R-50-D8 - crop size: (512,1024) - lr schd: 40000 - inference time (ms/im): - - value: 218.34 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 8.6 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 75.67 - mIoU(ms+flip): 77.08 - Config: configs/encnet/encnet_r50-d8_4xb2-40k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x1024_40k_cityscapes/encnet_r50-d8_512x1024_40k_cityscapes_20200621_220958-68638a47.pth -- Name: encnet_r101-d8_4xb2-40k_cityscapes-512x1024 - In Collection: EncNet - Metadata: - backbone: R-101-D8 - crop size: (512,1024) - lr schd: 40000 - inference time (ms/im): - - value: 375.94 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 12.1 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 75.81 - mIoU(ms+flip): 77.21 - Config: configs/encnet/encnet_r101-d8_4xb2-40k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x1024_40k_cityscapes/encnet_r101-d8_512x1024_40k_cityscapes_20200621_220933-35e0a3e8.pth -- Name: encnet_r50-d8_4xb2-40k_cityscapes-769x769 - In Collection: EncNet - Metadata: - backbone: R-50-D8 - crop size: (769,769) - lr schd: 40000 - inference time (ms/im): - - value: 549.45 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 9.8 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 76.24 - mIoU(ms+flip): 77.85 - Config: configs/encnet/encnet_r50-d8_4xb2-40k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_769x769_40k_cityscapes/encnet_r50-d8_769x769_40k_cityscapes_20200621_220958-3bcd2884.pth -- Name: encnet_r101-d8_4xb2-40k_cityscapes-769x769 - In Collection: EncNet - Metadata: - backbone: R-101-D8 - crop size: (769,769) - lr schd: 40000 - inference time (ms/im): - - value: 793.65 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 13.7 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 74.25 - mIoU(ms+flip): 76.25 - Config: configs/encnet/encnet_r101-d8_4xb2-40k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_769x769_40k_cityscapes/encnet_r101-d8_769x769_40k_cityscapes_20200621_220933-2fafed55.pth -- Name: encnet_r50-d8_4xb2-80k_cityscapes-512x1024 - In Collection: EncNet - Metadata: - backbone: R-50-D8 - crop size: (512,1024) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 77.94 - mIoU(ms+flip): 79.13 - Config: configs/encnet/encnet_r50-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x1024_80k_cityscapes/encnet_r50-d8_512x1024_80k_cityscapes_20200622_003554-fc5c5624.pth -- Name: encnet_r101-d8_4xb2-80k_cityscapes-512x1024 - In Collection: EncNet - Metadata: - backbone: R-101-D8 - crop size: (512,1024) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.55 - mIoU(ms+flip): 79.47 - Config: configs/encnet/encnet_r101-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x1024_80k_cityscapes/encnet_r101-d8_512x1024_80k_cityscapes_20200622_003555-1de64bec.pth -- Name: encnet_r50-d8_4xb2-80k_cityscapes-769x769 - In Collection: EncNet - Metadata: - backbone: R-50-D8 - crop size: (769,769) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 77.44 - mIoU(ms+flip): 78.72 - Config: configs/encnet/encnet_r50-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_769x769_80k_cityscapes/encnet_r50-d8_769x769_80k_cityscapes_20200622_003554-55096dcb.pth -- Name: encnet_r101-d8_4xb2-80k_cityscapes-769x769 - In Collection: EncNet - Metadata: - backbone: R-101-D8 - crop size: (769,769) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 76.1 - mIoU(ms+flip): 76.97 - Config: configs/encnet/encnet_r101-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_769x769_80k_cityscapes/encnet_r101-d8_769x769_80k_cityscapes_20200622_003555-470ef79d.pth -- Name: encnet_r50-d8_4xb4-80k_ade20k-512x512 - In Collection: EncNet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 43.84 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 10.1 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 39.53 - mIoU(ms+flip): 41.17 - Config: configs/encnet/encnet_r50-d8_4xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x512_80k_ade20k/encnet_r50-d8_512x512_80k_ade20k_20200622_042412-44b46b04.pth -- Name: encnet_r101-d8_4xb4-80k_ade20k-512x512 - In Collection: EncNet - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 67.25 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 13.6 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 42.11 - mIoU(ms+flip): 43.61 - Config: configs/encnet/encnet_r101-d8_4xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x512_80k_ade20k/encnet_r101-d8_512x512_80k_ade20k_20200622_101128-dd35e237.pth -- Name: encnet_r50-d8_4xb4-160k_ade20k-512x512 - In Collection: EncNet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 40.1 - mIoU(ms+flip): 41.71 - Config: configs/encnet/encnet_r50-d8_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x512_160k_ade20k/encnet_r50-d8_512x512_160k_ade20k_20200622_101059-b2db95e0.pth -- Name: encnet_r101-d8_4xb4-160k_ade20k-512x512 - In Collection: EncNet - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 42.61 - mIoU(ms+flip): 44.01 - Config: configs/encnet/encnet_r101-d8_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x512_160k_ade20k/encnet_r101-d8_512x512_160k_ade20k_20200622_073348-7989641f.pth diff --git a/configs/encnet/metafile.yaml b/configs/encnet/metafile.yaml new file mode 100644 index 0000000000..0dbdcfaab3 --- /dev/null +++ b/configs/encnet/metafile.yaml @@ -0,0 +1,296 @@ +Collections: +- Name: EncNet + License: Apache License 2.0 + Metadata: + Training Data: + - Cityscapes + - ADE20K + Paper: + Title: Context Encoding for Semantic Segmentation + URL: https://arxiv.org/abs/1803.08904 + README: configs/encnet/README.md + Frameworks: + - PyTorch +Models: +- Name: encnet_r50-d8_4xb2-40k_cityscapes-512x1024 + In Collection: EncNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 75.67 + mIoU(ms+flip): 77.08 + Config: configs/encnet/encnet_r50-d8_4xb2-40k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - EncNet + Training Resources: 4x V100 GPUS + Memory (GB): 8.6 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x1024_40k_cityscapes/encnet_r50-d8_512x1024_40k_cityscapes_20200621_220958-68638a47.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x1024_40k_cityscapes/encnet_r50-d8_512x1024_40k_cityscapes-20200621_220958.log.json + Paper: + Title: Context Encoding for Semantic Segmentation + URL: https://arxiv.org/abs/1803.08904 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/enc_head.py#L63 + Framework: PyTorch +- Name: encnet_r101-d8_4xb2-40k_cityscapes-512x1024 + In Collection: EncNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 75.81 + mIoU(ms+flip): 77.21 + Config: configs/encnet/encnet_r101-d8_4xb2-40k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - EncNet + Training Resources: 4x V100 GPUS + Memory (GB): 12.1 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x1024_40k_cityscapes/encnet_r101-d8_512x1024_40k_cityscapes_20200621_220933-35e0a3e8.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x1024_40k_cityscapes/encnet_r101-d8_512x1024_40k_cityscapes-20200621_220933.log.json + Paper: + Title: Context Encoding for Semantic Segmentation + URL: https://arxiv.org/abs/1803.08904 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/enc_head.py#L63 + Framework: PyTorch +- Name: encnet_r50-d8_4xb2-40k_cityscapes-769x769 + In Collection: EncNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 76.24 + mIoU(ms+flip): 77.85 + Config: configs/encnet/encnet_r50-d8_4xb2-40k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - EncNet + Training Resources: 4x V100 GPUS + Memory (GB): 9.8 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_769x769_40k_cityscapes/encnet_r50-d8_769x769_40k_cityscapes_20200621_220958-3bcd2884.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_769x769_40k_cityscapes/encnet_r50-d8_769x769_40k_cityscapes-20200621_220958.log.json + Paper: + Title: Context Encoding for Semantic Segmentation + URL: https://arxiv.org/abs/1803.08904 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/enc_head.py#L63 + Framework: PyTorch +- Name: encnet_r101-d8_4xb2-40k_cityscapes-769x769 + In Collection: EncNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 74.25 + mIoU(ms+flip): 76.25 + Config: configs/encnet/encnet_r101-d8_4xb2-40k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - EncNet + Training Resources: 4x V100 GPUS + Memory (GB): 13.7 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_769x769_40k_cityscapes/encnet_r101-d8_769x769_40k_cityscapes_20200621_220933-2fafed55.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_769x769_40k_cityscapes/encnet_r101-d8_769x769_40k_cityscapes-20200621_220933.log.json + Paper: + Title: Context Encoding for Semantic Segmentation + URL: https://arxiv.org/abs/1803.08904 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/enc_head.py#L63 + Framework: PyTorch +- Name: encnet_r50-d8_4xb2-80k_cityscapes-512x1024 + In Collection: EncNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 77.94 + mIoU(ms+flip): 79.13 + Config: configs/encnet/encnet_r50-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - EncNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x1024_80k_cityscapes/encnet_r50-d8_512x1024_80k_cityscapes_20200622_003554-fc5c5624.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x1024_80k_cityscapes/encnet_r50-d8_512x1024_80k_cityscapes-20200622_003554.log.json + Paper: + Title: Context Encoding for Semantic Segmentation + URL: https://arxiv.org/abs/1803.08904 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/enc_head.py#L63 + Framework: PyTorch +- Name: encnet_r101-d8_4xb2-80k_cityscapes-512x1024 + In Collection: EncNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.55 + mIoU(ms+flip): 79.47 + Config: configs/encnet/encnet_r101-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - EncNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x1024_80k_cityscapes/encnet_r101-d8_512x1024_80k_cityscapes_20200622_003555-1de64bec.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x1024_80k_cityscapes/encnet_r101-d8_512x1024_80k_cityscapes-20200622_003555.log.json + Paper: + Title: Context Encoding for Semantic Segmentation + URL: https://arxiv.org/abs/1803.08904 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/enc_head.py#L63 + Framework: PyTorch +- Name: encnet_r50-d8_4xb2-80k_cityscapes-769x769 + In Collection: EncNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 77.44 + mIoU(ms+flip): 78.72 + Config: configs/encnet/encnet_r50-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - EncNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_769x769_80k_cityscapes/encnet_r50-d8_769x769_80k_cityscapes_20200622_003554-55096dcb.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_769x769_80k_cityscapes/encnet_r50-d8_769x769_80k_cityscapes-20200622_003554.log.json + Paper: + Title: Context Encoding for Semantic Segmentation + URL: https://arxiv.org/abs/1803.08904 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/enc_head.py#L63 + Framework: PyTorch +- Name: encnet_r101-d8_4xb2-80k_cityscapes-769x769 + In Collection: EncNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 76.1 + mIoU(ms+flip): 76.97 + Config: configs/encnet/encnet_r101-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - EncNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_769x769_80k_cityscapes/encnet_r101-d8_769x769_80k_cityscapes_20200622_003555-470ef79d.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_769x769_80k_cityscapes/encnet_r101-d8_769x769_80k_cityscapes-20200622_003555.log.json + Paper: + Title: Context Encoding for Semantic Segmentation + URL: https://arxiv.org/abs/1803.08904 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/enc_head.py#L63 + Framework: PyTorch +- Name: encnet_r50-d8_4xb4-80k_ade20k-512x512 + In Collection: EncNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 39.53 + mIoU(ms+flip): 41.17 + Config: configs/encnet/encnet_r50-d8_4xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50-D8 + - EncNet + Training Resources: 4x V100 GPUS + Memory (GB): 10.1 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x512_80k_ade20k/encnet_r50-d8_512x512_80k_ade20k_20200622_042412-44b46b04.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x512_80k_ade20k/encnet_r50-d8_512x512_80k_ade20k-20200622_042412.log.json + Paper: + Title: Context Encoding for Semantic Segmentation + URL: https://arxiv.org/abs/1803.08904 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/enc_head.py#L63 + Framework: PyTorch +- Name: encnet_r101-d8_4xb4-80k_ade20k-512x512 + In Collection: EncNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 42.11 + mIoU(ms+flip): 43.61 + Config: configs/encnet/encnet_r101-d8_4xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-101-D8 + - EncNet + Training Resources: 4x V100 GPUS + Memory (GB): 13.6 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x512_80k_ade20k/encnet_r101-d8_512x512_80k_ade20k_20200622_101128-dd35e237.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x512_80k_ade20k/encnet_r101-d8_512x512_80k_ade20k-20200622_101128.log.json + Paper: + Title: Context Encoding for Semantic Segmentation + URL: https://arxiv.org/abs/1803.08904 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/enc_head.py#L63 + Framework: PyTorch +- Name: encnet_r50-d8_4xb4-160k_ade20k-512x512 + In Collection: EncNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 40.1 + mIoU(ms+flip): 41.71 + Config: configs/encnet/encnet_r50-d8_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50-D8 + - EncNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x512_160k_ade20k/encnet_r50-d8_512x512_160k_ade20k_20200622_101059-b2db95e0.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x512_160k_ade20k/encnet_r50-d8_512x512_160k_ade20k-20200622_101059.log.json + Paper: + Title: Context Encoding for Semantic Segmentation + URL: https://arxiv.org/abs/1803.08904 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/enc_head.py#L63 + Framework: PyTorch +- Name: encnet_r101-d8_4xb4-160k_ade20k-512x512 + In Collection: EncNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 42.61 + mIoU(ms+flip): 44.01 + Config: configs/encnet/encnet_r101-d8_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-101-D8 + - EncNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x512_160k_ade20k/encnet_r101-d8_512x512_160k_ade20k_20200622_073348-7989641f.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x512_160k_ade20k/encnet_r101-d8_512x512_160k_ade20k-20200622_073348.log.json + Paper: + Title: Context Encoding for Semantic Segmentation + URL: https://arxiv.org/abs/1803.08904 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/enc_head.py#L63 + Framework: PyTorch diff --git a/configs/erfnet/README.md b/configs/erfnet/README.md index 4f7d21572a..e29afc485d 100644 --- a/configs/erfnet/README.md +++ b/configs/erfnet/README.md @@ -1,6 +1,6 @@ # ERFNet -[ERFNet: Efficient Residual Factorized ConvNet for Real-time Semantic Segmentation](http://www.robesafe.uah.es/personal/eduardo.romera/pdfs/Romera17tits.pdf) +> [ERFNet: Efficient Residual Factorized ConvNet for Real-time Semantic Segmentation](http://www.robesafe.uah.es/personal/eduardo.romera/pdfs/Romera17tits.pdf) ## Introduction @@ -22,6 +22,22 @@ Semantic segmentation is a challenging task that addresses most of the perceptio +## Results and models + +### Cityscapes + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ---: | ------------- | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| ERFNet | ERFNet | 512x1024 | 160000 | 6.04 | 15.26 | V100 | 72.5 | 74.75 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/erfnet/erfnet_fcn_4xb4-160k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/erfnet/erfnet_fcn_4x4_512x1024_160k_cityscapes/erfnet_fcn_4x4_512x1024_160k_cityscapes_20220704_162145-dc90157a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/erfnet/erfnet_fcn_4x4_512x1024_160k_cityscapes/erfnet_fcn_4x4_512x1024_160k_cityscapes_20220704_162145.log.json) | + +Note: + +- The model is trained from scratch. + +- Last deconvolution layer in the [original paper](https://github.com/Eromera/erfnet_pytorch/blob/master/train/erfnet.py#L123) is replaced by a naive `FCNHead` decoder head and a bilinear upsampling layer, found more effective and efficient. + +- This model performance is sensitive to the seed values used, please refer to the log file for the specific settings of the seed. If you choose a different seed, the results might differ from the table results. + ## Citation ```bibtex @@ -36,19 +52,3 @@ Semantic segmentation is a challenging task that addresses most of the perceptio publisher={IEEE} } ``` - -## Results and models - -### Cityscapes - -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ---: | ------------- | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| ERFNet | ERFNet | 512x1024 | 160000 | 6.04 | 15.26 | 72.5 | 74.75 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/erfnet/erfnet_fcn_4xb4-160k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/erfnet/erfnet_fcn_4x4_512x1024_160k_cityscapes/erfnet_fcn_4x4_512x1024_160k_cityscapes_20220704_162145-dc90157a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/erfnet/erfnet_fcn_4x4_512x1024_160k_cityscapes/erfnet_fcn_4x4_512x1024_160k_cityscapes_20220704_162145.log.json) | - -Note: - -- The model is trained from scratch. - -- Last deconvolution layer in the [original paper](https://github.com/Eromera/erfnet_pytorch/blob/master/train/erfnet.py#L123) is replaced by a naive `FCNHead` decoder head and a bilinear upsampling layer, found more effective and efficient. - -- This model performance is sensitive to the seed values used, please refer to the log file for the specific settings of the seed. If you choose a different seed, the results might differ from the table results. diff --git a/configs/erfnet/erfnet.yml b/configs/erfnet/erfnet.yml deleted file mode 100644 index 5f87f020cf..0000000000 --- a/configs/erfnet/erfnet.yml +++ /dev/null @@ -1,37 +0,0 @@ -Collections: -- Name: ERFNet - Metadata: - Training Data: - - Cityscapes - Paper: - URL: http://www.robesafe.uah.es/personal/eduardo.romera/pdfs/Romera17tits.pdf - Title: 'ERFNet: Efficient Residual Factorized ConvNet for Real-time Semantic Segmentation' - README: configs/erfnet/README.md - Code: - URL: https://github.com/open-mmlab/mmsegmentation/blob/v0.20.0/mmseg/models/backbones/erfnet.py#L321 - Version: v0.20.0 - Converted From: - Code: https://github.com/Eromera/erfnet_pytorch -Models: -- Name: erfnet_fcn_4xb4-160k_cityscapes-512x1024 - In Collection: ERFNet - Metadata: - backbone: ERFNet - crop size: (512,1024) - lr schd: 160000 - inference time (ms/im): - - value: 65.53 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 6.04 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 72.5 - mIoU(ms+flip): 74.75 - Config: configs/erfnet/erfnet_fcn_4xb4-160k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/erfnet/erfnet_fcn_4x4_512x1024_160k_cityscapes/erfnet_fcn_4x4_512x1024_160k_cityscapes_20220704_162145-dc90157a.pth diff --git a/configs/erfnet/metafile.yaml b/configs/erfnet/metafile.yaml new file mode 100644 index 0000000000..bf514124ee --- /dev/null +++ b/configs/erfnet/metafile.yaml @@ -0,0 +1,37 @@ +Collections: +- Name: ERFNet + License: Apache License 2.0 + Metadata: + Training Data: + - Cityscapes + Paper: + Title: 'ERFNet: Efficient Residual Factorized ConvNet for Real-time Semantic Segmentation' + URL: http://www.robesafe.uah.es/personal/eduardo.romera/pdfs/Romera17tits.pdf + README: configs/erfnet/README.md + Frameworks: + - PyTorch +Models: +- Name: erfnet_fcn_4xb4-160k_cityscapes-512x1024 + In Collection: ERFNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 72.5 + mIoU(ms+flip): 74.75 + Config: configs/erfnet/erfnet_fcn_4xb4-160k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 16 + Architecture: + - ERFNet + - ERFNet + Training Resources: 4x V100 GPUS + Memory (GB): 6.04 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/erfnet/erfnet_fcn_4x4_512x1024_160k_cityscapes/erfnet_fcn_4x4_512x1024_160k_cityscapes_20220704_162145-dc90157a.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/erfnet/erfnet_fcn_4x4_512x1024_160k_cityscapes/erfnet_fcn_4x4_512x1024_160k_cityscapes_20220704_162145.log.json + Paper: + Title: 'ERFNet: Efficient Residual Factorized ConvNet for Real-time Semantic Segmentation' + URL: http://www.robesafe.uah.es/personal/eduardo.romera/pdfs/Romera17tits.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.20.0/mmseg/models/backbones/erfnet.py#L321 + Framework: PyTorch diff --git a/configs/fastfcn/README.md b/configs/fastfcn/README.md index feedfa33a8..0b26a33edd 100644 --- a/configs/fastfcn/README.md +++ b/configs/fastfcn/README.md @@ -1,6 +1,6 @@ # FastFCN -[FastFCN: Rethinking Dilated Convolution in the Backbone for Semantic Segmentation](https://arxiv.org/abs/1903.11816) +> [FastFCN: Rethinking Dilated Convolution in the Backbone for Semantic Segmentation](https://arxiv.org/abs/1903.11816) ## Introduction @@ -22,42 +22,42 @@ Modern approaches for semantic segmentation usually employ dilated convolutions -## Citation - -```bibtex -@article{wu2019fastfcn, -title={Fastfcn: Rethinking dilated convolution in the backbone for semantic segmentation}, -author={Wu, Huikai and Zhang, Junge and Huang, Kaiqi and Liang, Kongming and Yu, Yizhou}, -journal={arXiv preprint arXiv:1903.11816}, -year={2019} -} -``` - ## Results and models ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------------------------- | -------- | --------- | ------: | -------- | -------------- | ----: | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| FastFCN + DeepLabV3 | R-50-D32 | 512x1024 | 80000 | 5.67 | 2.64 | 79.12 | 80.58 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastfcn/fastfcn_r50-d32_jpu_aspp_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_aspp_512x1024_80k_cityscapes_20210928_053722-5d1a2648.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_aspp_512x1024_80k_cityscapes_20210928_053722.log.json) | -| FastFCN + DeepLabV3 (4x4) | R-50-D32 | 512x1024 | 80000 | 9.79 | - | 79.52 | 80.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastfcn/fastfcn_r50-d32_jpu_aspp_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_4x4_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_aspp_4x4_512x1024_80k_cityscapes_20210924_214357-72220849.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_4x4_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_aspp_4x4_512x1024_80k_cityscapes_20210924_214357.log.json) | -| FastFCN + PSPNet | R-50-D32 | 512x1024 | 80000 | 5.67 | 4.40 | 79.26 | 80.86 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastfcn/fastfcn_r50-d32_jpu_psp_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_psp_512x1024_80k_cityscapes_20210928_053722-57749bed.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_psp_512x1024_80k_cityscapes_20210928_053722.log.json) | -| FastFCN + PSPNet (4x4) | R-50-D32 | 512x1024 | 80000 | 9.94 | - | 78.76 | 80.03 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastfcn/fastfcn_r50-d32_jpu_psp_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_4x4_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_psp_4x4_512x1024_80k_cityscapes_20210925_061841-77e87b0a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_4x4_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_psp_4x4_512x1024_80k_cityscapes_20210925_061841.log.json) | -| FastFCN + EncNet | R-50-D32 | 512x1024 | 80000 | 8.15 | 4.77 | 77.97 | 79.92 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastfcn/fastfcn_r50-d32_jpu_enc_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_enc_512x1024_80k_cityscapes_20210928_030036-78da5046.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_enc_512x1024_80k_cityscapes_20210928_030036.log.json) | -| FastFCN + EncNet (4x4) | R-50-D32 | 512x1024 | 80000 | 15.45 | - | 78.6 | 80.25 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastfcn/fastfcn_r50-d32_jpu_enc_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_4x4_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_enc_4x4_512x1024_80k_cityscapes_20210926_093217-e1eb6dbb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_4x4_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_enc_4x4_512x1024_80k_cityscapes_20210926_093217.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------------------- | -------------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| FastFCN + DeepLabV3 | R-50-D32 | 512x1024 | 80000 | 5.67 | 2.64 | V100 | 79.12 | 80.58 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastfcn/fastfcn_r50-d32_jpu_aspp_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_aspp_512x1024_80k_cityscapes_20210928_053722-5d1a2648.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_aspp_512x1024_80k_cityscapes_20210928_053722.log.json) | +| FastFCN + DeepLabV3 | R-50-D32 (4x4) | 512x1024 | 80000 | 9.79 | - | V100 | 79.52 | 80.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastfcn/fastfcn_r50-d32_jpu_aspp_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_4x4_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_aspp_4x4_512x1024_80k_cityscapes_20210924_214357-72220849.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_4x4_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_aspp_4x4_512x1024_80k_cityscapes_20210924_214357.log.json) | +| FastFCN + PSPNet | R-50-D32 | 512x1024 | 80000 | 5.67 | 4.40 | V100 | 79.26 | 80.86 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastfcn/fastfcn_r50-d32_jpu_psp_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_psp_512x1024_80k_cityscapes_20210928_053722-57749bed.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_psp_512x1024_80k_cityscapes_20210928_053722.log.json) | +| FastFCN + PSPNet | R-50-D32 (4x4) | 512x1024 | 80000 | 9.94 | - | V100 | 78.76 | 80.03 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastfcn/fastfcn_r50-d32_jpu_psp_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_4x4_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_psp_4x4_512x1024_80k_cityscapes_20210925_061841-77e87b0a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_4x4_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_psp_4x4_512x1024_80k_cityscapes_20210925_061841.log.json) | +| FastFCN + EncNet | R-50-D32 | 512x1024 | 80000 | 8.15 | 4.77 | V100 | 77.97 | 79.92 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastfcn/fastfcn_r50-d32_jpu_enc_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_enc_512x1024_80k_cityscapes_20210928_030036-78da5046.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_enc_512x1024_80k_cityscapes_20210928_030036.log.json) | +| FastFCN + EncNet | R-50-D32 (4x4) | 512x1024 | 80000 | 15.45 | - | V100 | 78.6 | 80.25 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastfcn/fastfcn_r50-d32_jpu_enc_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_4x4_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_enc_4x4_512x1024_80k_cityscapes_20210926_093217-e1eb6dbb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_4x4_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_enc_4x4_512x1024_80k_cityscapes_20210926_093217.log.json) | ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------------------- | -------- | --------- | ------: | -------- | -------------- | ----: | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| FastFCN + DeepLabV3 | R-50-D32 | 512x1024 | 80000 | 8.46 | 12.06 | 41.88 | 42.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastfcn/fastfcn_r50-d32_jpu_aspp_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_512x512_80k_ade20k/fastfcn_r50-d32_jpu_aspp_512x512_80k_ade20k_20211013_190619-3aa40f2d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_512x512_80k_ade20k/fastfcn_r50-d32_jpu_aspp_512x512_80k_ade20k_20211013_190619.log.json) | -| FastFCN + DeepLabV3 | R-50-D32 | 512x1024 | 160000 | - | - | 43.58 | 44.92 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastfcn/fastfcn_r50-d32_jpu_aspp_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_512x512_160k_ade20k/fastfcn_r50-d32_jpu_aspp_512x512_160k_ade20k_20211008_152246-27036aee.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_512x512_160k_ade20k/fastfcn_r50-d32_jpu_aspp_512x512_160k_ade20k_20211008_152246.log.json) | -| FastFCN + PSPNet | R-50-D32 | 512x1024 | 80000 | 8.02 | 19.21 | 41.40 | 42.12 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastfcn/fastfcn_r50-d32_jpu_psp_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_512x512_80k_ade20k/fastfcn_r50-d32_jpu_psp_512x512_80k_ade20k_20210930_225137-993d07c8.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_512x512_80k_ade20k/fastfcn_r50-d32_jpu_psp_512x512_80k_ade20k_20210930_225137.log.json) | -| FastFCN + PSPNet | R-50-D32 | 512x1024 | 160000 | - | - | 42.63 | 43.71 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastfcn/fastfcn_r50-d32_jpu_psp_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_512x512_160k_ade20k/fastfcn_r50-d32_jpu_psp_512x512_160k_ade20k_20211008_105455-e8f5a2fd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_512x512_160k_ade20k/fastfcn_r50-d32_jpu_psp_512x512_160k_ade20k_20211008_105455.log.json) | -| FastFCN + EncNet | R-50-D32 | 512x1024 | 80000 | 9.67 | 17.23 | 40.88 | 42.36 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastfcn/fastfcn_r50-d32_jpu_enc_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_512x512_80k_ade20k/fastfcn_r50-d32_jpu_enc_512x512_80k_ade20k_20210930_225214-65aef6dd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_512x512_80k_ade20k/fastfcn_r50-d32_jpu_enc_512x512_80k_ade20k_20210930_225214.log.json) | -| FastFCN + EncNet | R-50-D32 | 512x1024 | 160000 | - | - | 42.50 | 44.21 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastfcn/fastfcn_r50-d32_jpu_enc_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_512x512_160k_ade20k/fastfcn_r50-d32_jpu_enc_512x512_160k_ade20k_20211008_105456-d875ce3c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_512x512_160k_ade20k/fastfcn_r50-d32_jpu_enc_512x512_160k_ade20k_20211008_105456.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------------------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| FastFCN + DeepLabV3 | R-50-D32 | 512x1024 | 80000 | 8.46 | 12.06 | V100 | 41.88 | 42.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastfcn/fastfcn_r50-d32_jpu_aspp_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_512x512_80k_ade20k/fastfcn_r50-d32_jpu_aspp_512x512_80k_ade20k_20211013_190619-3aa40f2d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_512x512_80k_ade20k/fastfcn_r50-d32_jpu_aspp_512x512_80k_ade20k_20211013_190619.log.json) | +| FastFCN + DeepLabV3 | R-50-D32 | 512x1024 | 160000 | - | - | V100 | 43.58 | 44.92 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastfcn/fastfcn_r50-d32_jpu_aspp_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_512x512_160k_ade20k/fastfcn_r50-d32_jpu_aspp_512x512_160k_ade20k_20211008_152246-27036aee.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_512x512_160k_ade20k/fastfcn_r50-d32_jpu_aspp_512x512_160k_ade20k_20211008_152246.log.json) | +| FastFCN + PSPNet | R-50-D32 | 512x1024 | 80000 | 8.02 | 19.21 | V100 | 41.40 | 42.12 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastfcn/fastfcn_r50-d32_jpu_psp_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_512x512_80k_ade20k/fastfcn_r50-d32_jpu_psp_512x512_80k_ade20k_20210930_225137-993d07c8.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_512x512_80k_ade20k/fastfcn_r50-d32_jpu_psp_512x512_80k_ade20k_20210930_225137.log.json) | +| FastFCN + PSPNet | R-50-D32 | 512x1024 | 160000 | - | - | V100 | 42.63 | 43.71 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastfcn/fastfcn_r50-d32_jpu_psp_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_512x512_160k_ade20k/fastfcn_r50-d32_jpu_psp_512x512_160k_ade20k_20211008_105455-e8f5a2fd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_512x512_160k_ade20k/fastfcn_r50-d32_jpu_psp_512x512_160k_ade20k_20211008_105455.log.json) | +| FastFCN + EncNet | R-50-D32 | 512x1024 | 80000 | 9.67 | 17.23 | V100 | 40.88 | 42.36 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastfcn/fastfcn_r50-d32_jpu_enc_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_512x512_80k_ade20k/fastfcn_r50-d32_jpu_enc_512x512_80k_ade20k_20210930_225214-65aef6dd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_512x512_80k_ade20k/fastfcn_r50-d32_jpu_enc_512x512_80k_ade20k_20210930_225214.log.json) | +| FastFCN + EncNet | R-50-D32 | 512x1024 | 160000 | - | - | V100 | 42.50 | 44.21 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastfcn/fastfcn_r50-d32_jpu_enc_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_512x512_160k_ade20k/fastfcn_r50-d32_jpu_enc_512x512_160k_ade20k_20211008_105456-d875ce3c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_512x512_160k_ade20k/fastfcn_r50-d32_jpu_enc_512x512_160k_ade20k_20211008_105456.log.json) | Note: - `4x4` means 4 GPUs with 4 samples per GPU in training, default setting is 4 GPUs with 2 samples per GPU in training. - Results of [DeepLabV3 (mIoU: 79.32)](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3), [PSPNet (mIoU: 78.55)](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet) and [ENCNet (mIoU: 77.94)](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet) can be found in each original repository. + +## Citation + +```bibtex +@article{wu2019fastfcn, +title={Fastfcn: Rethinking dilated convolution in the backbone for semantic segmentation}, +author={Wu, Huikai and Zhang, Junge and Huang, Kaiqi and Liang, Kongming and Yu, Yizhou}, +journal={arXiv preprint arXiv:1903.11816}, +year={2019} +} +``` diff --git a/configs/fastfcn/fastfcn.yml b/configs/fastfcn/fastfcn.yml deleted file mode 100644 index 6b4d3bc121..0000000000 --- a/configs/fastfcn/fastfcn.yml +++ /dev/null @@ -1,235 +0,0 @@ -Collections: -- Name: FastFCN - Metadata: - Training Data: - - Cityscapes - - ADE20K - Paper: - URL: https://arxiv.org/abs/1903.11816 - Title: 'FastFCN: Rethinking Dilated Convolution in the Backbone for Semantic Segmentation' - README: configs/fastfcn/README.md - Code: - URL: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/necks/jpu.py#L12 - Version: v0.18.0 - Converted From: - Code: https://github.com/wuhuikai/FastFCN -Models: -- Name: fastfcn_r50-d32_jpu_aspp_4xb2-80k_cityscapes-512x1024 - In Collection: FastFCN - Metadata: - backbone: R-50-D32 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 378.79 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 5.67 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.12 - mIoU(ms+flip): 80.58 - Config: configs/fastfcn/fastfcn_r50-d32_jpu_aspp_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_aspp_512x1024_80k_cityscapes_20210928_053722-5d1a2648.pth -- Name: fastfcn_r50-d32_jpu_aspp_4xb2-80k_cityscapes-512x1024 - In Collection: FastFCN - Metadata: - backbone: R-50-D32 - crop size: (512,1024) - lr schd: 80000 - Training Memory (GB): 9.79 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.52 - mIoU(ms+flip): 80.91 - Config: configs/fastfcn/fastfcn_r50-d32_jpu_aspp_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_4x4_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_aspp_4x4_512x1024_80k_cityscapes_20210924_214357-72220849.pth -- Name: fastfcn_r50-d32_jpu_psp_4xb2-80k_cityscapes-512x1024 - In Collection: FastFCN - Metadata: - backbone: R-50-D32 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 227.27 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 5.67 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.26 - mIoU(ms+flip): 80.86 - Config: configs/fastfcn/fastfcn_r50-d32_jpu_psp_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_psp_512x1024_80k_cityscapes_20210928_053722-57749bed.pth -- Name: fastfcn_r50-d32_jpu_psp_4xb2-80k_cityscapes-512x1024 - In Collection: FastFCN - Metadata: - backbone: R-50-D32 - crop size: (512,1024) - lr schd: 80000 - Training Memory (GB): 9.94 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.76 - mIoU(ms+flip): 80.03 - Config: configs/fastfcn/fastfcn_r50-d32_jpu_psp_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_4x4_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_psp_4x4_512x1024_80k_cityscapes_20210925_061841-77e87b0a.pth -- Name: fastfcn_r50-d32_jpu_enc_4xb2-80k_cityscapes-512x1024 - In Collection: FastFCN - Metadata: - backbone: R-50-D32 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 209.64 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 8.15 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 77.97 - mIoU(ms+flip): 79.92 - Config: configs/fastfcn/fastfcn_r50-d32_jpu_enc_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_enc_512x1024_80k_cityscapes_20210928_030036-78da5046.pth -- Name: fastfcn_r50-d32_jpu_enc_4xb2-80k_cityscapes-512x1024 - In Collection: FastFCN - Metadata: - backbone: R-50-D32 - crop size: (512,1024) - lr schd: 80000 - Training Memory (GB): 15.45 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.6 - mIoU(ms+flip): 80.25 - Config: configs/fastfcn/fastfcn_r50-d32_jpu_enc_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_4x4_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_enc_4x4_512x1024_80k_cityscapes_20210926_093217-e1eb6dbb.pth -- Name: fastfcn_r50-d32_jpu_aspp_4xb4-80k_ade20k-512x512 - In Collection: FastFCN - Metadata: - backbone: R-50-D32 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 82.92 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 8.46 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 41.88 - mIoU(ms+flip): 42.91 - Config: configs/fastfcn/fastfcn_r50-d32_jpu_aspp_4xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_512x512_80k_ade20k/fastfcn_r50-d32_jpu_aspp_512x512_80k_ade20k_20211013_190619-3aa40f2d.pth -- Name: fastfcn_r50-d32_jpu_aspp_4xb4-160k_ade20k-512x512 - In Collection: FastFCN - Metadata: - backbone: R-50-D32 - crop size: (512,1024) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 43.58 - mIoU(ms+flip): 44.92 - Config: configs/fastfcn/fastfcn_r50-d32_jpu_aspp_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_512x512_160k_ade20k/fastfcn_r50-d32_jpu_aspp_512x512_160k_ade20k_20211008_152246-27036aee.pth -- Name: fastfcn_r50-d32_jpu_psp_4xb4-80k_ade20k-512x512 - In Collection: FastFCN - Metadata: - backbone: R-50-D32 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 52.06 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 8.02 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 41.4 - mIoU(ms+flip): 42.12 - Config: configs/fastfcn/fastfcn_r50-d32_jpu_psp_4xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_512x512_80k_ade20k/fastfcn_r50-d32_jpu_psp_512x512_80k_ade20k_20210930_225137-993d07c8.pth -- Name: fastfcn_r50-d32_jpu_psp_4xb4-160k_ade20k-512x512 - In Collection: FastFCN - Metadata: - backbone: R-50-D32 - crop size: (512,1024) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 42.63 - mIoU(ms+flip): 43.71 - Config: configs/fastfcn/fastfcn_r50-d32_jpu_psp_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_512x512_160k_ade20k/fastfcn_r50-d32_jpu_psp_512x512_160k_ade20k_20211008_105455-e8f5a2fd.pth -- Name: fastfcn_r50-d32_jpu_enc_4xb4-80k_ade20k-512x512 - In Collection: FastFCN - Metadata: - backbone: R-50-D32 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 58.04 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 9.67 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 40.88 - mIoU(ms+flip): 42.36 - Config: configs/fastfcn/fastfcn_r50-d32_jpu_enc_4xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_512x512_80k_ade20k/fastfcn_r50-d32_jpu_enc_512x512_80k_ade20k_20210930_225214-65aef6dd.pth -- Name: fastfcn_r50-d32_jpu_enc_4xb4-160k_ade20k-512x512 - In Collection: FastFCN - Metadata: - backbone: R-50-D32 - crop size: (512,1024) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 42.5 - mIoU(ms+flip): 44.21 - Config: configs/fastfcn/fastfcn_r50-d32_jpu_enc_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_512x512_160k_ade20k/fastfcn_r50-d32_jpu_enc_512x512_160k_ade20k_20211008_105456-d875ce3c.pth diff --git a/configs/fastfcn/metafile.yaml b/configs/fastfcn/metafile.yaml new file mode 100644 index 0000000000..f5fe03ca45 --- /dev/null +++ b/configs/fastfcn/metafile.yaml @@ -0,0 +1,311 @@ +Collections: +- Name: FastFCN + License: Apache License 2.0 + Metadata: + Training Data: + - Cityscapes + - ADE20K + Paper: + Title: 'FastFCN: Rethinking Dilated Convolution in the Backbone for Semantic Segmentation' + URL: https://arxiv.org/abs/1903.11816 + README: configs/fastfcn/README.md + Frameworks: + - PyTorch +Models: +- Name: fastfcn_r50-d32_jpu_aspp_4xb2-80k_cityscapes-512x1024 + In Collection: FastFCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.12 + mIoU(ms+flip): 80.58 + Config: configs/fastfcn/fastfcn_r50-d32_jpu_aspp_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D32 + - FastFCN + - DeepLabV3 + Training Resources: 4x V100 GPUS + Memory (GB): 5.67 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_aspp_512x1024_80k_cityscapes_20210928_053722-5d1a2648.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_aspp_512x1024_80k_cityscapes_20210928_053722.log.json + Paper: + Title: 'FastFCN: Rethinking Dilated Convolution in the Backbone for Semantic Segmentation' + URL: https://arxiv.org/abs/1903.11816 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/necks/jpu.py#L12 + Framework: PyTorch +- Name: fastfcn_r50-d32_jpu_aspp_4xb2-80k_cityscapes-512x1024 + In Collection: FastFCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.52 + mIoU(ms+flip): 80.91 + Config: configs/fastfcn/fastfcn_r50-d32_jpu_aspp_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D32 + - FastFCN + - DeepLabV3 + Training Resources: 4x V100 GPUS + Memory (GB): 9.79 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_4x4_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_aspp_4x4_512x1024_80k_cityscapes_20210924_214357-72220849.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_4x4_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_aspp_4x4_512x1024_80k_cityscapes_20210924_214357.log.json + Paper: + Title: 'FastFCN: Rethinking Dilated Convolution in the Backbone for Semantic Segmentation' + URL: https://arxiv.org/abs/1903.11816 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/necks/jpu.py#L12 + Framework: PyTorch +- Name: fastfcn_r50-d32_jpu_psp_4xb2-80k_cityscapes-512x1024 + In Collection: FastFCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.26 + mIoU(ms+flip): 80.86 + Config: configs/fastfcn/fastfcn_r50-d32_jpu_psp_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D32 + - FastFCN + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 5.67 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_psp_512x1024_80k_cityscapes_20210928_053722-57749bed.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_psp_512x1024_80k_cityscapes_20210928_053722.log.json + Paper: + Title: 'FastFCN: Rethinking Dilated Convolution in the Backbone for Semantic Segmentation' + URL: https://arxiv.org/abs/1903.11816 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/necks/jpu.py#L12 + Framework: PyTorch +- Name: fastfcn_r50-d32_jpu_psp_4xb2-80k_cityscapes-512x1024 + In Collection: FastFCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.76 + mIoU(ms+flip): 80.03 + Config: configs/fastfcn/fastfcn_r50-d32_jpu_psp_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D32 + - FastFCN + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 9.94 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_4x4_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_psp_4x4_512x1024_80k_cityscapes_20210925_061841-77e87b0a.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_4x4_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_psp_4x4_512x1024_80k_cityscapes_20210925_061841.log.json + Paper: + Title: 'FastFCN: Rethinking Dilated Convolution in the Backbone for Semantic Segmentation' + URL: https://arxiv.org/abs/1903.11816 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/necks/jpu.py#L12 + Framework: PyTorch +- Name: fastfcn_r50-d32_jpu_enc_4xb2-80k_cityscapes-512x1024 + In Collection: FastFCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 77.97 + mIoU(ms+flip): 79.92 + Config: configs/fastfcn/fastfcn_r50-d32_jpu_enc_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D32 + - FastFCN + - EncNet + Training Resources: 4x V100 GPUS + Memory (GB): 8.15 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_enc_512x1024_80k_cityscapes_20210928_030036-78da5046.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_enc_512x1024_80k_cityscapes_20210928_030036.log.json + Paper: + Title: 'FastFCN: Rethinking Dilated Convolution in the Backbone for Semantic Segmentation' + URL: https://arxiv.org/abs/1903.11816 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/necks/jpu.py#L12 + Framework: PyTorch +- Name: fastfcn_r50-d32_jpu_enc_4xb2-80k_cityscapes-512x1024 + In Collection: FastFCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.6 + mIoU(ms+flip): 80.25 + Config: configs/fastfcn/fastfcn_r50-d32_jpu_enc_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D32 + - FastFCN + - EncNet + Training Resources: 4x V100 GPUS + Memory (GB): 15.45 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_4x4_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_enc_4x4_512x1024_80k_cityscapes_20210926_093217-e1eb6dbb.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_4x4_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_enc_4x4_512x1024_80k_cityscapes_20210926_093217.log.json + Paper: + Title: 'FastFCN: Rethinking Dilated Convolution in the Backbone for Semantic Segmentation' + URL: https://arxiv.org/abs/1903.11816 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/necks/jpu.py#L12 + Framework: PyTorch +- Name: fastfcn_r50-d32_jpu_aspp_4xb4-80k_ade20k-512x512 + In Collection: FastFCN + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 41.88 + mIoU(ms+flip): 42.91 + Config: configs/fastfcn/fastfcn_r50-d32_jpu_aspp_4xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50-D32 + - FastFCN + - DeepLabV3 + Training Resources: 4x V100 GPUS + Memory (GB): 8.46 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_512x512_80k_ade20k/fastfcn_r50-d32_jpu_aspp_512x512_80k_ade20k_20211013_190619-3aa40f2d.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_512x512_80k_ade20k/fastfcn_r50-d32_jpu_aspp_512x512_80k_ade20k_20211013_190619.log.json + Paper: + Title: 'FastFCN: Rethinking Dilated Convolution in the Backbone for Semantic Segmentation' + URL: https://arxiv.org/abs/1903.11816 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/necks/jpu.py#L12 + Framework: PyTorch +- Name: fastfcn_r50-d32_jpu_aspp_4xb4-160k_ade20k-512x512 + In Collection: FastFCN + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 43.58 + mIoU(ms+flip): 44.92 + Config: configs/fastfcn/fastfcn_r50-d32_jpu_aspp_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50-D32 + - FastFCN + - DeepLabV3 + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_512x512_160k_ade20k/fastfcn_r50-d32_jpu_aspp_512x512_160k_ade20k_20211008_152246-27036aee.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_512x512_160k_ade20k/fastfcn_r50-d32_jpu_aspp_512x512_160k_ade20k_20211008_152246.log.json + Paper: + Title: 'FastFCN: Rethinking Dilated Convolution in the Backbone for Semantic Segmentation' + URL: https://arxiv.org/abs/1903.11816 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/necks/jpu.py#L12 + Framework: PyTorch +- Name: fastfcn_r50-d32_jpu_psp_4xb4-80k_ade20k-512x512 + In Collection: FastFCN + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 41.4 + mIoU(ms+flip): 42.12 + Config: configs/fastfcn/fastfcn_r50-d32_jpu_psp_4xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50-D32 + - FastFCN + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 8.02 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_512x512_80k_ade20k/fastfcn_r50-d32_jpu_psp_512x512_80k_ade20k_20210930_225137-993d07c8.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_512x512_80k_ade20k/fastfcn_r50-d32_jpu_psp_512x512_80k_ade20k_20210930_225137.log.json + Paper: + Title: 'FastFCN: Rethinking Dilated Convolution in the Backbone for Semantic Segmentation' + URL: https://arxiv.org/abs/1903.11816 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/necks/jpu.py#L12 + Framework: PyTorch +- Name: fastfcn_r50-d32_jpu_psp_4xb4-160k_ade20k-512x512 + In Collection: FastFCN + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 42.63 + mIoU(ms+flip): 43.71 + Config: configs/fastfcn/fastfcn_r50-d32_jpu_psp_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50-D32 + - FastFCN + - PSPNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_512x512_160k_ade20k/fastfcn_r50-d32_jpu_psp_512x512_160k_ade20k_20211008_105455-e8f5a2fd.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_512x512_160k_ade20k/fastfcn_r50-d32_jpu_psp_512x512_160k_ade20k_20211008_105455.log.json + Paper: + Title: 'FastFCN: Rethinking Dilated Convolution in the Backbone for Semantic Segmentation' + URL: https://arxiv.org/abs/1903.11816 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/necks/jpu.py#L12 + Framework: PyTorch +- Name: fastfcn_r50-d32_jpu_enc_4xb4-80k_ade20k-512x512 + In Collection: FastFCN + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 40.88 + mIoU(ms+flip): 42.36 + Config: configs/fastfcn/fastfcn_r50-d32_jpu_enc_4xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50-D32 + - FastFCN + - EncNet + Training Resources: 4x V100 GPUS + Memory (GB): 9.67 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_512x512_80k_ade20k/fastfcn_r50-d32_jpu_enc_512x512_80k_ade20k_20210930_225214-65aef6dd.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_512x512_80k_ade20k/fastfcn_r50-d32_jpu_enc_512x512_80k_ade20k_20210930_225214.log.json + Paper: + Title: 'FastFCN: Rethinking Dilated Convolution in the Backbone for Semantic Segmentation' + URL: https://arxiv.org/abs/1903.11816 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/necks/jpu.py#L12 + Framework: PyTorch +- Name: fastfcn_r50-d32_jpu_enc_4xb4-160k_ade20k-512x512 + In Collection: FastFCN + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 42.5 + mIoU(ms+flip): 44.21 + Config: configs/fastfcn/fastfcn_r50-d32_jpu_enc_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50-D32 + - FastFCN + - EncNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_512x512_160k_ade20k/fastfcn_r50-d32_jpu_enc_512x512_160k_ade20k_20211008_105456-d875ce3c.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_512x512_160k_ade20k/fastfcn_r50-d32_jpu_enc_512x512_160k_ade20k_20211008_105456.log.json + Paper: + Title: 'FastFCN: Rethinking Dilated Convolution in the Backbone for Semantic Segmentation' + URL: https://arxiv.org/abs/1903.11816 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/necks/jpu.py#L12 + Framework: PyTorch diff --git a/configs/fastscnn/README.md b/configs/fastscnn/README.md index 3e06903ae5..ea3449fd2c 100644 --- a/configs/fastscnn/README.md +++ b/configs/fastscnn/README.md @@ -1,6 +1,6 @@ # Fast-SCNN -[Fast-SCNN for Semantic Segmentation](https://arxiv.org/abs/1902.04502) +> [Fast-SCNN for Semantic Segmentation](https://arxiv.org/abs/1902.04502) ## Introduction @@ -22,6 +22,14 @@ The encoder-decoder framework is state-of-the-art for offline semantic image seg +## Results and models + +### Cityscapes + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| -------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| FastSCNN | FastSCNN | 512x1024 | 160000 | 3.3 | 56.45 | V100 | 70.96 | 72.65 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastscnn/fast_scnn_8xb4-160k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fast_scnn/fast_scnn_lr0.12_8x4_160k_cityscapes/fast_scnn_lr0.12_8x4_160k_cityscapes_20210630_164853-0cec9937.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fast_scnn/fast_scnn_lr0.12_8x4_160k_cityscapes/fast_scnn_lr0.12_8x4_160k_cityscapes_20210630_164853.log.json) | + ## Citation ```bibtex @@ -32,11 +40,3 @@ The encoder-decoder framework is state-of-the-art for offline semantic image seg year={2019} } ``` - -## Results and models - -### Cityscapes - -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| -------- | -------- | --------- | ------: | -------- | -------------- | ----: | ------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| FastSCNN | FastSCNN | 512x1024 | 160000 | 3.3 | 56.45 | 70.96 | 72.65 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastscnn/fast_scnn_8xb4-160k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fast_scnn/fast_scnn_lr0.12_8x4_160k_cityscapes/fast_scnn_lr0.12_8x4_160k_cityscapes_20210630_164853-0cec9937.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fast_scnn/fast_scnn_lr0.12_8x4_160k_cityscapes/fast_scnn_lr0.12_8x4_160k_cityscapes_20210630_164853.log.json) | diff --git a/configs/fastscnn/fastscnn.yml b/configs/fastscnn/metafile.yaml similarity index 50% rename from configs/fastscnn/fastscnn.yml rename to configs/fastscnn/metafile.yaml index 13215c2fb1..9e33c902db 100644 --- a/configs/fastscnn/fastscnn.yml +++ b/configs/fastscnn/metafile.yaml @@ -1,35 +1,37 @@ Collections: - Name: FastSCNN + License: Apache License 2.0 Metadata: Training Data: - Cityscapes Paper: - URL: https://arxiv.org/abs/1902.04502 Title: Fast-SCNN for Semantic Segmentation + URL: https://arxiv.org/abs/1902.04502 README: configs/fastscnn/README.md - Code: - URL: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/fast_scnn.py#L272 - Version: v0.17.0 + Frameworks: + - PyTorch Models: - Name: fast_scnn_8xb4-160k_cityscapes-512x1024 In Collection: FastSCNN - Metadata: - backbone: FastSCNN - crop size: (512,1024) - lr schd: 160000 - inference time (ms/im): - - value: 17.71 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 3.3 Results: - - Task: Semantic Segmentation + Task: Semantic Segmentation Dataset: Cityscapes Metrics: mIoU: 70.96 mIoU(ms+flip): 72.65 Config: configs/fastscnn/fast_scnn_8xb4-160k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 32 + Architecture: + - FastSCNN + - FastSCNN + Training Resources: 8x V100 GPUS + Memory (GB): 3.3 Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fast_scnn/fast_scnn_lr0.12_8x4_160k_cityscapes/fast_scnn_lr0.12_8x4_160k_cityscapes_20210630_164853-0cec9937.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fast_scnn/fast_scnn_lr0.12_8x4_160k_cityscapes/fast_scnn_lr0.12_8x4_160k_cityscapes_20210630_164853.log.json + Paper: + Title: Fast-SCNN for Semantic Segmentation + URL: https://arxiv.org/abs/1902.04502 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/fast_scnn.py#L272 + Framework: PyTorch diff --git a/configs/fcn/README.md b/configs/fcn/README.md index 4b887f19e4..6134933710 100644 --- a/configs/fcn/README.md +++ b/configs/fcn/README.md @@ -1,6 +1,6 @@ # FCN -[Fully Convolutional Networks for Semantic Segmentation](https://arxiv.org/abs/1411.4038) +> [Fully Convolutional Networks for Semantic Segmentation](https://arxiv.org/abs/1411.4038) ## Introduction @@ -22,90 +22,90 @@ Convolutional networks are powerful visual models that yield hierarchies of feat -## Citation - -```bibtex -@article{shelhamer2017fully, - title={Fully convolutional networks for semantic segmentation}, - author={Shelhamer, Evan and Long, Jonathan and Darrell, Trevor}, - journal={IEEE transactions on pattern analysis and machine intelligence}, - volume={39}, - number={4}, - pages={640--651}, - year={2017}, - publisher={IEEE Trans Pattern Anal Mach Intell} -} -``` - ## Results and models ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ---------- | ---------- | --------- | ------: | -------- | -------------- | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| FCN | R-50-D8 | 512x1024 | 40000 | 5.7 | 4.17 | 72.25 | 73.36 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x1024_40k_cityscapes/fcn_r50-d8_512x1024_40k_cityscapes_20200604_192608-efe53f0d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x1024_40k_cityscapes/fcn_r50-d8_512x1024_40k_cityscapes_20200604_192608.log.json) | -| FCN | R-101-D8 | 512x1024 | 40000 | 9.2 | 2.66 | 75.45 | 76.58 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x1024_40k_cityscapes/fcn_r101-d8_512x1024_40k_cityscapes_20200604_181852-a883d3a1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x1024_40k_cityscapes/fcn_r101-d8_512x1024_40k_cityscapes_20200604_181852.log.json) | -| FCN | R-50-D8 | 769x769 | 40000 | 6.5 | 1.80 | 71.47 | 72.54 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_769x769_40k_cityscapes/fcn_r50-d8_769x769_40k_cityscapes_20200606_113104-977b5d02.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_769x769_40k_cityscapes/fcn_r50-d8_769x769_40k_cityscapes_20200606_113104.log.json) | -| FCN | R-101-D8 | 769x769 | 40000 | 10.4 | 1.19 | 73.93 | 75.14 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_769x769_40k_cityscapes/fcn_r101-d8_769x769_40k_cityscapes_20200606_113208-7d4ab69c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_769x769_40k_cityscapes/fcn_r101-d8_769x769_40k_cityscapes_20200606_113208.log.json) | -| FCN | R-18-D8 | 512x1024 | 80000 | 1.7 | 14.65 | 71.11 | 72.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r18-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18-d8_512x1024_80k_cityscapes/fcn_r18-d8_512x1024_80k_cityscapes_20201225_021327-6c50f8b4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18-d8_512x1024_80k_cityscapes/fcn_r18-d8_512x1024_80k_cityscapes-20201225_021327.log.json) | -| FCN | R-50-D8 | 512x1024 | 80000 | - | | 73.61 | 74.24 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x1024_80k_cityscapes/fcn_r50-d8_512x1024_80k_cityscapes_20200606_113019-03aa804d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x1024_80k_cityscapes/fcn_r50-d8_512x1024_80k_cityscapes_20200606_113019.log.json) | -| FCN | R-101-D8 | 512x1024 | 80000 | - | - | 75.13 | 75.94 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x1024_80k_cityscapes/fcn_r101-d8_512x1024_80k_cityscapes_20200606_113038-3fb937eb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x1024_80k_cityscapes/fcn_r101-d8_512x1024_80k_cityscapes_20200606_113038.log.json) | -| FCN (FP16) | R-101-D8 | 512x1024 | 80000 | 5.37 | 8.64 | 76.80 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb2-amp-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_fp16_512x1024_80k_cityscapes/fcn_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230921-fb13e883.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_fp16_512x1024_80k_cityscapes/fcn_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230921.log.json) | -| FCN | R-18-D8 | 769x769 | 80000 | 1.9 | 6.40 | 70.80 | 73.16 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r18-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18-d8_769x769_80k_cityscapes/fcn_r18-d8_769x769_80k_cityscapes_20201225_021451-9739d1b8.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18-d8_769x769_80k_cityscapes/fcn_r18-d8_769x769_80k_cityscapes-20201225_021451.log.json) | -| FCN | R-50-D8 | 769x769 | 80000 | - | - | 72.64 | 73.32 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_769x769_80k_cityscapes/fcn_r50-d8_769x769_80k_cityscapes_20200606_195749-f5caeabc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_769x769_80k_cityscapes/fcn_r50-d8_769x769_80k_cityscapes_20200606_195749.log.json) | -| FCN | R-101-D8 | 769x769 | 80000 | - | - | 75.52 | 76.61 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_769x769_80k_cityscapes/fcn_r101-d8_769x769_80k_cityscapes_20200606_214354-45cbac68.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_769x769_80k_cityscapes/fcn_r101-d8_769x769_80k_cityscapes_20200606_214354.log.json) | -| FCN | R-18b-D8 | 512x1024 | 80000 | 1.6 | 16.74 | 70.24 | 72.77 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r18b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18b-d8_512x1024_80k_cityscapes/fcn_r18b-d8_512x1024_80k_cityscapes_20201225_230143-92c0f445.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18b-d8_512x1024_80k_cityscapes/fcn_r18b-d8_512x1024_80k_cityscapes-20201225_230143.log.json) | -| FCN | R-50b-D8 | 512x1024 | 80000 | 5.6 | 4.20 | 75.65 | 77.59 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r50b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50b-d8_512x1024_80k_cityscapes/fcn_r50b-d8_512x1024_80k_cityscapes_20201225_094221-82957416.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50b-d8_512x1024_80k_cityscapes/fcn_r50b-d8_512x1024_80k_cityscapes-20201225_094221.log.json) | -| FCN | R-101b-D8 | 512x1024 | 80000 | 9.1 | 2.73 | 77.37 | 78.77 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101b-d8_512x1024_80k_cityscapes/fcn_r101b-d8_512x1024_80k_cityscapes_20201226_160213-4543858f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101b-d8_512x1024_80k_cityscapes/fcn_r101b-d8_512x1024_80k_cityscapes-20201226_160213.log.json) | -| FCN | R-18b-D8 | 769x769 | 80000 | 1.7 | 6.70 | 69.66 | 72.07 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r18b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18b-d8_769x769_80k_cityscapes/fcn_r18b-d8_769x769_80k_cityscapes_20201226_004430-32d504e5.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18b-d8_769x769_80k_cityscapes/fcn_r18b-d8_769x769_80k_cityscapes-20201226_004430.log.json) | -| FCN | R-50b-D8 | 769x769 | 80000 | 6.3 | 1.82 | 73.83 | 76.60 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r50b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50b-d8_769x769_80k_cityscapes/fcn_r50b-d8_769x769_80k_cityscapes_20201225_094223-94552d38.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50b-d8_769x769_80k_cityscapes/fcn_r50b-d8_769x769_80k_cityscapes-20201225_094223.log.json) | -| FCN | R-101b-D8 | 769x769 | 80000 | 10.3 | 1.15 | 77.02 | 78.67 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101b-d8_769x769_80k_cityscapes/fcn_r101b-d8_769x769_80k_cityscapes_20201226_170012-82be37e2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101b-d8_769x769_80k_cityscapes/fcn_r101b-d8_769x769_80k_cityscapes-20201226_170012.log.json) | -| FCN (D6) | R-50-D16 | 512x1024 | 40000 | 3.4 | 10.22 | 77.06 | 78.85 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn-d6_r50-d16_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_512x1024_40k_cityscapes/fcn_d6_r50-d16_512x1024_40k_cityscapes_20210305_130133-98d5d1bc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_512x1024_40k_cityscapes/fcn_d6_r50-d16_512x1024_40k_cityscapes-20210305_130133.log.json) | -| FCN (D6) | R-50-D16 | 512x1024 | 80000 | - | 10.35 | 77.27 | 78.88 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn-d6_r50-d16_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_512x1024_80k_cityscapes/fcn_d6_r50-d16_512x1024_80k_cityscapes_20210306_115604-133c292f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_512x1024_80k_cityscapes/fcn_d6_r50-d16_512x1024_80k_cityscapes-20210306_115604.log.json) | -| FCN (D6) | R-50-D16 | 769x769 | 40000 | 3.7 | 4.17 | 76.82 | 78.22 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn-d6_r50-d16_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_769x769_40k_cityscapes/fcn_d6_r50-d16_769x769_40k_cityscapes_20210305_185744-1aab18ed.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_769x769_40k_cityscapes/fcn_d6_r50-d16_769x769_40k_cityscapes-20210305_185744.log.json) | -| FCN (D6) | R-50-D16 | 769x769 | 80000 | - | 4.15 | 77.04 | 78.40 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn-d6_r50-d16_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_769x769_80k_cityscapes/fcn_d6_r50-d16_769x769_80k_cityscapes_20210305_200413-109d88eb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_769x769_80k_cityscapes/fcn_d6_r50-d16_769x769_80k_cityscapes-20210305_200413.log.json) | -| FCN (D6) | R-101-D16 | 512x1024 | 40000 | 4.5 | 8.04 | 77.36 | 79.18 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn-d6_r101-d16_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_512x1024_40k_cityscapes/fcn_d6_r101-d16_512x1024_40k_cityscapes_20210305_130337-9cf2b450.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_512x1024_40k_cityscapes/fcn_d6_r101-d16_512x1024_40k_cityscapes-20210305_130337.log.json) | -| FCN (D6) | R-101-D16 | 512x1024 | 80000 | - | 8.26 | 78.46 | 80.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn-d6_r101-d16_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_512x1024_80k_cityscapes/fcn_d6_r101-d16_512x1024_80k_cityscapes_20210308_102747-cb336445.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_512x1024_80k_cityscapes/fcn_d6_r101-d16_512x1024_80k_cityscapes-20210308_102747.log.json) | -| FCN (D6) | R-101-D16 | 769x769 | 40000 | 5.0 | 3.12 | 77.28 | 78.95 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn-d6_r101-d16_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_769x769_40k_cityscapes/fcn_d6_r101-d16_769x769_40k_cityscapes_20210308_102453-60b114e9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_769x769_40k_cityscapes/fcn_d6_r101-d16_769x769_40k_cityscapes-20210308_102453.log.json) | -| FCN (D6) | R-101-D16 | 769x769 | 80000 | - | 3.21 | 78.06 | 79.58 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn-d6_r101-d16_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_769x769_80k_cityscapes/fcn_d6_r101-d16_769x769_80k_cityscapes_20210306_120016-e33adc4f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_769x769_80k_cityscapes/fcn_d6_r101-d16_769x769_80k_cityscapes-20210306_120016.log.json) | -| FCN (D6) | R-50b-D16 | 512x1024 | 80000 | 3.2 | 10.16 | 76.99 | 79.03 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn-d6_r50b-d16_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50b-d16_512x1024_80k_cityscapes/fcn_d6_r50b-d16_512x1024_80k_cityscapes_20210311_125550-6a0b62e9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50b_d16_512x1024_80k_cityscapes/fcn_d6_r50b_d16_512x1024_80k_cityscapes-20210311_125550.log.json) | -| FCN (D6) | R-50b-D16 | 769x769 | 80000 | 3.6 | 4.17 | 76.86 | 78.52 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn-d6_r50b-d16_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50b-d16_769x769_80k_cityscapes/fcn_d6_r50b-d16_769x769_80k_cityscapes_20210311_131012-d665f231.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50b_d16_769x769_80k_cityscapes/fcn_d6_r50b_d16_769x769_80k_cityscapes-20210311_131012.log.json) | -| FCN (D6) | R-101b-D16 | 512x1024 | 80000 | 4.3 | 8.46 | 77.72 | 79.53 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn-d6_r101b-d16_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101b-d16_512x1024_80k_cityscapes/fcn_d6_r101b-d16_512x1024_80k_cityscapes_20210311_144305-3f2eb5b4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101b_d16_512x1024_80k_cityscapes/fcn_d6_r101b_d16_512x1024_80k_cityscapes-20210311_144305.log.json) | -| FCN (D6) | R-101b-D16 | 769x769 | 80000 | 4.8 | 3.32 | 77.34 | 78.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn-d6_r101b-d16_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101b-d16_769x769_80k_cityscapes/fcn_d6_r101b-d16_769x769_80k_cityscapes_20210311_154527-c4d8bfbc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101b_d16_769x769_80k_cityscapes/fcn_d6_r101b_d16_769x769_80k_cityscapes-20210311_154527.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------- | ---------- | --------- | ------: | -------- | -------------- | -------- | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| FCN | R-50-D8 | 512x1024 | 40000 | 5.7 | 4.17 | V100 | 72.25 | 73.36 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x1024_40k_cityscapes/fcn_r50-d8_512x1024_40k_cityscapes_20200604_192608-efe53f0d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x1024_40k_cityscapes/fcn_r50-d8_512x1024_40k_cityscapes_20200604_192608.log.json) | +| FCN | R-101-D8 | 512x1024 | 40000 | 9.2 | 2.66 | V100 | 75.45 | 76.58 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x1024_40k_cityscapes/fcn_r101-d8_512x1024_40k_cityscapes_20200604_181852-a883d3a1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x1024_40k_cityscapes/fcn_r101-d8_512x1024_40k_cityscapes_20200604_181852.log.json) | +| FCN | R-50-D8 | 769x769 | 40000 | 6.5 | 1.80 | V100 | 71.47 | 72.54 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_769x769_40k_cityscapes/fcn_r50-d8_769x769_40k_cityscapes_20200606_113104-977b5d02.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_769x769_40k_cityscapes/fcn_r50-d8_769x769_40k_cityscapes_20200606_113104.log.json) | +| FCN | R-101-D8 | 769x769 | 40000 | 10.4 | 1.19 | V100 | 73.93 | 75.14 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_769x769_40k_cityscapes/fcn_r101-d8_769x769_40k_cityscapes_20200606_113208-7d4ab69c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_769x769_40k_cityscapes/fcn_r101-d8_769x769_40k_cityscapes_20200606_113208.log.json) | +| FCN | R-18-D8 | 512x1024 | 80000 | 1.7 | 14.65 | V100 | 71.11 | 72.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r18-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18-d8_512x1024_80k_cityscapes/fcn_r18-d8_512x1024_80k_cityscapes_20201225_021327-6c50f8b4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18-d8_512x1024_80k_cityscapes/fcn_r18-d8_512x1024_80k_cityscapes-20201225_021327.log.json) | +| FCN | R-50-D8 | 512x1024 | 80000 | - | | V100 | 73.61 | 74.24 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x1024_80k_cityscapes/fcn_r50-d8_512x1024_80k_cityscapes_20200606_113019-03aa804d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x1024_80k_cityscapes/fcn_r50-d8_512x1024_80k_cityscapes_20200606_113019.log.json) | +| FCN | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 75.13 | 75.94 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x1024_80k_cityscapes/fcn_r101-d8_512x1024_80k_cityscapes_20200606_113038-3fb937eb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x1024_80k_cityscapes/fcn_r101-d8_512x1024_80k_cityscapes_20200606_113038.log.json) | +| FCN (FP16) | R-101-D8 | 512x1024 | 80000 | 5.37 | 8.64 | V100 | 76.80 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb2-amp-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_fp16_512x1024_80k_cityscapes/fcn_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230921-fb13e883.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_fp16_512x1024_80k_cityscapes/fcn_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230921.log.json) | +| FCN | R-18-D8 | 769x769 | 80000 | 1.9 | 6.40 | V100 | 70.80 | 73.16 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r18-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18-d8_769x769_80k_cityscapes/fcn_r18-d8_769x769_80k_cityscapes_20201225_021451-9739d1b8.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18-d8_769x769_80k_cityscapes/fcn_r18-d8_769x769_80k_cityscapes-20201225_021451.log.json) | +| FCN | R-50-D8 | 769x769 | 80000 | - | - | V100 | 72.64 | 73.32 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_769x769_80k_cityscapes/fcn_r50-d8_769x769_80k_cityscapes_20200606_195749-f5caeabc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_769x769_80k_cityscapes/fcn_r50-d8_769x769_80k_cityscapes_20200606_195749.log.json) | +| FCN | R-101-D8 | 769x769 | 80000 | - | - | V100 | 75.52 | 76.61 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_769x769_80k_cityscapes/fcn_r101-d8_769x769_80k_cityscapes_20200606_214354-45cbac68.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_769x769_80k_cityscapes/fcn_r101-d8_769x769_80k_cityscapes_20200606_214354.log.json) | +| FCN | R-18b-D8 | 512x1024 | 80000 | 1.6 | 16.74 | V100 | 70.24 | 72.77 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r18b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18b-d8_512x1024_80k_cityscapes/fcn_r18b-d8_512x1024_80k_cityscapes_20201225_230143-92c0f445.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18b-d8_512x1024_80k_cityscapes/fcn_r18b-d8_512x1024_80k_cityscapes-20201225_230143.log.json) | +| FCN | R-50b-D8 | 512x1024 | 80000 | 5.6 | 4.20 | V100 | 75.65 | 77.59 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r50b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50b-d8_512x1024_80k_cityscapes/fcn_r50b-d8_512x1024_80k_cityscapes_20201225_094221-82957416.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50b-d8_512x1024_80k_cityscapes/fcn_r50b-d8_512x1024_80k_cityscapes-20201225_094221.log.json) | +| FCN | R-101b-D8 | 512x1024 | 80000 | 9.1 | 2.73 | V100 | 77.37 | 78.77 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101b-d8_512x1024_80k_cityscapes/fcn_r101b-d8_512x1024_80k_cityscapes_20201226_160213-4543858f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101b-d8_512x1024_80k_cityscapes/fcn_r101b-d8_512x1024_80k_cityscapes-20201226_160213.log.json) | +| FCN | R-18b-D8 | 769x769 | 80000 | 1.7 | 6.70 | V100 | 69.66 | 72.07 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r18b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18b-d8_769x769_80k_cityscapes/fcn_r18b-d8_769x769_80k_cityscapes_20201226_004430-32d504e5.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18b-d8_769x769_80k_cityscapes/fcn_r18b-d8_769x769_80k_cityscapes-20201226_004430.log.json) | +| FCN | R-50b-D8 | 769x769 | 80000 | 6.3 | 1.82 | V100 | 73.83 | 76.60 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r50b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50b-d8_769x769_80k_cityscapes/fcn_r50b-d8_769x769_80k_cityscapes_20201225_094223-94552d38.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50b-d8_769x769_80k_cityscapes/fcn_r50b-d8_769x769_80k_cityscapes-20201225_094223.log.json) | +| FCN | R-101b-D8 | 769x769 | 80000 | 10.3 | 1.15 | V100 | 77.02 | 78.67 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101b-d8_769x769_80k_cityscapes/fcn_r101b-d8_769x769_80k_cityscapes_20201226_170012-82be37e2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101b-d8_769x769_80k_cityscapes/fcn_r101b-d8_769x769_80k_cityscapes-20201226_170012.log.json) | +| FCN (D6) | R-50-D16 | 512x1024 | 40000 | 3.4 | 10.22 | TITAN Xp | 77.06 | 78.85 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn-d6_r50-d16_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_512x1024_40k_cityscapes/fcn_d6_r50-d16_512x1024_40k_cityscapes_20210305_130133-98d5d1bc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_512x1024_40k_cityscapes/fcn_d6_r50-d16_512x1024_40k_cityscapes-20210305_130133.log.json) | +| FCN (D6) | R-50-D16 | 512x1024 | 80000 | - | 10.35 | TITAN Xp | 77.27 | 78.88 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn-d6_r50-d16_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_512x1024_80k_cityscapes/fcn_d6_r50-d16_512x1024_80k_cityscapes_20210306_115604-133c292f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_512x1024_80k_cityscapes/fcn_d6_r50-d16_512x1024_80k_cityscapes-20210306_115604.log.json) | +| FCN (D6) | R-50-D16 | 769x769 | 40000 | 3.7 | 4.17 | TITAN Xp | 76.82 | 78.22 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn-d6_r50-d16_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_769x769_40k_cityscapes/fcn_d6_r50-d16_769x769_40k_cityscapes_20210305_185744-1aab18ed.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_769x769_40k_cityscapes/fcn_d6_r50-d16_769x769_40k_cityscapes-20210305_185744.log.json) | +| FCN (D6) | R-50-D16 | 769x769 | 80000 | - | 4.15 | TITAN Xp | 77.04 | 78.40 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn-d6_r50-d16_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_769x769_80k_cityscapes/fcn_d6_r50-d16_769x769_80k_cityscapes_20210305_200413-109d88eb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_769x769_80k_cityscapes/fcn_d6_r50-d16_769x769_80k_cityscapes-20210305_200413.log.json) | +| FCN (D6) | R-101-D16 | 512x1024 | 40000 | 4.5 | 8.04 | TITAN Xp | 77.36 | 79.18 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn-d6_r101-d16_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_512x1024_40k_cityscapes/fcn_d6_r101-d16_512x1024_40k_cityscapes_20210305_130337-9cf2b450.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_512x1024_40k_cityscapes/fcn_d6_r101-d16_512x1024_40k_cityscapes-20210305_130337.log.json) | +| FCN (D6) | R-101-D16 | 512x1024 | 80000 | - | 8.26 | TITAN Xp | 78.46 | 80.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn-d6_r101-d16_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_512x1024_80k_cityscapes/fcn_d6_r101-d16_512x1024_80k_cityscapes_20210308_102747-cb336445.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_512x1024_80k_cityscapes/fcn_d6_r101-d16_512x1024_80k_cityscapes-20210308_102747.log.json) | +| FCN (D6) | R-101-D16 | 769x769 | 40000 | 5.0 | 3.12 | TITAN Xp | 77.28 | 78.95 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn-d6_r101-d16_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_769x769_40k_cityscapes/fcn_d6_r101-d16_769x769_40k_cityscapes_20210308_102453-60b114e9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_769x769_40k_cityscapes/fcn_d6_r101-d16_769x769_40k_cityscapes-20210308_102453.log.json) | +| FCN (D6) | R-101-D16 | 769x769 | 80000 | - | 3.21 | TITAN Xp | 78.06 | 79.58 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn-d6_r101-d16_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_769x769_80k_cityscapes/fcn_d6_r101-d16_769x769_80k_cityscapes_20210306_120016-e33adc4f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_769x769_80k_cityscapes/fcn_d6_r101-d16_769x769_80k_cityscapes-20210306_120016.log.json) | +| FCN (D6) | R-50b-D16 | 512x1024 | 80000 | 3.2 | 10.16 | TITAN Xp | 76.99 | 79.03 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn-d6_r50b-d16_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50b-d16_512x1024_80k_cityscapes/fcn_d6_r50b-d16_512x1024_80k_cityscapes_20210311_125550-6a0b62e9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50b_d16_512x1024_80k_cityscapes/fcn_d6_r50b_d16_512x1024_80k_cityscapes-20210311_125550.log.json) | +| FCN (D6) | R-50b-D16 | 769x769 | 80000 | 3.6 | 4.17 | TITAN Xp | 76.86 | 78.52 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn-d6_r50b-d16_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50b-d16_769x769_80k_cityscapes/fcn_d6_r50b-d16_769x769_80k_cityscapes_20210311_131012-d665f231.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50b_d16_769x769_80k_cityscapes/fcn_d6_r50b_d16_769x769_80k_cityscapes-20210311_131012.log.json) | +| FCN (D6) | R-101b-D16 | 512x1024 | 80000 | 4.3 | 8.46 | TITAN Xp | 77.72 | 79.53 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn-d6_r101b-d16_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101b-d16_512x1024_80k_cityscapes/fcn_d6_r101b-d16_512x1024_80k_cityscapes_20210311_144305-3f2eb5b4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101b_d16_512x1024_80k_cityscapes/fcn_d6_r101b_d16_512x1024_80k_cityscapes-20210311_144305.log.json) | +| FCN (D6) | R-101b-D16 | 769x769 | 80000 | 4.8 | 3.32 | TITAN Xp | 77.34 | 78.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn-d6_r101b-d16_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101b-d16_769x769_80k_cityscapes/fcn_d6_r101b-d16_769x769_80k_cityscapes_20210311_154527-c4d8bfbc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101b_d16_769x769_80k_cityscapes/fcn_d6_r101b_d16_769x769_80k_cityscapes-20210311_154527.log.json) | ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| FCN | R-50-D8 | 512x512 | 80000 | 8.5 | 23.49 | 35.94 | 37.94 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_80k_ade20k/fcn_r50-d8_512x512_80k_ade20k_20200614_144016-f8ac5082.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_80k_ade20k/fcn_r50-d8_512x512_80k_ade20k_20200614_144016.log.json) | -| FCN | R-101-D8 | 512x512 | 80000 | 12 | 14.78 | 39.61 | 40.83 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb4-80k_ade20k-512x512.pyy) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_80k_ade20k/fcn_r101-d8_512x512_80k_ade20k_20200615_014143-bc1809f7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_80k_ade20k/fcn_r101-d8_512x512_80k_ade20k_20200615_014143.log.json) | -| FCN | R-50-D8 | 512x512 | 160000 | - | - | 36.10 | 38.08 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_160k_ade20k/fcn_r50-d8_512x512_160k_ade20k_20200615_100713-4edbc3b4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_160k_ade20k/fcn_r50-d8_512x512_160k_ade20k_20200615_100713.log.json) | -| FCN | R-101-D8 | 512x512 | 160000 | - | - | 39.91 | 41.40 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_160k_ade20k/fcn_r101-d8_512x512_160k_ade20k_20200615_105816-fd192bd5.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_160k_ade20k/fcn_r101-d8_512x512_160k_ade20k_20200615_105816.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| FCN | R-50-D8 | 512x512 | 80000 | 8.5 | 23.49 | V100 | 35.94 | 37.94 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_80k_ade20k/fcn_r50-d8_512x512_80k_ade20k_20200614_144016-f8ac5082.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_80k_ade20k/fcn_r50-d8_512x512_80k_ade20k_20200614_144016.log.json) | +| FCN | R-101-D8 | 512x512 | 80000 | 12 | 14.78 | V100 | 39.61 | 40.83 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb4-80k_ade20k-512x512.pyy) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_80k_ade20k/fcn_r101-d8_512x512_80k_ade20k_20200615_014143-bc1809f7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_80k_ade20k/fcn_r101-d8_512x512_80k_ade20k_20200615_014143.log.json) | +| FCN | R-50-D8 | 512x512 | 160000 | - | - | V100 | 36.10 | 38.08 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_160k_ade20k/fcn_r50-d8_512x512_160k_ade20k_20200615_100713-4edbc3b4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_160k_ade20k/fcn_r50-d8_512x512_160k_ade20k_20200615_100713.log.json) | +| FCN | R-101-D8 | 512x512 | 160000 | - | - | V100 | 39.91 | 41.40 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_160k_ade20k/fcn_r101-d8_512x512_160k_ade20k_20200615_105816-fd192bd5.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_160k_ade20k/fcn_r101-d8_512x512_160k_ade20k_20200615_105816.log.json) | ### Pascal VOC 2012 + Aug -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| FCN | R-50-D8 | 512x512 | 20000 | 5.7 | 23.28 | 67.08 | 69.94 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_20k_voc12aug/fcn_r50-d8_512x512_20k_voc12aug_20200617_010715-52dc5306.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_20k_voc12aug/fcn_r50-d8_512x512_20k_voc12aug_20200617_010715.log.json) | -| FCN | R-101-D8 | 512x512 | 20000 | 9.2 | 14.81 | 71.16 | 73.57 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_20k_voc12aug/fcn_r101-d8_512x512_20k_voc12aug_20200617_010842-0bb4e798.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_20k_voc12aug/fcn_r101-d8_512x512_20k_voc12aug_20200617_010842.log.json) | -| FCN | R-50-D8 | 512x512 | 40000 | - | - | 66.97 | 69.04 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_40k_voc12aug/fcn_r50-d8_512x512_40k_voc12aug_20200613_161222-5e2dbf40.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_40k_voc12aug/fcn_r50-d8_512x512_40k_voc12aug_20200613_161222.log.json) | -| FCN | R-101-D8 | 512x512 | 40000 | - | - | 69.91 | 72.38 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_40k_voc12aug/fcn_r101-d8_512x512_40k_voc12aug_20200613_161240-4c8bcefd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_40k_voc12aug/fcn_r101-d8_512x512_40k_voc12aug_20200613_161240.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| FCN | R-50-D8 | 512x512 | 20000 | 5.7 | 23.28 | V100 | 67.08 | 69.94 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_20k_voc12aug/fcn_r50-d8_512x512_20k_voc12aug_20200617_010715-52dc5306.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_20k_voc12aug/fcn_r50-d8_512x512_20k_voc12aug_20200617_010715.log.json) | +| FCN | R-101-D8 | 512x512 | 20000 | 9.2 | 14.81 | V100 | 71.16 | 73.57 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_20k_voc12aug/fcn_r101-d8_512x512_20k_voc12aug_20200617_010842-0bb4e798.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_20k_voc12aug/fcn_r101-d8_512x512_20k_voc12aug_20200617_010842.log.json) | +| FCN | R-50-D8 | 512x512 | 40000 | - | - | V100 | 66.97 | 69.04 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_40k_voc12aug/fcn_r50-d8_512x512_40k_voc12aug_20200613_161222-5e2dbf40.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_40k_voc12aug/fcn_r50-d8_512x512_40k_voc12aug_20200613_161222.log.json) | +| FCN | R-101-D8 | 512x512 | 40000 | - | - | V100 | 69.91 | 72.38 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_40k_voc12aug/fcn_r101-d8_512x512_40k_voc12aug_20200613_161240-4c8bcefd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_40k_voc12aug/fcn_r101-d8_512x512_40k_voc12aug_20200613_161240.log.json) | ### Pascal Context -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| FCN | R-101-D8 | 480x480 | 40000 | - | 9.93 | 44.43 | 45.63 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb4-40k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_40k_pascal_context/fcn_r101-d8_480x480_40k_pascal_context_20210421_154757-b5e97937.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_40k_pascal_context/fcn_r101-d8_480x480_40k_pascal_context-20210421_154757.log.json) | -| FCN | R-101-D8 | 480x480 | 80000 | - | - | 44.13 | 45.26 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb4-80k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_80k_pascal_context/fcn_r101-d8_480x480_80k_pascal_context_20210421_163310-4711813f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_80k_pascal_context/fcn_r101-d8_480x480_80k_pascal_context-20210421_163310.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| FCN | R-101-D8 | 480x480 | 40000 | - | 9.93 | V100 | 44.43 | 45.63 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb4-40k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_40k_pascal_context/fcn_r101-d8_480x480_40k_pascal_context_20210421_154757-b5e97937.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_40k_pascal_context/fcn_r101-d8_480x480_40k_pascal_context-20210421_154757.log.json) | +| FCN | R-101-D8 | 480x480 | 80000 | - | - | V100 | 44.13 | 45.26 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb4-80k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_80k_pascal_context/fcn_r101-d8_480x480_80k_pascal_context_20210421_163310-4711813f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_80k_pascal_context/fcn_r101-d8_480x480_80k_pascal_context-20210421_163310.log.json) | ### Pascal Context 59 -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| FCN | R-101-D8 | 480x480 | 40000 | - | - | 48.42 | 50.4 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb4-40k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_40k_pascal_context_59/fcn_r101-d8_480x480_40k_pascal_context_59_20210415_230724-8cf83682.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_40k_pascal_context_59/fcn_r101-d8_480x480_40k_pascal_context_59-20210415_230724.log.json) | -| FCN | R-101-D8 | 480x480 | 80000 | - | - | 49.35 | 51.38 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb4-80k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_80k_pascal_context_59/fcn_r101-d8_480x480_80k_pascal_context_59_20210416_110804-9a6f2c94.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_80k_pascal_context_59/fcn_r101-d8_480x480_80k_pascal_context_59-20210416_110804.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| FCN | R-101-D8 | 480x480 | 40000 | - | - | V100 | 48.42 | 50.4 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb4-40k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_40k_pascal_context_59/fcn_r101-d8_480x480_40k_pascal_context_59_20210415_230724-8cf83682.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_40k_pascal_context_59/fcn_r101-d8_480x480_40k_pascal_context_59-20210415_230724.log.json) | +| FCN | R-101-D8 | 480x480 | 80000 | - | - | V100 | 49.35 | 51.38 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb4-80k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_80k_pascal_context_59/fcn_r101-d8_480x480_80k_pascal_context_59_20210416_110804-9a6f2c94.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_80k_pascal_context_59/fcn_r101-d8_480x480_80k_pascal_context_59-20210416_110804.log.json) | Note: - `FP16` means Mixed Precision (FP16) is adopted in training. - `FCN D6` means dilation rate of convolution operator in FCN is 6. + +## Citation + +```bibtex +@article{shelhamer2017fully, + title={Fully convolutional networks for semantic segmentation}, + author={Shelhamer, Evan and Long, Jonathan and Darrell, Trevor}, + journal={IEEE transactions on pattern analysis and machine intelligence}, + volume={39}, + number={4}, + pages={640--651}, + year={2017}, + publisher={IEEE Trans Pattern Anal Mach Intell} +} +``` diff --git a/configs/fcn/fcn.yml b/configs/fcn/fcn.yml deleted file mode 100644 index 71c4b2d122..0000000000 --- a/configs/fcn/fcn.yml +++ /dev/null @@ -1,827 +0,0 @@ -Collections: -- Name: FCN - Metadata: - Training Data: - - Cityscapes - - ADE20K - - Pascal VOC 2012 + Aug - - Pascal Context - - Pascal Context 59 - Paper: - URL: https://arxiv.org/abs/1411.4038 - Title: Fully Convolutional Networks for Semantic Segmentation - README: configs/fcn/README.md - Code: - URL: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 - Version: v0.17.0 - Converted From: - Code: https://github.com/BVLC/caffe/wiki/Model-Zoo#fcn -Models: -- Name: fcn_r50-d8_4xb2-40k_cityscapes-512x1024 - In Collection: FCN - Metadata: - backbone: R-50-D8 - crop size: (512,1024) - lr schd: 40000 - inference time (ms/im): - - value: 239.81 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 5.7 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 72.25 - mIoU(ms+flip): 73.36 - Config: configs/fcn/fcn_r50-d8_4xb2-40k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x1024_40k_cityscapes/fcn_r50-d8_512x1024_40k_cityscapes_20200604_192608-efe53f0d.pth -- Name: fcn_r101-d8_4xb2-40k_cityscapes-512x1024 - In Collection: FCN - Metadata: - backbone: R-101-D8 - crop size: (512,1024) - lr schd: 40000 - inference time (ms/im): - - value: 375.94 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 9.2 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 75.45 - mIoU(ms+flip): 76.58 - Config: configs/fcn/fcn_r101-d8_4xb2-40k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x1024_40k_cityscapes/fcn_r101-d8_512x1024_40k_cityscapes_20200604_181852-a883d3a1.pth -- Name: fcn_r50-d8_4xb2-40k_cityscapes-769x769 - In Collection: FCN - Metadata: - backbone: R-50-D8 - crop size: (769,769) - lr schd: 40000 - inference time (ms/im): - - value: 555.56 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 6.5 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 71.47 - mIoU(ms+flip): 72.54 - Config: configs/fcn/fcn_r50-d8_4xb2-40k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_769x769_40k_cityscapes/fcn_r50-d8_769x769_40k_cityscapes_20200606_113104-977b5d02.pth -- Name: fcn_r101-d8_4xb2-40k_cityscapes-769x769 - In Collection: FCN - Metadata: - backbone: R-101-D8 - crop size: (769,769) - lr schd: 40000 - inference time (ms/im): - - value: 840.34 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 10.4 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 73.93 - mIoU(ms+flip): 75.14 - Config: configs/fcn/fcn_r101-d8_4xb2-40k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_769x769_40k_cityscapes/fcn_r101-d8_769x769_40k_cityscapes_20200606_113208-7d4ab69c.pth -- Name: fcn_r18-d8_4xb2-80k_cityscapes-512x1024 - In Collection: FCN - Metadata: - backbone: R-18-D8 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 68.26 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 1.7 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 71.11 - mIoU(ms+flip): 72.91 - Config: configs/fcn/fcn_r18-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18-d8_512x1024_80k_cityscapes/fcn_r18-d8_512x1024_80k_cityscapes_20201225_021327-6c50f8b4.pth -- Name: fcn_r50-d8_4xb2-80k_cityscapes-512x1024 - In Collection: FCN - Metadata: - backbone: R-50-D8 - crop size: (512,1024) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 73.61 - mIoU(ms+flip): 74.24 - Config: configs/fcn/fcn_r50-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x1024_80k_cityscapes/fcn_r50-d8_512x1024_80k_cityscapes_20200606_113019-03aa804d.pth -- Name: fcn_r101-d8_4xb2-80k_cityscapes-512x1024 - In Collection: FCN - Metadata: - backbone: R-101-D8 - crop size: (512,1024) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 75.13 - mIoU(ms+flip): 75.94 - Config: configs/fcn/fcn_r101-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x1024_80k_cityscapes/fcn_r101-d8_512x1024_80k_cityscapes_20200606_113038-3fb937eb.pth -- Name: fcn_r101-d8_4xb2-amp-80k_cityscapes-512x1024 - In Collection: FCN - Metadata: - backbone: R-101-D8 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 115.74 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: AMP - resolution: (512,1024) - Training Memory (GB): 5.37 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 76.8 - Config: configs/fcn/fcn_r101-d8_4xb2-amp-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_fp16_512x1024_80k_cityscapes/fcn_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230921-fb13e883.pth -- Name: fcn_r18-d8_4xb2-80k_cityscapes-769x769 - In Collection: FCN - Metadata: - backbone: R-18-D8 - crop size: (769,769) - lr schd: 80000 - inference time (ms/im): - - value: 156.25 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 1.9 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 70.8 - mIoU(ms+flip): 73.16 - Config: configs/fcn/fcn_r18-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18-d8_769x769_80k_cityscapes/fcn_r18-d8_769x769_80k_cityscapes_20201225_021451-9739d1b8.pth -- Name: fcn_r50-d8_4xb2-80k_cityscapes-769x769 - In Collection: FCN - Metadata: - backbone: R-50-D8 - crop size: (769,769) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 72.64 - mIoU(ms+flip): 73.32 - Config: configs/fcn/fcn_r50-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_769x769_80k_cityscapes/fcn_r50-d8_769x769_80k_cityscapes_20200606_195749-f5caeabc.pth -- Name: fcn_r101-d8_4xb2-80k_cityscapes-769x769 - In Collection: FCN - Metadata: - backbone: R-101-D8 - crop size: (769,769) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 75.52 - mIoU(ms+flip): 76.61 - Config: configs/fcn/fcn_r101-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_769x769_80k_cityscapes/fcn_r101-d8_769x769_80k_cityscapes_20200606_214354-45cbac68.pth -- Name: fcn_r18b-d8_4xb2-80k_cityscapes-512x1024 - In Collection: FCN - Metadata: - backbone: R-18b-D8 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 59.74 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 1.6 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 70.24 - mIoU(ms+flip): 72.77 - Config: configs/fcn/fcn_r18b-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18b-d8_512x1024_80k_cityscapes/fcn_r18b-d8_512x1024_80k_cityscapes_20201225_230143-92c0f445.pth -- Name: fcn_r50b-d8_4xb2-80k_cityscapes-512x1024 - In Collection: FCN - Metadata: - backbone: R-50b-D8 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 238.1 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 5.6 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 75.65 - mIoU(ms+flip): 77.59 - Config: configs/fcn/fcn_r50b-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50b-d8_512x1024_80k_cityscapes/fcn_r50b-d8_512x1024_80k_cityscapes_20201225_094221-82957416.pth -- Name: fcn_r101b-d8_4xb2-80k_cityscapes-512x1024 - In Collection: FCN - Metadata: - backbone: R-101b-D8 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 366.3 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 9.1 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 77.37 - mIoU(ms+flip): 78.77 - Config: configs/fcn/fcn_r101b-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101b-d8_512x1024_80k_cityscapes/fcn_r101b-d8_512x1024_80k_cityscapes_20201226_160213-4543858f.pth -- Name: fcn_r18b-d8_4xb2-80k_cityscapes-769x769 - In Collection: FCN - Metadata: - backbone: R-18b-D8 - crop size: (769,769) - lr schd: 80000 - inference time (ms/im): - - value: 149.25 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 1.7 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 69.66 - mIoU(ms+flip): 72.07 - Config: configs/fcn/fcn_r18b-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18b-d8_769x769_80k_cityscapes/fcn_r18b-d8_769x769_80k_cityscapes_20201226_004430-32d504e5.pth -- Name: fcn_r50b-d8_4xb2-80k_cityscapes-769x769 - In Collection: FCN - Metadata: - backbone: R-50b-D8 - crop size: (769,769) - lr schd: 80000 - inference time (ms/im): - - value: 549.45 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 6.3 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 73.83 - mIoU(ms+flip): 76.6 - Config: configs/fcn/fcn_r50b-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50b-d8_769x769_80k_cityscapes/fcn_r50b-d8_769x769_80k_cityscapes_20201225_094223-94552d38.pth -- Name: fcn_r101b-d8_4xb2-80k_cityscapes-769x769 - In Collection: FCN - Metadata: - backbone: R-101b-D8 - crop size: (769,769) - lr schd: 80000 - inference time (ms/im): - - value: 869.57 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 10.3 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 77.02 - mIoU(ms+flip): 78.67 - Config: configs/fcn/fcn_r101b-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101b-d8_769x769_80k_cityscapes/fcn_r101b-d8_769x769_80k_cityscapes_20201226_170012-82be37e2.pth -- Name: fcn-d6_r50-d16_4xb2-40k_cityscapes-512x1024 - In Collection: FCN - Metadata: - backbone: R-50-D16 - crop size: (512,1024) - lr schd: 40000 - inference time (ms/im): - - value: 97.85 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 3.4 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 77.06 - mIoU(ms+flip): 78.85 - Config: configs/fcn/fcn-d6_r50-d16_4xb2-40k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_512x1024_40k_cityscapes/fcn_d6_r50-d16_512x1024_40k_cityscapes_20210305_130133-98d5d1bc.pth -- Name: fcn-d6_r50-d16_4xb2-80k_cityscapes-512x1024 - In Collection: FCN - Metadata: - backbone: R-50-D16 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 96.62 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 77.27 - mIoU(ms+flip): 78.88 - Config: configs/fcn/fcn-d6_r50-d16_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_512x1024_80k_cityscapes/fcn_d6_r50-d16_512x1024_80k_cityscapes_20210306_115604-133c292f.pth -- Name: fcn-d6_r50-d16_4xb2-40k_cityscapes-769x769 - In Collection: FCN - Metadata: - backbone: R-50-D16 - crop size: (769,769) - lr schd: 40000 - inference time (ms/im): - - value: 239.81 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 3.7 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 76.82 - mIoU(ms+flip): 78.22 - Config: configs/fcn/fcn-d6_r50-d16_4xb2-40k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_769x769_40k_cityscapes/fcn_d6_r50-d16_769x769_40k_cityscapes_20210305_185744-1aab18ed.pth -- Name: fcn-d6_r50-d16_4xb2-80k_cityscapes-769x769 - In Collection: FCN - Metadata: - backbone: R-50-D16 - crop size: (769,769) - lr schd: 80000 - inference time (ms/im): - - value: 240.96 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 77.04 - mIoU(ms+flip): 78.4 - Config: configs/fcn/fcn-d6_r50-d16_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_769x769_80k_cityscapes/fcn_d6_r50-d16_769x769_80k_cityscapes_20210305_200413-109d88eb.pth -- Name: fcn-d6_r101-d16_4xb2-40k_cityscapes-512x1024 - In Collection: FCN - Metadata: - backbone: R-101-D16 - crop size: (512,1024) - lr schd: 40000 - inference time (ms/im): - - value: 124.38 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 4.5 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 77.36 - mIoU(ms+flip): 79.18 - Config: configs/fcn/fcn-d6_r101-d16_4xb2-40k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_512x1024_40k_cityscapes/fcn_d6_r101-d16_512x1024_40k_cityscapes_20210305_130337-9cf2b450.pth -- Name: fcn-d6_r101-d16_4xb2-80k_cityscapes-512x1024 - In Collection: FCN - Metadata: - backbone: R-101-D16 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 121.07 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.46 - mIoU(ms+flip): 80.42 - Config: configs/fcn/fcn-d6_r101-d16_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_512x1024_80k_cityscapes/fcn_d6_r101-d16_512x1024_80k_cityscapes_20210308_102747-cb336445.pth -- Name: fcn-d6_r101-d16_4xb2-40k_cityscapes-769x769 - In Collection: FCN - Metadata: - backbone: R-101-D16 - crop size: (769,769) - lr schd: 40000 - inference time (ms/im): - - value: 320.51 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 5.0 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 77.28 - mIoU(ms+flip): 78.95 - Config: configs/fcn/fcn-d6_r101-d16_4xb2-40k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_769x769_40k_cityscapes/fcn_d6_r101-d16_769x769_40k_cityscapes_20210308_102453-60b114e9.pth -- Name: fcn-d6_r101-d16_4xb2-80k_cityscapes-769x769 - In Collection: FCN - Metadata: - backbone: R-101-D16 - crop size: (769,769) - lr schd: 80000 - inference time (ms/im): - - value: 311.53 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.06 - mIoU(ms+flip): 79.58 - Config: configs/fcn/fcn-d6_r101-d16_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_769x769_80k_cityscapes/fcn_d6_r101-d16_769x769_80k_cityscapes_20210306_120016-e33adc4f.pth -- Name: fcn-d6_r50b-d16_4xb2-80k_cityscapes-512x1024 - In Collection: FCN - Metadata: - backbone: R-50b-D16 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 98.43 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 3.2 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 76.99 - mIoU(ms+flip): 79.03 - Config: configs/fcn/fcn-d6_r50b-d16_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50b-d16_512x1024_80k_cityscapes/fcn_d6_r50b-d16_512x1024_80k_cityscapes_20210311_125550-6a0b62e9.pth -- Name: fcn-d6_r50b-d16_4xb2-80k_cityscapes-769x769 - In Collection: FCN - Metadata: - backbone: R-50b-D16 - crop size: (769,769) - lr schd: 80000 - inference time (ms/im): - - value: 239.81 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 3.6 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 76.86 - mIoU(ms+flip): 78.52 - Config: configs/fcn/fcn-d6_r50b-d16_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50b-d16_769x769_80k_cityscapes/fcn_d6_r50b-d16_769x769_80k_cityscapes_20210311_131012-d665f231.pth -- Name: fcn-d6_r101b-d16_4xb2-80k_cityscapes-512x1024 - In Collection: FCN - Metadata: - backbone: R-101b-D16 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 118.2 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 4.3 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 77.72 - mIoU(ms+flip): 79.53 - Config: configs/fcn/fcn-d6_r101b-d16_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101b-d16_512x1024_80k_cityscapes/fcn_d6_r101b-d16_512x1024_80k_cityscapes_20210311_144305-3f2eb5b4.pth -- Name: fcn-d6_r101b-d16_4xb2-80k_cityscapes-769x769 - In Collection: FCN - Metadata: - backbone: R-101b-D16 - crop size: (769,769) - lr schd: 80000 - inference time (ms/im): - - value: 301.2 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 4.8 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 77.34 - mIoU(ms+flip): 78.91 - Config: configs/fcn/fcn-d6_r101b-d16_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101b-d16_769x769_80k_cityscapes/fcn_d6_r101b-d16_769x769_80k_cityscapes_20210311_154527-c4d8bfbc.pth -- Name: fcn_r50-d8_4xb4-80k_ade20k-512x512 - In Collection: FCN - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 42.57 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 8.5 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 35.94 - mIoU(ms+flip): 37.94 - Config: configs/fcn/fcn_r50-d8_4xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_80k_ade20k/fcn_r50-d8_512x512_80k_ade20k_20200614_144016-f8ac5082.pth -- Name: fcn_r101-d8_4xb4-80k_ade20k-512x512 - In Collection: FCN - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 67.66 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 12.0 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 39.61 - mIoU(ms+flip): 40.83 - Config: configs/fcn/fcn_r101-d8_4xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_80k_ade20k/fcn_r101-d8_512x512_80k_ade20k_20200615_014143-bc1809f7.pth -- Name: fcn_r50-d8_4xb4-160k_ade20k-512x512 - In Collection: FCN - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 36.1 - mIoU(ms+flip): 38.08 - Config: configs/fcn/fcn_r50-d8_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_160k_ade20k/fcn_r50-d8_512x512_160k_ade20k_20200615_100713-4edbc3b4.pth -- Name: fcn_r101-d8_4xb4-160k_ade20k-512x512 - In Collection: FCN - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 39.91 - mIoU(ms+flip): 41.4 - Config: configs/fcn/fcn_r101-d8_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_160k_ade20k/fcn_r101-d8_512x512_160k_ade20k_20200615_105816-fd192bd5.pth -- Name: fcn_r50-d8_4xb4-20k_voc12aug-512x512 - In Collection: FCN - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 20000 - inference time (ms/im): - - value: 42.96 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 5.7 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 67.08 - mIoU(ms+flip): 69.94 - Config: configs/fcn/fcn_r50-d8_4xb4-20k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_20k_voc12aug/fcn_r50-d8_512x512_20k_voc12aug_20200617_010715-52dc5306.pth -- Name: fcn_r101-d8_4xb4-20k_voc12aug-512x512 - In Collection: FCN - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 20000 - inference time (ms/im): - - value: 67.52 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 9.2 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 71.16 - mIoU(ms+flip): 73.57 - Config: configs/fcn/fcn_r101-d8_4xb4-20k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_20k_voc12aug/fcn_r101-d8_512x512_20k_voc12aug_20200617_010842-0bb4e798.pth -- Name: fcn_r50-d8_4xb4-40k_voc12aug-512x512 - In Collection: FCN - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 40000 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 66.97 - mIoU(ms+flip): 69.04 - Config: configs/fcn/fcn_r50-d8_4xb4-40k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_40k_voc12aug/fcn_r50-d8_512x512_40k_voc12aug_20200613_161222-5e2dbf40.pth -- Name: fcn_r101-d8_4xb4-40k_voc12aug-512x512 - In Collection: FCN - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 40000 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 69.91 - mIoU(ms+flip): 72.38 - Config: configs/fcn/fcn_r101-d8_4xb4-40k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_40k_voc12aug/fcn_r101-d8_512x512_40k_voc12aug_20200613_161240-4c8bcefd.pth -- Name: fcn_r101-d8_4xb4-40k_pascal-context-480x480 - In Collection: FCN - Metadata: - backbone: R-101-D8 - crop size: (480,480) - lr schd: 40000 - inference time (ms/im): - - value: 100.7 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (480,480) - Results: - - Task: Semantic Segmentation - Dataset: Pascal Context - Metrics: - mIoU: 44.43 - mIoU(ms+flip): 45.63 - Config: configs/fcn/fcn_r101-d8_4xb4-40k_pascal-context-480x480.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_40k_pascal_context/fcn_r101-d8_480x480_40k_pascal_context_20210421_154757-b5e97937.pth -- Name: fcn_r101-d8_4xb4-80k_pascal-context-480x480 - In Collection: FCN - Metadata: - backbone: R-101-D8 - crop size: (480,480) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Pascal Context - Metrics: - mIoU: 44.13 - mIoU(ms+flip): 45.26 - Config: configs/fcn/fcn_r101-d8_4xb4-80k_pascal-context-480x480.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_80k_pascal_context/fcn_r101-d8_480x480_80k_pascal_context_20210421_163310-4711813f.pth -- Name: fcn_r101-d8_4xb4-40k_pascal-context-59-480x480 - In Collection: FCN - Metadata: - backbone: R-101-D8 - crop size: (480,480) - lr schd: 40000 - Results: - - Task: Semantic Segmentation - Dataset: Pascal Context 59 - Metrics: - mIoU: 48.42 - mIoU(ms+flip): 50.4 - Config: configs/fcn/fcn_r101-d8_4xb4-40k_pascal-context-59-480x480.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_40k_pascal_context_59/fcn_r101-d8_480x480_40k_pascal_context_59_20210415_230724-8cf83682.pth -- Name: fcn_r101-d8_4xb4-80k_pascal-context-59-480x480 - In Collection: FCN - Metadata: - backbone: R-101-D8 - crop size: (480,480) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Pascal Context 59 - Metrics: - mIoU: 49.35 - mIoU(ms+flip): 51.38 - Config: configs/fcn/fcn_r101-d8_4xb4-80k_pascal-context-59-480x480.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_80k_pascal_context_59/fcn_r101-d8_480x480_80k_pascal_context_59_20210416_110804-9a6f2c94.pth diff --git a/configs/fcn/metafile.yaml b/configs/fcn/metafile.yaml new file mode 100644 index 0000000000..f3d80f652e --- /dev/null +++ b/configs/fcn/metafile.yaml @@ -0,0 +1,997 @@ +Collections: +- Name: FCN + License: Apache License 2.0 + Metadata: + Training Data: + - Cityscapes + - ADE20K + - Pascal VOC 2012 + Aug + - Pascal Context + - Pascal Context 59 + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + README: configs/fcn/README.md + Frameworks: + - PyTorch +Models: +- Name: fcn_r50-d8_4xb2-40k_cityscapes-512x1024 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 72.25 + mIoU(ms+flip): 73.36 + Config: configs/fcn/fcn_r50-d8_4xb2-40k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 5.7 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x1024_40k_cityscapes/fcn_r50-d8_512x1024_40k_cityscapes_20200604_192608-efe53f0d.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x1024_40k_cityscapes/fcn_r50-d8_512x1024_40k_cityscapes_20200604_192608.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn_r101-d8_4xb2-40k_cityscapes-512x1024 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 75.45 + mIoU(ms+flip): 76.58 + Config: configs/fcn/fcn_r101-d8_4xb2-40k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 9.2 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x1024_40k_cityscapes/fcn_r101-d8_512x1024_40k_cityscapes_20200604_181852-a883d3a1.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x1024_40k_cityscapes/fcn_r101-d8_512x1024_40k_cityscapes_20200604_181852.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn_r50-d8_4xb2-40k_cityscapes-769x769 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 71.47 + mIoU(ms+flip): 72.54 + Config: configs/fcn/fcn_r50-d8_4xb2-40k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 6.5 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_769x769_40k_cityscapes/fcn_r50-d8_769x769_40k_cityscapes_20200606_113104-977b5d02.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_769x769_40k_cityscapes/fcn_r50-d8_769x769_40k_cityscapes_20200606_113104.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn_r101-d8_4xb2-40k_cityscapes-769x769 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 73.93 + mIoU(ms+flip): 75.14 + Config: configs/fcn/fcn_r101-d8_4xb2-40k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 10.4 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_769x769_40k_cityscapes/fcn_r101-d8_769x769_40k_cityscapes_20200606_113208-7d4ab69c.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_769x769_40k_cityscapes/fcn_r101-d8_769x769_40k_cityscapes_20200606_113208.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn_r18-d8_4xb2-80k_cityscapes-512x1024 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 71.11 + mIoU(ms+flip): 72.91 + Config: configs/fcn/fcn_r18-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-18-D8 + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 1.7 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18-d8_512x1024_80k_cityscapes/fcn_r18-d8_512x1024_80k_cityscapes_20201225_021327-6c50f8b4.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18-d8_512x1024_80k_cityscapes/fcn_r18-d8_512x1024_80k_cityscapes-20201225_021327.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn_r50-d8_4xb2-80k_cityscapes-512x1024 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 73.61 + mIoU(ms+flip): 74.24 + Config: configs/fcn/fcn_r50-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - FCN + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x1024_80k_cityscapes/fcn_r50-d8_512x1024_80k_cityscapes_20200606_113019-03aa804d.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x1024_80k_cityscapes/fcn_r50-d8_512x1024_80k_cityscapes_20200606_113019.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn_r101-d8_4xb2-80k_cityscapes-512x1024 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 75.13 + mIoU(ms+flip): 75.94 + Config: configs/fcn/fcn_r101-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - FCN + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x1024_80k_cityscapes/fcn_r101-d8_512x1024_80k_cityscapes_20200606_113038-3fb937eb.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x1024_80k_cityscapes/fcn_r101-d8_512x1024_80k_cityscapes_20200606_113038.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn_r101-d8_4xb2-amp-80k_cityscapes-512x1024 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 76.8 + Config: configs/fcn/fcn_r101-d8_4xb2-amp-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - FCN + - (FP16) + Training Resources: 4x V100 GPUS + Memory (GB): 5.37 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_fp16_512x1024_80k_cityscapes/fcn_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230921-fb13e883.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_fp16_512x1024_80k_cityscapes/fcn_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230921.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn_r18-d8_4xb2-80k_cityscapes-769x769 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 70.8 + mIoU(ms+flip): 73.16 + Config: configs/fcn/fcn_r18-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-18-D8 + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 1.9 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18-d8_769x769_80k_cityscapes/fcn_r18-d8_769x769_80k_cityscapes_20201225_021451-9739d1b8.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18-d8_769x769_80k_cityscapes/fcn_r18-d8_769x769_80k_cityscapes-20201225_021451.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn_r50-d8_4xb2-80k_cityscapes-769x769 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 72.64 + mIoU(ms+flip): 73.32 + Config: configs/fcn/fcn_r50-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - FCN + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_769x769_80k_cityscapes/fcn_r50-d8_769x769_80k_cityscapes_20200606_195749-f5caeabc.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_769x769_80k_cityscapes/fcn_r50-d8_769x769_80k_cityscapes_20200606_195749.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn_r101-d8_4xb2-80k_cityscapes-769x769 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 75.52 + mIoU(ms+flip): 76.61 + Config: configs/fcn/fcn_r101-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - FCN + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_769x769_80k_cityscapes/fcn_r101-d8_769x769_80k_cityscapes_20200606_214354-45cbac68.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_769x769_80k_cityscapes/fcn_r101-d8_769x769_80k_cityscapes_20200606_214354.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn_r18b-d8_4xb2-80k_cityscapes-512x1024 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 70.24 + mIoU(ms+flip): 72.77 + Config: configs/fcn/fcn_r18b-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-18b-D8 + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 1.6 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18b-d8_512x1024_80k_cityscapes/fcn_r18b-d8_512x1024_80k_cityscapes_20201225_230143-92c0f445.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18b-d8_512x1024_80k_cityscapes/fcn_r18b-d8_512x1024_80k_cityscapes-20201225_230143.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn_r50b-d8_4xb2-80k_cityscapes-512x1024 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 75.65 + mIoU(ms+flip): 77.59 + Config: configs/fcn/fcn_r50b-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50b-D8 + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 5.6 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50b-d8_512x1024_80k_cityscapes/fcn_r50b-d8_512x1024_80k_cityscapes_20201225_094221-82957416.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50b-d8_512x1024_80k_cityscapes/fcn_r50b-d8_512x1024_80k_cityscapes-20201225_094221.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn_r101b-d8_4xb2-80k_cityscapes-512x1024 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 77.37 + mIoU(ms+flip): 78.77 + Config: configs/fcn/fcn_r101b-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101b-D8 + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 9.1 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101b-d8_512x1024_80k_cityscapes/fcn_r101b-d8_512x1024_80k_cityscapes_20201226_160213-4543858f.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101b-d8_512x1024_80k_cityscapes/fcn_r101b-d8_512x1024_80k_cityscapes-20201226_160213.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn_r18b-d8_4xb2-80k_cityscapes-769x769 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 69.66 + mIoU(ms+flip): 72.07 + Config: configs/fcn/fcn_r18b-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-18b-D8 + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 1.7 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18b-d8_769x769_80k_cityscapes/fcn_r18b-d8_769x769_80k_cityscapes_20201226_004430-32d504e5.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18b-d8_769x769_80k_cityscapes/fcn_r18b-d8_769x769_80k_cityscapes-20201226_004430.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn_r50b-d8_4xb2-80k_cityscapes-769x769 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 73.83 + mIoU(ms+flip): 76.6 + Config: configs/fcn/fcn_r50b-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50b-D8 + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 6.3 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50b-d8_769x769_80k_cityscapes/fcn_r50b-d8_769x769_80k_cityscapes_20201225_094223-94552d38.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50b-d8_769x769_80k_cityscapes/fcn_r50b-d8_769x769_80k_cityscapes-20201225_094223.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn_r101b-d8_4xb2-80k_cityscapes-769x769 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 77.02 + mIoU(ms+flip): 78.67 + Config: configs/fcn/fcn_r101b-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101b-D8 + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 10.3 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101b-d8_769x769_80k_cityscapes/fcn_r101b-d8_769x769_80k_cityscapes_20201226_170012-82be37e2.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101b-d8_769x769_80k_cityscapes/fcn_r101b-d8_769x769_80k_cityscapes-20201226_170012.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn-d6_r50-d16_4xb2-40k_cityscapes-512x1024 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 77.06 + mIoU(ms+flip): 78.85 + Config: configs/fcn/fcn-d6_r50-d16_4xb2-40k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D16 + - FCN + - (D6) + Training Resources: 4x TITAN Xp GPUS + Memory (GB): 3.4 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_512x1024_40k_cityscapes/fcn_d6_r50-d16_512x1024_40k_cityscapes_20210305_130133-98d5d1bc.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_512x1024_40k_cityscapes/fcn_d6_r50-d16_512x1024_40k_cityscapes-20210305_130133.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn-d6_r50-d16_4xb2-80k_cityscapes-512x1024 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 77.27 + mIoU(ms+flip): 78.88 + Config: configs/fcn/fcn-d6_r50-d16_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D16 + - FCN + - (D6) + Training Resources: 4x TITAN Xp GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_512x1024_80k_cityscapes/fcn_d6_r50-d16_512x1024_80k_cityscapes_20210306_115604-133c292f.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_512x1024_80k_cityscapes/fcn_d6_r50-d16_512x1024_80k_cityscapes-20210306_115604.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn-d6_r50-d16_4xb2-40k_cityscapes-769x769 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 76.82 + mIoU(ms+flip): 78.22 + Config: configs/fcn/fcn-d6_r50-d16_4xb2-40k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D16 + - FCN + - (D6) + Training Resources: 4x TITAN Xp GPUS + Memory (GB): 3.7 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_769x769_40k_cityscapes/fcn_d6_r50-d16_769x769_40k_cityscapes_20210305_185744-1aab18ed.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_769x769_40k_cityscapes/fcn_d6_r50-d16_769x769_40k_cityscapes-20210305_185744.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn-d6_r50-d16_4xb2-80k_cityscapes-769x769 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 77.04 + mIoU(ms+flip): 78.4 + Config: configs/fcn/fcn-d6_r50-d16_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D16 + - FCN + - (D6) + Training Resources: 4x TITAN Xp GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_769x769_80k_cityscapes/fcn_d6_r50-d16_769x769_80k_cityscapes_20210305_200413-109d88eb.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_769x769_80k_cityscapes/fcn_d6_r50-d16_769x769_80k_cityscapes-20210305_200413.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn-d6_r101-d16_4xb2-40k_cityscapes-512x1024 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 77.36 + mIoU(ms+flip): 79.18 + Config: configs/fcn/fcn-d6_r101-d16_4xb2-40k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D16 + - FCN + - (D6) + Training Resources: 4x TITAN Xp GPUS + Memory (GB): 4.5 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_512x1024_40k_cityscapes/fcn_d6_r101-d16_512x1024_40k_cityscapes_20210305_130337-9cf2b450.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_512x1024_40k_cityscapes/fcn_d6_r101-d16_512x1024_40k_cityscapes-20210305_130337.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn-d6_r101-d16_4xb2-80k_cityscapes-512x1024 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.46 + mIoU(ms+flip): 80.42 + Config: configs/fcn/fcn-d6_r101-d16_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D16 + - FCN + - (D6) + Training Resources: 4x TITAN Xp GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_512x1024_80k_cityscapes/fcn_d6_r101-d16_512x1024_80k_cityscapes_20210308_102747-cb336445.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_512x1024_80k_cityscapes/fcn_d6_r101-d16_512x1024_80k_cityscapes-20210308_102747.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn-d6_r101-d16_4xb2-40k_cityscapes-769x769 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 77.28 + mIoU(ms+flip): 78.95 + Config: configs/fcn/fcn-d6_r101-d16_4xb2-40k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D16 + - FCN + - (D6) + Training Resources: 4x TITAN Xp GPUS + Memory (GB): 5.0 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_769x769_40k_cityscapes/fcn_d6_r101-d16_769x769_40k_cityscapes_20210308_102453-60b114e9.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_769x769_40k_cityscapes/fcn_d6_r101-d16_769x769_40k_cityscapes-20210308_102453.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn-d6_r101-d16_4xb2-80k_cityscapes-769x769 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.06 + mIoU(ms+flip): 79.58 + Config: configs/fcn/fcn-d6_r101-d16_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D16 + - FCN + - (D6) + Training Resources: 4x TITAN Xp GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_769x769_80k_cityscapes/fcn_d6_r101-d16_769x769_80k_cityscapes_20210306_120016-e33adc4f.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_769x769_80k_cityscapes/fcn_d6_r101-d16_769x769_80k_cityscapes-20210306_120016.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn-d6_r50b-d16_4xb2-80k_cityscapes-512x1024 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 76.99 + mIoU(ms+flip): 79.03 + Config: configs/fcn/fcn-d6_r50b-d16_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50b-D16 + - FCN + - (D6) + Training Resources: 4x TITAN Xp GPUS + Memory (GB): 3.2 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50b-d16_512x1024_80k_cityscapes/fcn_d6_r50b-d16_512x1024_80k_cityscapes_20210311_125550-6a0b62e9.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50b_d16_512x1024_80k_cityscapes/fcn_d6_r50b_d16_512x1024_80k_cityscapes-20210311_125550.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn-d6_r50b-d16_4xb2-80k_cityscapes-769x769 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 76.86 + mIoU(ms+flip): 78.52 + Config: configs/fcn/fcn-d6_r50b-d16_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50b-D16 + - FCN + - (D6) + Training Resources: 4x TITAN Xp GPUS + Memory (GB): 3.6 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50b-d16_769x769_80k_cityscapes/fcn_d6_r50b-d16_769x769_80k_cityscapes_20210311_131012-d665f231.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50b_d16_769x769_80k_cityscapes/fcn_d6_r50b_d16_769x769_80k_cityscapes-20210311_131012.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn-d6_r101b-d16_4xb2-80k_cityscapes-512x1024 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 77.72 + mIoU(ms+flip): 79.53 + Config: configs/fcn/fcn-d6_r101b-d16_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101b-D16 + - FCN + - (D6) + Training Resources: 4x TITAN Xp GPUS + Memory (GB): 4.3 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101b-d16_512x1024_80k_cityscapes/fcn_d6_r101b-d16_512x1024_80k_cityscapes_20210311_144305-3f2eb5b4.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101b_d16_512x1024_80k_cityscapes/fcn_d6_r101b_d16_512x1024_80k_cityscapes-20210311_144305.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn-d6_r101b-d16_4xb2-80k_cityscapes-769x769 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 77.34 + mIoU(ms+flip): 78.91 + Config: configs/fcn/fcn-d6_r101b-d16_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101b-D16 + - FCN + - (D6) + Training Resources: 4x TITAN Xp GPUS + Memory (GB): 4.8 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101b-d16_769x769_80k_cityscapes/fcn_d6_r101b-d16_769x769_80k_cityscapes_20210311_154527-c4d8bfbc.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101b_d16_769x769_80k_cityscapes/fcn_d6_r101b_d16_769x769_80k_cityscapes-20210311_154527.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn_r50-d8_4xb4-80k_ade20k-512x512 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 35.94 + mIoU(ms+flip): 37.94 + Config: configs/fcn/fcn_r50-d8_4xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50-D8 + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 8.5 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_80k_ade20k/fcn_r50-d8_512x512_80k_ade20k_20200614_144016-f8ac5082.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_80k_ade20k/fcn_r50-d8_512x512_80k_ade20k_20200614_144016.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn_r101-d8_4xb4-80k_ade20k-512x512 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 39.61 + mIoU(ms+flip): 40.83 + Config: configs/fcn/fcn_r101-d8_4xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-101-D8 + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 12.0 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_80k_ade20k/fcn_r101-d8_512x512_80k_ade20k_20200615_014143-bc1809f7.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_80k_ade20k/fcn_r101-d8_512x512_80k_ade20k_20200615_014143.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn_r50-d8_4xb4-160k_ade20k-512x512 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 36.1 + mIoU(ms+flip): 38.08 + Config: configs/fcn/fcn_r50-d8_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50-D8 + - FCN + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_160k_ade20k/fcn_r50-d8_512x512_160k_ade20k_20200615_100713-4edbc3b4.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_160k_ade20k/fcn_r50-d8_512x512_160k_ade20k_20200615_100713.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn_r101-d8_4xb4-160k_ade20k-512x512 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 39.91 + mIoU(ms+flip): 41.4 + Config: configs/fcn/fcn_r101-d8_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-101-D8 + - FCN + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_160k_ade20k/fcn_r101-d8_512x512_160k_ade20k_20200615_105816-fd192bd5.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_160k_ade20k/fcn_r101-d8_512x512_160k_ade20k_20200615_105816.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn_r50-d8_4xb4-20k_voc12aug-512x512 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 67.08 + mIoU(ms+flip): 69.94 + Config: configs/fcn/fcn_r50-d8_4xb4-20k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - R-50-D8 + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 5.7 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_20k_voc12aug/fcn_r50-d8_512x512_20k_voc12aug_20200617_010715-52dc5306.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_20k_voc12aug/fcn_r50-d8_512x512_20k_voc12aug_20200617_010715.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn_r101-d8_4xb4-20k_voc12aug-512x512 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 71.16 + mIoU(ms+flip): 73.57 + Config: configs/fcn/fcn_r101-d8_4xb4-20k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - R-101-D8 + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 9.2 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_20k_voc12aug/fcn_r101-d8_512x512_20k_voc12aug_20200617_010842-0bb4e798.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_20k_voc12aug/fcn_r101-d8_512x512_20k_voc12aug_20200617_010842.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn_r50-d8_4xb4-40k_voc12aug-512x512 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 66.97 + mIoU(ms+flip): 69.04 + Config: configs/fcn/fcn_r50-d8_4xb4-40k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - R-50-D8 + - FCN + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_40k_voc12aug/fcn_r50-d8_512x512_40k_voc12aug_20200613_161222-5e2dbf40.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_40k_voc12aug/fcn_r50-d8_512x512_40k_voc12aug_20200613_161222.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn_r101-d8_4xb4-40k_voc12aug-512x512 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 69.91 + mIoU(ms+flip): 72.38 + Config: configs/fcn/fcn_r101-d8_4xb4-40k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - R-101-D8 + - FCN + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_40k_voc12aug/fcn_r101-d8_512x512_40k_voc12aug_20200613_161240-4c8bcefd.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_40k_voc12aug/fcn_r101-d8_512x512_40k_voc12aug_20200613_161240.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn_r101-d8_4xb4-40k_pascal-context-480x480 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Pascal Context + Metrics: + mIoU: 44.43 + mIoU(ms+flip): 45.63 + Config: configs/fcn/fcn_r101-d8_4xb4-40k_pascal-context-480x480.py + Metadata: + Training Data: Pascal Context + Batch Size: 16 + Architecture: + - R-101-D8 + - FCN + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_40k_pascal_context/fcn_r101-d8_480x480_40k_pascal_context_20210421_154757-b5e97937.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_40k_pascal_context/fcn_r101-d8_480x480_40k_pascal_context-20210421_154757.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn_r101-d8_4xb4-80k_pascal-context-480x480 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Pascal Context + Metrics: + mIoU: 44.13 + mIoU(ms+flip): 45.26 + Config: configs/fcn/fcn_r101-d8_4xb4-80k_pascal-context-480x480.py + Metadata: + Training Data: Pascal Context + Batch Size: 16 + Architecture: + - R-101-D8 + - FCN + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_80k_pascal_context/fcn_r101-d8_480x480_80k_pascal_context_20210421_163310-4711813f.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_80k_pascal_context/fcn_r101-d8_480x480_80k_pascal_context-20210421_163310.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn_r101-d8_4xb4-40k_pascal-context-59-480x480 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Pascal Context 59 + Metrics: + mIoU: 48.42 + mIoU(ms+flip): 50.4 + Config: configs/fcn/fcn_r101-d8_4xb4-40k_pascal-context-59-480x480.py + Metadata: + Training Data: Pascal Context 59 + Batch Size: 16 + Architecture: + - R-101-D8 + - FCN + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_40k_pascal_context_59/fcn_r101-d8_480x480_40k_pascal_context_59_20210415_230724-8cf83682.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_40k_pascal_context_59/fcn_r101-d8_480x480_40k_pascal_context_59-20210415_230724.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch +- Name: fcn_r101-d8_4xb4-80k_pascal-context-59-480x480 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Pascal Context 59 + Metrics: + mIoU: 49.35 + mIoU(ms+flip): 51.38 + Config: configs/fcn/fcn_r101-d8_4xb4-80k_pascal-context-59-480x480.py + Metadata: + Training Data: Pascal Context 59 + Batch Size: 16 + Architecture: + - R-101-D8 + - FCN + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_80k_pascal_context_59/fcn_r101-d8_480x480_80k_pascal_context_59_20210416_110804-9a6f2c94.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_80k_pascal_context_59/fcn_r101-d8_480x480_80k_pascal_context_59-20210416_110804.log.json + Paper: + Title: Fully Convolutional Networks for Semantic Segmentation + URL: https://arxiv.org/abs/1411.4038 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fcn_head.py#L11 + Framework: PyTorch diff --git a/configs/gcnet/README.md b/configs/gcnet/README.md index fa37f76468..26a478808f 100644 --- a/configs/gcnet/README.md +++ b/configs/gcnet/README.md @@ -1,6 +1,6 @@ # GCNet -[GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond](https://arxiv.org/abs/1904.11492) +> [GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond](https://arxiv.org/abs/1904.11492) ## Introduction @@ -22,6 +22,39 @@ The Non-Local Network (NLNet) presents a pioneering approach for capturing long- +## Results and models + +### Cityscapes + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| GCNet | R-50-D8 | 512x1024 | 40000 | 5.8 | 3.93 | V100 | 77.69 | 78.56 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x1024_40k_cityscapes/gcnet_r50-d8_512x1024_40k_cityscapes_20200618_074436-4b0fd17b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x1024_40k_cityscapes/gcnet_r50-d8_512x1024_40k_cityscapes_20200618_074436.log.json) | +| GCNet | R-101-D8 | 512x1024 | 40000 | 9.2 | 2.61 | V100 | 78.28 | 79.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x1024_40k_cityscapes/gcnet_r101-d8_512x1024_40k_cityscapes_20200618_074436-5e62567f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x1024_40k_cityscapes/gcnet_r101-d8_512x1024_40k_cityscapes_20200618_074436.log.json) | +| GCNet | R-50-D8 | 769x769 | 40000 | 6.5 | 1.67 | V100 | 78.12 | 80.09 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_769x769_40k_cityscapes/gcnet_r50-d8_769x769_40k_cityscapes_20200618_182814-a26f4471.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_769x769_40k_cityscapes/gcnet_r50-d8_769x769_40k_cityscapes_20200618_182814.log.json) | +| GCNet | R-101-D8 | 769x769 | 40000 | 10.5 | 1.13 | V100 | 78.95 | 80.71 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_769x769_40k_cityscapes/gcnet_r101-d8_769x769_40k_cityscapes_20200619_092550-ca4f0a84.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_769x769_40k_cityscapes/gcnet_r101-d8_769x769_40k_cityscapes_20200619_092550.log.json) | +| GCNet | R-50-D8 | 512x1024 | 80000 | - | - | V100 | 78.48 | 80.01 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x1024_80k_cityscapes/gcnet_r50-d8_512x1024_80k_cityscapes_20200618_074450-ef8f069b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x1024_80k_cityscapes/gcnet_r50-d8_512x1024_80k_cityscapes_20200618_074450.log.json) | +| GCNet | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 79.03 | 79.84 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r101-d8_4xb2-80k_cityscapes-512x1024.pyy) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x1024_80k_cityscapes/gcnet_r101-d8_512x1024_80k_cityscapes_20200618_074450-778ebf69.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x1024_80k_cityscapes/gcnet_r101-d8_512x1024_80k_cityscapes_20200618_074450.log.json) | +| GCNet | R-50-D8 | 769x769 | 80000 | - | - | V100 | 78.68 | 80.66 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_769x769_80k_cityscapes/gcnet_r50-d8_769x769_80k_cityscapes_20200619_092516-4839565b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_769x769_80k_cityscapes/gcnet_r50-d8_769x769_80k_cityscapes_20200619_092516.log.json) | +| GCNet | R-101-D8 | 769x769 | 80000 | - | - | V100 | 79.18 | 80.71 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_769x769_80k_cityscapes/gcnet_r101-d8_769x769_80k_cityscapes_20200619_092628-8e043423.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_769x769_80k_cityscapes/gcnet_r101-d8_769x769_80k_cityscapes_20200619_092628.log.json) | + +### ADE20K + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| GCNet | R-50-D8 | 512x512 | 80000 | 8.5 | 23.38 | V100 | 41.47 | 42.85 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_80k_ade20k/gcnet_r50-d8_512x512_80k_ade20k_20200614_185146-91a6da41.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_80k_ade20k/gcnet_r50-d8_512x512_80k_ade20k_20200614_185146.log.json) | +| GCNet | R-101-D8 | 512x512 | 80000 | 12 | 15.20 | V100 | 42.82 | 44.54 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_80k_ade20k/gcnet_r101-d8_512x512_80k_ade20k_20200615_020811-c3fcb6dd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_80k_ade20k/gcnet_r101-d8_512x512_80k_ade20k_20200615_020811.log.json) | +| GCNet | R-50-D8 | 512x512 | 160000 | - | - | V100 | 42.37 | 43.52 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_160k_ade20k/gcnet_r50-d8_512x512_160k_ade20k_20200615_224122-d95f3e1f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_160k_ade20k/gcnet_r50-d8_512x512_160k_ade20k_20200615_224122.log.json) | +| GCNet | R-101-D8 | 512x512 | 160000 | - | - | V100 | 43.69 | 45.21 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_160k_ade20k/gcnet_r101-d8_512x512_160k_ade20k_20200615_225406-615528d7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_160k_ade20k/gcnet_r101-d8_512x512_160k_ade20k_20200615_225406.log.json) | + +### Pascal VOC 2012 + Aug + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| GCNet | R-50-D8 | 512x512 | 20000 | 5.8 | 23.35 | V100 | 76.42 | 77.51 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_20k_voc12aug/gcnet_r50-d8_512x512_20k_voc12aug_20200617_165701-3cbfdab1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_20k_voc12aug/gcnet_r50-d8_512x512_20k_voc12aug_20200617_165701.log.json) | +| GCNet | R-101-D8 | 512x512 | 20000 | 9.2 | 14.80 | V100 | 77.41 | 78.56 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_20k_voc12aug/gcnet_r101-d8_512x512_20k_voc12aug_20200617_165713-6c720aa9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_20k_voc12aug/gcnet_r101-d8_512x512_20k_voc12aug_20200617_165713.log.json) | +| GCNet | R-50-D8 | 512x512 | 40000 | - | - | V100 | 76.24 | 77.63 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_40k_voc12aug/gcnet_r50-d8_512x512_40k_voc12aug_20200613_195105-9797336d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_40k_voc12aug/gcnet_r50-d8_512x512_40k_voc12aug_20200613_195105.log.json) | +| GCNet | R-101-D8 | 512x512 | 40000 | - | - | V100 | 77.84 | 78.59 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_40k_voc12aug/gcnet_r101-d8_512x512_40k_voc12aug_20200613_185806-1e38208d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_40k_voc12aug/gcnet_r101-d8_512x512_40k_voc12aug_20200613_185806.log.json) | + ## Citation ```bibtex @@ -33,36 +66,3 @@ The Non-Local Network (NLNet) presents a pioneering approach for capturing long- year={2019} } ``` - -## Results and models - -### Cityscapes - -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| GCNet | R-50-D8 | 512x1024 | 40000 | 5.8 | 3.93 | 77.69 | 78.56 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x1024_40k_cityscapes/gcnet_r50-d8_512x1024_40k_cityscapes_20200618_074436-4b0fd17b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x1024_40k_cityscapes/gcnet_r50-d8_512x1024_40k_cityscapes_20200618_074436.log.json) | -| GCNet | R-101-D8 | 512x1024 | 40000 | 9.2 | 2.61 | 78.28 | 79.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x1024_40k_cityscapes/gcnet_r101-d8_512x1024_40k_cityscapes_20200618_074436-5e62567f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x1024_40k_cityscapes/gcnet_r101-d8_512x1024_40k_cityscapes_20200618_074436.log.json) | -| GCNet | R-50-D8 | 769x769 | 40000 | 6.5 | 1.67 | 78.12 | 80.09 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_769x769_40k_cityscapes/gcnet_r50-d8_769x769_40k_cityscapes_20200618_182814-a26f4471.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_769x769_40k_cityscapes/gcnet_r50-d8_769x769_40k_cityscapes_20200618_182814.log.json) | -| GCNet | R-101-D8 | 769x769 | 40000 | 10.5 | 1.13 | 78.95 | 80.71 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_769x769_40k_cityscapes/gcnet_r101-d8_769x769_40k_cityscapes_20200619_092550-ca4f0a84.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_769x769_40k_cityscapes/gcnet_r101-d8_769x769_40k_cityscapes_20200619_092550.log.json) | -| GCNet | R-50-D8 | 512x1024 | 80000 | - | - | 78.48 | 80.01 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x1024_80k_cityscapes/gcnet_r50-d8_512x1024_80k_cityscapes_20200618_074450-ef8f069b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x1024_80k_cityscapes/gcnet_r50-d8_512x1024_80k_cityscapes_20200618_074450.log.json) | -| GCNet | R-101-D8 | 512x1024 | 80000 | - | - | 79.03 | 79.84 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r101-d8_4xb2-80k_cityscapes-512x1024.pyy) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x1024_80k_cityscapes/gcnet_r101-d8_512x1024_80k_cityscapes_20200618_074450-778ebf69.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x1024_80k_cityscapes/gcnet_r101-d8_512x1024_80k_cityscapes_20200618_074450.log.json) | -| GCNet | R-50-D8 | 769x769 | 80000 | - | - | 78.68 | 80.66 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_769x769_80k_cityscapes/gcnet_r50-d8_769x769_80k_cityscapes_20200619_092516-4839565b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_769x769_80k_cityscapes/gcnet_r50-d8_769x769_80k_cityscapes_20200619_092516.log.json) | -| GCNet | R-101-D8 | 769x769 | 80000 | - | - | 79.18 | 80.71 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_769x769_80k_cityscapes/gcnet_r101-d8_769x769_80k_cityscapes_20200619_092628-8e043423.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_769x769_80k_cityscapes/gcnet_r101-d8_769x769_80k_cityscapes_20200619_092628.log.json) | - -### ADE20K - -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| GCNet | R-50-D8 | 512x512 | 80000 | 8.5 | 23.38 | 41.47 | 42.85 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_80k_ade20k/gcnet_r50-d8_512x512_80k_ade20k_20200614_185146-91a6da41.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_80k_ade20k/gcnet_r50-d8_512x512_80k_ade20k_20200614_185146.log.json) | -| GCNet | R-101-D8 | 512x512 | 80000 | 12 | 15.20 | 42.82 | 44.54 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_80k_ade20k/gcnet_r101-d8_512x512_80k_ade20k_20200615_020811-c3fcb6dd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_80k_ade20k/gcnet_r101-d8_512x512_80k_ade20k_20200615_020811.log.json) | -| GCNet | R-50-D8 | 512x512 | 160000 | - | - | 42.37 | 43.52 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_160k_ade20k/gcnet_r50-d8_512x512_160k_ade20k_20200615_224122-d95f3e1f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_160k_ade20k/gcnet_r50-d8_512x512_160k_ade20k_20200615_224122.log.json) | -| GCNet | R-101-D8 | 512x512 | 160000 | - | - | 43.69 | 45.21 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_160k_ade20k/gcnet_r101-d8_512x512_160k_ade20k_20200615_225406-615528d7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_160k_ade20k/gcnet_r101-d8_512x512_160k_ade20k_20200615_225406.log.json) | - -### Pascal VOC 2012 + Aug - -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| GCNet | R-50-D8 | 512x512 | 20000 | 5.8 | 23.35 | 76.42 | 77.51 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_20k_voc12aug/gcnet_r50-d8_512x512_20k_voc12aug_20200617_165701-3cbfdab1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_20k_voc12aug/gcnet_r50-d8_512x512_20k_voc12aug_20200617_165701.log.json) | -| GCNet | R-101-D8 | 512x512 | 20000 | 9.2 | 14.80 | 77.41 | 78.56 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_20k_voc12aug/gcnet_r101-d8_512x512_20k_voc12aug_20200617_165713-6c720aa9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_20k_voc12aug/gcnet_r101-d8_512x512_20k_voc12aug_20200617_165713.log.json) | -| GCNet | R-50-D8 | 512x512 | 40000 | - | - | 76.24 | 77.63 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_40k_voc12aug/gcnet_r50-d8_512x512_40k_voc12aug_20200613_195105-9797336d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_40k_voc12aug/gcnet_r50-d8_512x512_40k_voc12aug_20200613_195105.log.json) | -| GCNet | R-101-D8 | 512x512 | 40000 | - | - | 77.84 | 78.59 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_40k_voc12aug/gcnet_r101-d8_512x512_40k_voc12aug_20200613_185806-1e38208d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_40k_voc12aug/gcnet_r101-d8_512x512_40k_voc12aug_20200613_185806.log.json) | diff --git a/configs/gcnet/gcnet.yml b/configs/gcnet/gcnet.yml deleted file mode 100644 index dfd8cf56c4..0000000000 --- a/configs/gcnet/gcnet.yml +++ /dev/null @@ -1,305 +0,0 @@ -Collections: -- Name: GCNet - Metadata: - Training Data: - - Cityscapes - - ADE20K - - Pascal VOC 2012 + Aug - Paper: - URL: https://arxiv.org/abs/1904.11492 - Title: 'GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond' - README: configs/gcnet/README.md - Code: - URL: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/gc_head.py#L10 - Version: v0.17.0 - Converted From: - Code: https://github.com/xvjiarui/GCNet -Models: -- Name: gcnet_r50-d8_4xb2-40k_cityscapes-512x1024 - In Collection: GCNet - Metadata: - backbone: R-50-D8 - crop size: (512,1024) - lr schd: 40000 - inference time (ms/im): - - value: 254.45 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 5.8 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 77.69 - mIoU(ms+flip): 78.56 - Config: configs/gcnet/gcnet_r50-d8_4xb2-40k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x1024_40k_cityscapes/gcnet_r50-d8_512x1024_40k_cityscapes_20200618_074436-4b0fd17b.pth -- Name: gcnet_r101-d8_4xb2-40k_cityscapes-512x1024 - In Collection: GCNet - Metadata: - backbone: R-101-D8 - crop size: (512,1024) - lr schd: 40000 - inference time (ms/im): - - value: 383.14 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 9.2 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.28 - mIoU(ms+flip): 79.34 - Config: configs/gcnet/gcnet_r101-d8_4xb2-40k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x1024_40k_cityscapes/gcnet_r101-d8_512x1024_40k_cityscapes_20200618_074436-5e62567f.pth -- Name: gcnet_r50-d8_4xb2-40k_cityscapes-769x769 - In Collection: GCNet - Metadata: - backbone: R-50-D8 - crop size: (769,769) - lr schd: 40000 - inference time (ms/im): - - value: 598.8 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 6.5 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.12 - mIoU(ms+flip): 80.09 - Config: configs/gcnet/gcnet_r50-d8_4xb2-40k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_769x769_40k_cityscapes/gcnet_r50-d8_769x769_40k_cityscapes_20200618_182814-a26f4471.pth -- Name: gcnet_r101-d8_4xb2-40k_cityscapes-769x769 - In Collection: GCNet - Metadata: - backbone: R-101-D8 - crop size: (769,769) - lr schd: 40000 - inference time (ms/im): - - value: 884.96 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 10.5 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.95 - mIoU(ms+flip): 80.71 - Config: configs/gcnet/gcnet_r101-d8_4xb2-40k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_769x769_40k_cityscapes/gcnet_r101-d8_769x769_40k_cityscapes_20200619_092550-ca4f0a84.pth -- Name: gcnet_r50-d8_4xb2-80k_cityscapes-512x1024 - In Collection: GCNet - Metadata: - backbone: R-50-D8 - crop size: (512,1024) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.48 - mIoU(ms+flip): 80.01 - Config: configs/gcnet/gcnet_r50-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x1024_80k_cityscapes/gcnet_r50-d8_512x1024_80k_cityscapes_20200618_074450-ef8f069b.pth -- Name: gcnet_r101-d8_4xb2-80k_cityscapes-512x1024 - In Collection: GCNet - Metadata: - backbone: R-101-D8 - crop size: (512,1024) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.03 - mIoU(ms+flip): 79.84 - Config: configs/gcnet/gcnet_r101-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x1024_80k_cityscapes/gcnet_r101-d8_512x1024_80k_cityscapes_20200618_074450-778ebf69.pth -- Name: gcnet_r50-d8_4xb2-80k_cityscapes-769x769 - In Collection: GCNet - Metadata: - backbone: R-50-D8 - crop size: (769,769) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.68 - mIoU(ms+flip): 80.66 - Config: configs/gcnet/gcnet_r50-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_769x769_80k_cityscapes/gcnet_r50-d8_769x769_80k_cityscapes_20200619_092516-4839565b.pth -- Name: gcnet_r101-d8_4xb2-80k_cityscapes-769x769 - In Collection: GCNet - Metadata: - backbone: R-101-D8 - crop size: (769,769) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.18 - mIoU(ms+flip): 80.71 - Config: configs/gcnet/gcnet_r101-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_769x769_80k_cityscapes/gcnet_r101-d8_769x769_80k_cityscapes_20200619_092628-8e043423.pth -- Name: gcnet_r50-d8_4xb4-80k_ade20k-512x512 - In Collection: GCNet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 42.77 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 8.5 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 41.47 - mIoU(ms+flip): 42.85 - Config: configs/gcnet/gcnet_r50-d8_4xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_80k_ade20k/gcnet_r50-d8_512x512_80k_ade20k_20200614_185146-91a6da41.pth -- Name: gcnet_r101-d8_4xb4-80k_ade20k-512x512 - In Collection: GCNet - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 65.79 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 12.0 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 42.82 - mIoU(ms+flip): 44.54 - Config: configs/gcnet/gcnet_r101-d8_4xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_80k_ade20k/gcnet_r101-d8_512x512_80k_ade20k_20200615_020811-c3fcb6dd.pth -- Name: gcnet_r50-d8_4xb4-160k_ade20k-512x512 - In Collection: GCNet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 42.37 - mIoU(ms+flip): 43.52 - Config: configs/gcnet/gcnet_r50-d8_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_160k_ade20k/gcnet_r50-d8_512x512_160k_ade20k_20200615_224122-d95f3e1f.pth -- Name: gcnet_r101-d8_4xb4-160k_ade20k-512x512 - In Collection: GCNet - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 43.69 - mIoU(ms+flip): 45.21 - Config: configs/gcnet/gcnet_r101-d8_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_160k_ade20k/gcnet_r101-d8_512x512_160k_ade20k_20200615_225406-615528d7.pth -- Name: gcnet_r50-d8_4xb4-20k_voc12aug-512x512 - In Collection: GCNet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 20000 - inference time (ms/im): - - value: 42.83 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 5.8 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 76.42 - mIoU(ms+flip): 77.51 - Config: configs/gcnet/gcnet_r50-d8_4xb4-20k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_20k_voc12aug/gcnet_r50-d8_512x512_20k_voc12aug_20200617_165701-3cbfdab1.pth -- Name: gcnet_r101-d8_4xb4-20k_voc12aug-512x512 - In Collection: GCNet - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 20000 - inference time (ms/im): - - value: 67.57 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 9.2 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 77.41 - mIoU(ms+flip): 78.56 - Config: configs/gcnet/gcnet_r101-d8_4xb4-20k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_20k_voc12aug/gcnet_r101-d8_512x512_20k_voc12aug_20200617_165713-6c720aa9.pth -- Name: gcnet_r50-d8_4xb4-40k_voc12aug-512x512 - In Collection: GCNet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 40000 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 76.24 - mIoU(ms+flip): 77.63 - Config: configs/gcnet/gcnet_r50-d8_4xb4-40k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_40k_voc12aug/gcnet_r50-d8_512x512_40k_voc12aug_20200613_195105-9797336d.pth -- Name: gcnet_r101-d8_4xb4-40k_voc12aug-512x512 - In Collection: GCNet - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 40000 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 77.84 - mIoU(ms+flip): 78.59 - Config: configs/gcnet/gcnet_r101-d8_4xb4-40k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_40k_voc12aug/gcnet_r101-d8_512x512_40k_voc12aug_20200613_185806-1e38208d.pth diff --git a/configs/gcnet/metafile.yaml b/configs/gcnet/metafile.yaml new file mode 100644 index 0000000000..1f3c4623a0 --- /dev/null +++ b/configs/gcnet/metafile.yaml @@ -0,0 +1,391 @@ +Collections: +- Name: GCNet + License: Apache License 2.0 + Metadata: + Training Data: + - Cityscapes + - ADE20K + - Pascal VOC 2012 + Aug + Paper: + Title: 'GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond' + URL: https://arxiv.org/abs/1904.11492 + README: configs/gcnet/README.md + Frameworks: + - PyTorch +Models: +- Name: gcnet_r50-d8_4xb2-40k_cityscapes-512x1024 + In Collection: GCNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 77.69 + mIoU(ms+flip): 78.56 + Config: configs/gcnet/gcnet_r50-d8_4xb2-40k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - GCNet + Training Resources: 4x V100 GPUS + Memory (GB): 5.8 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x1024_40k_cityscapes/gcnet_r50-d8_512x1024_40k_cityscapes_20200618_074436-4b0fd17b.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x1024_40k_cityscapes/gcnet_r50-d8_512x1024_40k_cityscapes_20200618_074436.log.json + Paper: + Title: 'GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond' + URL: https://arxiv.org/abs/1904.11492 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/gc_head.py#L10 + Framework: PyTorch +- Name: gcnet_r101-d8_4xb2-40k_cityscapes-512x1024 + In Collection: GCNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.28 + mIoU(ms+flip): 79.34 + Config: configs/gcnet/gcnet_r101-d8_4xb2-40k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - GCNet + Training Resources: 4x V100 GPUS + Memory (GB): 9.2 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x1024_40k_cityscapes/gcnet_r101-d8_512x1024_40k_cityscapes_20200618_074436-5e62567f.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x1024_40k_cityscapes/gcnet_r101-d8_512x1024_40k_cityscapes_20200618_074436.log.json + Paper: + Title: 'GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond' + URL: https://arxiv.org/abs/1904.11492 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/gc_head.py#L10 + Framework: PyTorch +- Name: gcnet_r50-d8_4xb2-40k_cityscapes-769x769 + In Collection: GCNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.12 + mIoU(ms+flip): 80.09 + Config: configs/gcnet/gcnet_r50-d8_4xb2-40k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - GCNet + Training Resources: 4x V100 GPUS + Memory (GB): 6.5 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_769x769_40k_cityscapes/gcnet_r50-d8_769x769_40k_cityscapes_20200618_182814-a26f4471.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_769x769_40k_cityscapes/gcnet_r50-d8_769x769_40k_cityscapes_20200618_182814.log.json + Paper: + Title: 'GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond' + URL: https://arxiv.org/abs/1904.11492 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/gc_head.py#L10 + Framework: PyTorch +- Name: gcnet_r101-d8_4xb2-40k_cityscapes-769x769 + In Collection: GCNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.95 + mIoU(ms+flip): 80.71 + Config: configs/gcnet/gcnet_r101-d8_4xb2-40k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - GCNet + Training Resources: 4x V100 GPUS + Memory (GB): 10.5 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_769x769_40k_cityscapes/gcnet_r101-d8_769x769_40k_cityscapes_20200619_092550-ca4f0a84.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_769x769_40k_cityscapes/gcnet_r101-d8_769x769_40k_cityscapes_20200619_092550.log.json + Paper: + Title: 'GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond' + URL: https://arxiv.org/abs/1904.11492 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/gc_head.py#L10 + Framework: PyTorch +- Name: gcnet_r50-d8_4xb2-80k_cityscapes-512x1024 + In Collection: GCNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.48 + mIoU(ms+flip): 80.01 + Config: configs/gcnet/gcnet_r50-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - GCNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x1024_80k_cityscapes/gcnet_r50-d8_512x1024_80k_cityscapes_20200618_074450-ef8f069b.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x1024_80k_cityscapes/gcnet_r50-d8_512x1024_80k_cityscapes_20200618_074450.log.json + Paper: + Title: 'GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond' + URL: https://arxiv.org/abs/1904.11492 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/gc_head.py#L10 + Framework: PyTorch +- Name: gcnet_r101-d8_4xb2-80k_cityscapes-512x1024 + In Collection: GCNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.03 + mIoU(ms+flip): 79.84 + Config: configs/gcnet/gcnet_r101-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - GCNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x1024_80k_cityscapes/gcnet_r101-d8_512x1024_80k_cityscapes_20200618_074450-778ebf69.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x1024_80k_cityscapes/gcnet_r101-d8_512x1024_80k_cityscapes_20200618_074450.log.json + Paper: + Title: 'GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond' + URL: https://arxiv.org/abs/1904.11492 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/gc_head.py#L10 + Framework: PyTorch +- Name: gcnet_r50-d8_4xb2-80k_cityscapes-769x769 + In Collection: GCNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.68 + mIoU(ms+flip): 80.66 + Config: configs/gcnet/gcnet_r50-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - GCNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_769x769_80k_cityscapes/gcnet_r50-d8_769x769_80k_cityscapes_20200619_092516-4839565b.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_769x769_80k_cityscapes/gcnet_r50-d8_769x769_80k_cityscapes_20200619_092516.log.json + Paper: + Title: 'GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond' + URL: https://arxiv.org/abs/1904.11492 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/gc_head.py#L10 + Framework: PyTorch +- Name: gcnet_r101-d8_4xb2-80k_cityscapes-769x769 + In Collection: GCNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.18 + mIoU(ms+flip): 80.71 + Config: configs/gcnet/gcnet_r101-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - GCNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_769x769_80k_cityscapes/gcnet_r101-d8_769x769_80k_cityscapes_20200619_092628-8e043423.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_769x769_80k_cityscapes/gcnet_r101-d8_769x769_80k_cityscapes_20200619_092628.log.json + Paper: + Title: 'GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond' + URL: https://arxiv.org/abs/1904.11492 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/gc_head.py#L10 + Framework: PyTorch +- Name: gcnet_r50-d8_4xb4-80k_ade20k-512x512 + In Collection: GCNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 41.47 + mIoU(ms+flip): 42.85 + Config: configs/gcnet/gcnet_r50-d8_4xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50-D8 + - GCNet + Training Resources: 4x V100 GPUS + Memory (GB): 8.5 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_80k_ade20k/gcnet_r50-d8_512x512_80k_ade20k_20200614_185146-91a6da41.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_80k_ade20k/gcnet_r50-d8_512x512_80k_ade20k_20200614_185146.log.json + Paper: + Title: 'GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond' + URL: https://arxiv.org/abs/1904.11492 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/gc_head.py#L10 + Framework: PyTorch +- Name: gcnet_r101-d8_4xb4-80k_ade20k-512x512 + In Collection: GCNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 42.82 + mIoU(ms+flip): 44.54 + Config: configs/gcnet/gcnet_r101-d8_4xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-101-D8 + - GCNet + Training Resources: 4x V100 GPUS + Memory (GB): 12.0 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_80k_ade20k/gcnet_r101-d8_512x512_80k_ade20k_20200615_020811-c3fcb6dd.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_80k_ade20k/gcnet_r101-d8_512x512_80k_ade20k_20200615_020811.log.json + Paper: + Title: 'GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond' + URL: https://arxiv.org/abs/1904.11492 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/gc_head.py#L10 + Framework: PyTorch +- Name: gcnet_r50-d8_4xb4-160k_ade20k-512x512 + In Collection: GCNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 42.37 + mIoU(ms+flip): 43.52 + Config: configs/gcnet/gcnet_r50-d8_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50-D8 + - GCNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_160k_ade20k/gcnet_r50-d8_512x512_160k_ade20k_20200615_224122-d95f3e1f.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_160k_ade20k/gcnet_r50-d8_512x512_160k_ade20k_20200615_224122.log.json + Paper: + Title: 'GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond' + URL: https://arxiv.org/abs/1904.11492 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/gc_head.py#L10 + Framework: PyTorch +- Name: gcnet_r101-d8_4xb4-160k_ade20k-512x512 + In Collection: GCNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 43.69 + mIoU(ms+flip): 45.21 + Config: configs/gcnet/gcnet_r101-d8_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-101-D8 + - GCNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_160k_ade20k/gcnet_r101-d8_512x512_160k_ade20k_20200615_225406-615528d7.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_160k_ade20k/gcnet_r101-d8_512x512_160k_ade20k_20200615_225406.log.json + Paper: + Title: 'GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond' + URL: https://arxiv.org/abs/1904.11492 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/gc_head.py#L10 + Framework: PyTorch +- Name: gcnet_r50-d8_4xb4-20k_voc12aug-512x512 + In Collection: GCNet + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 76.42 + mIoU(ms+flip): 77.51 + Config: configs/gcnet/gcnet_r50-d8_4xb4-20k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - R-50-D8 + - GCNet + Training Resources: 4x V100 GPUS + Memory (GB): 5.8 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_20k_voc12aug/gcnet_r50-d8_512x512_20k_voc12aug_20200617_165701-3cbfdab1.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_20k_voc12aug/gcnet_r50-d8_512x512_20k_voc12aug_20200617_165701.log.json + Paper: + Title: 'GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond' + URL: https://arxiv.org/abs/1904.11492 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/gc_head.py#L10 + Framework: PyTorch +- Name: gcnet_r101-d8_4xb4-20k_voc12aug-512x512 + In Collection: GCNet + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 77.41 + mIoU(ms+flip): 78.56 + Config: configs/gcnet/gcnet_r101-d8_4xb4-20k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - R-101-D8 + - GCNet + Training Resources: 4x V100 GPUS + Memory (GB): 9.2 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_20k_voc12aug/gcnet_r101-d8_512x512_20k_voc12aug_20200617_165713-6c720aa9.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_20k_voc12aug/gcnet_r101-d8_512x512_20k_voc12aug_20200617_165713.log.json + Paper: + Title: 'GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond' + URL: https://arxiv.org/abs/1904.11492 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/gc_head.py#L10 + Framework: PyTorch +- Name: gcnet_r50-d8_4xb4-40k_voc12aug-512x512 + In Collection: GCNet + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 76.24 + mIoU(ms+flip): 77.63 + Config: configs/gcnet/gcnet_r50-d8_4xb4-40k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - R-50-D8 + - GCNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_40k_voc12aug/gcnet_r50-d8_512x512_40k_voc12aug_20200613_195105-9797336d.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_40k_voc12aug/gcnet_r50-d8_512x512_40k_voc12aug_20200613_195105.log.json + Paper: + Title: 'GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond' + URL: https://arxiv.org/abs/1904.11492 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/gc_head.py#L10 + Framework: PyTorch +- Name: gcnet_r101-d8_4xb4-40k_voc12aug-512x512 + In Collection: GCNet + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 77.84 + mIoU(ms+flip): 78.59 + Config: configs/gcnet/gcnet_r101-d8_4xb4-40k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - R-101-D8 + - GCNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_40k_voc12aug/gcnet_r101-d8_512x512_40k_voc12aug_20200613_185806-1e38208d.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_40k_voc12aug/gcnet_r101-d8_512x512_40k_voc12aug_20200613_185806.log.json + Paper: + Title: 'GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond' + URL: https://arxiv.org/abs/1904.11492 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/gc_head.py#L10 + Framework: PyTorch diff --git a/configs/hrnet/README.md b/configs/hrnet/README.md index f85683b63f..38a6bd0e76 100644 --- a/configs/hrnet/README.md +++ b/configs/hrnet/README.md @@ -1,6 +1,6 @@ # HRNet -[Deep High-Resolution Representation Learning for Human Pose Estimation](https://arxiv.org/abs/1908.07919) +> [Deep High-Resolution Representation Learning for Human Pose Estimation](https://arxiv.org/abs/1908.07919) ## Introduction @@ -22,101 +22,101 @@ High-resolution representations are essential for position-sensitive vision prob -## Citation - -```bibtext -@inproceedings{SunXLW19, - title={Deep High-Resolution Representation Learning for Human Pose Estimation}, - author={Ke Sun and Bin Xiao and Dong Liu and Jingdong Wang}, - booktitle={CVPR}, - year={2019} -} -``` - ## Results and models ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | ------------------ | --------- | ------: | -------- | -------------- | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| FCN | HRNetV2p-W18-Small | 512x1024 | 40000 | 1.7 | 23.74 | 73.86 | 75.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18s_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_40k_cityscapes/fcn_hr18s_512x1024_40k_cityscapes_20200601_014216-93db27d0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_40k_cityscapes/fcn_hr18s_512x1024_40k_cityscapes_20200601_014216.log.json) | -| FCN | HRNetV2p-W18 | 512x1024 | 40000 | 2.9 | 12.97 | 77.19 | 78.92 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_40k_cityscapes/fcn_hr18_512x1024_40k_cityscapes_20200601_014216-f196fb4e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_40k_cityscapes/fcn_hr18_512x1024_40k_cityscapes_20200601_014216.log.json) | -| FCN | HRNetV2p-W48 | 512x1024 | 40000 | 6.2 | 6.42 | 78.48 | 79.69 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_40k_cityscapes/fcn_hr48_512x1024_40k_cityscapes_20200601_014240-a989b146.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_40k_cityscapes/fcn_hr48_512x1024_40k_cityscapes_20200601_014240.log.json) | -| FCN | HRNetV2p-W18-Small | 512x1024 | 80000 | - | - | 75.31 | 77.48 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18s_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_80k_cityscapes/fcn_hr18s_512x1024_80k_cityscapes_20200601_202700-1462b75d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_80k_cityscapes/fcn_hr18s_512x1024_80k_cityscapes_20200601_202700.log.json) | -| FCN | HRNetV2p-W18 | 512x1024 | 80000 | - | - | 78.65 | 80.35 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_80k_cityscapes/fcn_hr18_512x1024_80k_cityscapes_20200601_223255-4e7b345e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_80k_cityscapes/fcn_hr18_512x1024_80k_cityscapes_20200601_223255.log.json) | -| FCN | HRNetV2p-W48 | 512x1024 | 80000 | - | - | 79.93 | 80.72 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_80k_cityscapes/fcn_hr48_512x1024_80k_cityscapes_20200601_202606-58ea95d6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_80k_cityscapes/fcn_hr48_512x1024_80k_cityscapes_20200601_202606.log.json) | -| FCN | HRNetV2p-W18-Small | 512x1024 | 160000 | - | - | 76.31 | 78.31 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18s_4xb2-160k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_160k_cityscapes/fcn_hr18s_512x1024_160k_cityscapes_20200602_190901-4a0797ea.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_160k_cityscapes/fcn_hr18s_512x1024_160k_cityscapes_20200602_190901.log.json) | -| FCN | HRNetV2p-W18 | 512x1024 | 160000 | - | - | 78.80 | 80.74 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18_4xb2-160k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_160k_cityscapes/fcn_hr18_512x1024_160k_cityscapes_20200602_190822-221e4a4f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_160k_cityscapes/fcn_hr18_512x1024_160k_cityscapes_20200602_190822.log.json) | -| FCN | HRNetV2p-W48 | 512x1024 | 160000 | - | - | 80.65 | 81.92 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb2-160k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_160k_cityscapes/fcn_hr48_512x1024_160k_cityscapes_20200602_190946-59b7973e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_160k_cityscapes/fcn_hr48_512x1024_160k_cityscapes_20200602_190946.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | ------------------ | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| FCN | HRNetV2p-W18-Small | 512x1024 | 40000 | 1.7 | 23.74 | V100 | 73.86 | 75.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18s_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_40k_cityscapes/fcn_hr18s_512x1024_40k_cityscapes_20200601_014216-93db27d0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_40k_cityscapes/fcn_hr18s_512x1024_40k_cityscapes_20200601_014216.log.json) | +| FCN | HRNetV2p-W18 | 512x1024 | 40000 | 2.9 | 12.97 | V100 | 77.19 | 78.92 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_40k_cityscapes/fcn_hr18_512x1024_40k_cityscapes_20200601_014216-f196fb4e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_40k_cityscapes/fcn_hr18_512x1024_40k_cityscapes_20200601_014216.log.json) | +| FCN | HRNetV2p-W48 | 512x1024 | 40000 | 6.2 | 6.42 | V100 | 78.48 | 79.69 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_40k_cityscapes/fcn_hr48_512x1024_40k_cityscapes_20200601_014240-a989b146.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_40k_cityscapes/fcn_hr48_512x1024_40k_cityscapes_20200601_014240.log.json) | +| FCN | HRNetV2p-W18-Small | 512x1024 | 80000 | - | - | V100 | 75.31 | 77.48 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18s_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_80k_cityscapes/fcn_hr18s_512x1024_80k_cityscapes_20200601_202700-1462b75d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_80k_cityscapes/fcn_hr18s_512x1024_80k_cityscapes_20200601_202700.log.json) | +| FCN | HRNetV2p-W18 | 512x1024 | 80000 | - | - | V100 | 78.65 | 80.35 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_80k_cityscapes/fcn_hr18_512x1024_80k_cityscapes_20200601_223255-4e7b345e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_80k_cityscapes/fcn_hr18_512x1024_80k_cityscapes_20200601_223255.log.json) | +| FCN | HRNetV2p-W48 | 512x1024 | 80000 | - | - | V100 | 79.93 | 80.72 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_80k_cityscapes/fcn_hr48_512x1024_80k_cityscapes_20200601_202606-58ea95d6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_80k_cityscapes/fcn_hr48_512x1024_80k_cityscapes_20200601_202606.log.json) | +| FCN | HRNetV2p-W18-Small | 512x1024 | 160000 | - | - | V100 | 76.31 | 78.31 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18s_4xb2-160k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_160k_cityscapes/fcn_hr18s_512x1024_160k_cityscapes_20200602_190901-4a0797ea.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_160k_cityscapes/fcn_hr18s_512x1024_160k_cityscapes_20200602_190901.log.json) | +| FCN | HRNetV2p-W18 | 512x1024 | 160000 | - | - | V100 | 78.80 | 80.74 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18_4xb2-160k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_160k_cityscapes/fcn_hr18_512x1024_160k_cityscapes_20200602_190822-221e4a4f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_160k_cityscapes/fcn_hr18_512x1024_160k_cityscapes_20200602_190822.log.json) | +| FCN | HRNetV2p-W48 | 512x1024 | 160000 | - | - | V100 | 80.65 | 81.92 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb2-160k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_160k_cityscapes/fcn_hr48_512x1024_160k_cityscapes_20200602_190946-59b7973e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_160k_cityscapes/fcn_hr48_512x1024_160k_cityscapes_20200602_190946.log.json) | ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | ------------------ | --------- | ------: | -------- | -------------- | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| FCN | HRNetV2p-W18-Small | 512x512 | 80000 | 3.8 | 38.66 | 31.38 | 32.45 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18s_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_80k_ade20k/fcn_hr18s_512x512_80k_ade20k_20200614_144345-77fc814a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_80k_ade20k/fcn_hr18s_512x512_80k_ade20k_20200614_144345.log.json) | -| FCN | HRNetV2p-W18 | 512x512 | 80000 | 4.9 | 22.57 | 36.27 | 37.28 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_80k_ade20k/fcn_hr18_512x512_80k_ade20k_20210827_114910-6c9382c0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_80k_ade20k/fcn_hr18_512x512_80k_ade20k_20210827_114910.log.json) | -| FCN | HRNetV2p-W48 | 512x512 | 80000 | 8.2 | 21.23 | 41.90 | 43.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_80k_ade20k/fcn_hr48_512x512_80k_ade20k_20200614_193946-7ba5258d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_80k_ade20k/fcn_hr48_512x512_80k_ade20k_20200614_193946.log.json) | -| FCN | HRNetV2p-W18-Small | 512x512 | 160000 | - | - | 33.07 | 34.56 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18s_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_160k_ade20k/fcn_hr18s_512x512_160k_ade20k_20210829_174739-f1e7c2e7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_160k_ade20k/fcn_hr18s_512x512_160k_ade20k_20210829_174739.log.json) | -| FCN | HRNetV2p-W18 | 512x512 | 160000 | - | - | 36.79 | 38.58 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_160k_ade20k/fcn_hr18_512x512_160k_ade20k_20200614_214426-ca961836.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_160k_ade20k/fcn_hr18_512x512_160k_ade20k_20200614_214426.log.json) | -| FCN | HRNetV2p-W48 | 512x512 | 160000 | - | - | 42.02 | 43.86 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_160k_ade20k/fcn_hr48_512x512_160k_ade20k_20200614_214407-a52fc02c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_160k_ade20k/fcn_hr48_512x512_160k_ade20k_20200614_214407.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | ------------------ | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| FCN | HRNetV2p-W18-Small | 512x512 | 80000 | 3.8 | 38.66 | V100 | 31.38 | 32.45 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18s_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_80k_ade20k/fcn_hr18s_512x512_80k_ade20k_20200614_144345-77fc814a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_80k_ade20k/fcn_hr18s_512x512_80k_ade20k_20200614_144345.log.json) | +| FCN | HRNetV2p-W18 | 512x512 | 80000 | 4.9 | 22.57 | V100 | 36.27 | 37.28 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_80k_ade20k/fcn_hr18_512x512_80k_ade20k_20210827_114910-6c9382c0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_80k_ade20k/fcn_hr18_512x512_80k_ade20k_20210827_114910.log.json) | +| FCN | HRNetV2p-W48 | 512x512 | 80000 | 8.2 | 21.23 | V100 | 41.90 | 43.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_80k_ade20k/fcn_hr48_512x512_80k_ade20k_20200614_193946-7ba5258d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_80k_ade20k/fcn_hr48_512x512_80k_ade20k_20200614_193946.log.json) | +| FCN | HRNetV2p-W18-Small | 512x512 | 160000 | - | - | V100 | 33.07 | 34.56 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18s_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_160k_ade20k/fcn_hr18s_512x512_160k_ade20k_20210829_174739-f1e7c2e7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_160k_ade20k/fcn_hr18s_512x512_160k_ade20k_20210829_174739.log.json) | +| FCN | HRNetV2p-W18 | 512x512 | 160000 | - | - | V100 | 36.79 | 38.58 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_160k_ade20k/fcn_hr18_512x512_160k_ade20k_20200614_214426-ca961836.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_160k_ade20k/fcn_hr18_512x512_160k_ade20k_20200614_214426.log.json) | +| FCN | HRNetV2p-W48 | 512x512 | 160000 | - | - | V100 | 42.02 | 43.86 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_160k_ade20k/fcn_hr48_512x512_160k_ade20k_20200614_214407-a52fc02c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_160k_ade20k/fcn_hr48_512x512_160k_ade20k_20200614_214407.log.json) | ### Pascal VOC 2012 + Aug -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | ------------------ | --------- | ------: | -------- | -------------- | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| FCN | HRNetV2p-W18-Small | 512x512 | 20000 | 1.8 | 43.36 | 65.5 | 68.89 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18s_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_20k_voc12aug/fcn_hr18s_512x512_20k_voc12aug_20210829_174910-0aceadb4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_20k_voc12aug/fcn_hr18s_512x512_20k_voc12aug_20210829_174910.log.json) | -| FCN | HRNetV2p-W18 | 512x512 | 20000 | 2.9 | 23.48 | 72.30 | 74.71 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_20k_voc12aug/fcn_hr18_512x512_20k_voc12aug_20200617_224503-488d45f7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_20k_voc12aug/fcn_hr18_512x512_20k_voc12aug_20200617_224503.log.json) | -| FCN | HRNetV2p-W48 | 512x512 | 20000 | 6.2 | 22.05 | 75.87 | 78.58 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_20k_voc12aug/fcn_hr48_512x512_20k_voc12aug_20200617_224419-89de05cd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_20k_voc12aug/fcn_hr48_512x512_20k_voc12aug_20200617_224419.log.json) | -| FCN | HRNetV2p-W18-Small | 512x512 | 40000 | - | - | 66.61 | 70.00 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18s_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_40k_voc12aug/fcn_hr18s_512x512_40k_voc12aug_20200614_000648-4f8d6e7f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_40k_voc12aug/fcn_hr18s_512x512_40k_voc12aug_20200614_000648.log.json) | -| FCN | HRNetV2p-W18 | 512x512 | 40000 | - | - | 72.90 | 75.59 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_40k_voc12aug/fcn_hr18_512x512_40k_voc12aug_20200613_224401-1b4b76cd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_40k_voc12aug/fcn_hr18_512x512_40k_voc12aug_20200613_224401.log.json) | -| FCN | HRNetV2p-W48 | 512x512 | 40000 | - | - | 76.24 | 78.49 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_40k_voc12aug/fcn_hr48_512x512_40k_voc12aug_20200613_222111-1b0f18bc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_40k_voc12aug/fcn_hr48_512x512_40k_voc12aug_20200613_222111.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | ------------------ | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| FCN | HRNetV2p-W18-Small | 512x512 | 20000 | 1.8 | 43.36 | V100 | 65.5 | 68.89 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18s_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_20k_voc12aug/fcn_hr18s_512x512_20k_voc12aug_20210829_174910-0aceadb4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_20k_voc12aug/fcn_hr18s_512x512_20k_voc12aug_20210829_174910.log.json) | +| FCN | HRNetV2p-W18 | 512x512 | 20000 | 2.9 | 23.48 | V100 | 72.30 | 74.71 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_20k_voc12aug/fcn_hr18_512x512_20k_voc12aug_20200617_224503-488d45f7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_20k_voc12aug/fcn_hr18_512x512_20k_voc12aug_20200617_224503.log.json) | +| FCN | HRNetV2p-W48 | 512x512 | 20000 | 6.2 | 22.05 | V100 | 75.87 | 78.58 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_20k_voc12aug/fcn_hr48_512x512_20k_voc12aug_20200617_224419-89de05cd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_20k_voc12aug/fcn_hr48_512x512_20k_voc12aug_20200617_224419.log.json) | +| FCN | HRNetV2p-W18-Small | 512x512 | 40000 | - | - | V100 | 66.61 | 70.00 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18s_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_40k_voc12aug/fcn_hr18s_512x512_40k_voc12aug_20200614_000648-4f8d6e7f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_40k_voc12aug/fcn_hr18s_512x512_40k_voc12aug_20200614_000648.log.json) | +| FCN | HRNetV2p-W18 | 512x512 | 40000 | - | - | V100 | 72.90 | 75.59 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_40k_voc12aug/fcn_hr18_512x512_40k_voc12aug_20200613_224401-1b4b76cd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_40k_voc12aug/fcn_hr18_512x512_40k_voc12aug_20200613_224401.log.json) | +| FCN | HRNetV2p-W48 | 512x512 | 40000 | - | - | V100 | 76.24 | 78.49 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_40k_voc12aug/fcn_hr48_512x512_40k_voc12aug_20200613_222111-1b0f18bc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_40k_voc12aug/fcn_hr48_512x512_40k_voc12aug_20200613_222111.log.json) | ### Pascal Context -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | ------------ | --------- | ------: | -------- | -------------- | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| FCN | HRNetV2p-W48 | 480x480 | 40000 | 6.1 | 8.86 | 45.14 | 47.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb4-40k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_40k_pascal_context/fcn_hr48_480x480_40k_pascal_context_20200911_164852-667d00b0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_40k_pascal_context/fcn_hr48_480x480_40k_pascal_context-20200911_164852.log.json) | -| FCN | HRNetV2p-W48 | 480x480 | 80000 | - | - | 45.84 | 47.84 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb4-80k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_80k_pascal_context/fcn_hr48_480x480_80k_pascal_context_20200911_155322-847a6711.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_80k_pascal_context/fcn_hr48_480x480_80k_pascal_context-20200911_155322.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | ------------ | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| FCN | HRNetV2p-W48 | 480x480 | 40000 | 6.1 | 8.86 | V100 | 45.14 | 47.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb4-40k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_40k_pascal_context/fcn_hr48_480x480_40k_pascal_context_20200911_164852-667d00b0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_40k_pascal_context/fcn_hr48_480x480_40k_pascal_context-20200911_164852.log.json) | +| FCN | HRNetV2p-W48 | 480x480 | 80000 | - | - | V100 | 45.84 | 47.84 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb4-80k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_80k_pascal_context/fcn_hr48_480x480_80k_pascal_context_20200911_155322-847a6711.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_80k_pascal_context/fcn_hr48_480x480_80k_pascal_context-20200911_155322.log.json) | ### Pascal Context 59 -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | ------------ | --------- | ------: | -------- | -------------- | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| FCN | HRNetV2p-W48 | 480x480 | 40000 | - | - | 50.33 | 52.83 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb4-40k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_40k_pascal_context_59/fcn_hr48_480x480_40k_pascal_context_59_20210410_122738-b808b8b2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_40k_pascal_context_59/fcn_hr48_480x480_40k_pascal_context_59-20210410_122738.log.json) | -| FCN | HRNetV2p-W48 | 480x480 | 80000 | - | - | 51.12 | 53.56 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb4-80k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_80k_pascal_context_59/fcn_hr48_480x480_80k_pascal_context_59_20210411_003240-3ae7081e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_80k_pascal_context_59/fcn_hr48_480x480_80k_pascal_context_59-20210411_003240.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | ------------ | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| FCN | HRNetV2p-W48 | 480x480 | 40000 | - | - | V100 | 50.33 | 52.83 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb4-40k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_40k_pascal_context_59/fcn_hr48_480x480_40k_pascal_context_59_20210410_122738-b808b8b2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_40k_pascal_context_59/fcn_hr48_480x480_40k_pascal_context_59-20210410_122738.log.json) | +| FCN | HRNetV2p-W48 | 480x480 | 80000 | - | - | V100 | 51.12 | 53.56 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb4-80k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_80k_pascal_context_59/fcn_hr48_480x480_80k_pascal_context_59_20210411_003240-3ae7081e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_80k_pascal_context_59/fcn_hr48_480x480_80k_pascal_context_59-20210411_003240.log.json) | ### LoveDA -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | ------------------ | --------- | ------: | -------- | -------------- | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| FCN | HRNetV2p-W18-Small | 512x512 | 80000 | 1.59 | 24.87 | 49.28 | 49.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18s_4xb4-80k_loveda-512x512.pyy) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_80k_loveda/fcn_hr18s_512x512_80k_loveda_20211210_203228-60a86a7a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_80k_loveda/fcn_hr18s_512x512_80k_loveda_20211210_203228.log.json) | -| FCN | HRNetV2p-W18 | 512x512 | 80000 | 2.76 | 12.92 | 50.81 | 50.95 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18_4xb4-80k_loveda-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_80k_loveda/fcn_hr18_512x512_80k_loveda_20211210_203952-93d9c3b3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_80k_loveda/fcn_hr18_512x512_80k_loveda_20211210_203952.log.json) | -| FCN | HRNetV2p-W48 | 512x512 | 80000 | 6.20 | 9.61 | 51.42 | 51.64 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb4-80k_loveda-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_80k_loveda/fcn_hr48_512x512_80k_loveda_20211211_044756-67072f55.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_80k_loveda/fcn_hr48_512x512_80k_loveda_20211211_044756.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | ------------------ | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| FCN | HRNetV2p-W18-Small | 512x512 | 80000 | 1.59 | 24.87 | V100 | 49.28 | 49.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18s_4xb4-80k_loveda-512x512.pyy) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_80k_loveda/fcn_hr18s_512x512_80k_loveda_20211210_203228-60a86a7a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_80k_loveda/fcn_hr18s_512x512_80k_loveda_20211210_203228.log.json) | +| FCN | HRNetV2p-W18 | 512x512 | 80000 | 2.76 | 12.92 | V100 | 50.81 | 50.95 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18_4xb4-80k_loveda-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_80k_loveda/fcn_hr18_512x512_80k_loveda_20211210_203952-93d9c3b3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_80k_loveda/fcn_hr18_512x512_80k_loveda_20211210_203952.log.json) | +| FCN | HRNetV2p-W48 | 512x512 | 80000 | 6.20 | 9.61 | V100 | 51.42 | 51.64 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb4-80k_loveda-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_80k_loveda/fcn_hr48_512x512_80k_loveda_20211211_044756-67072f55.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_80k_loveda/fcn_hr48_512x512_80k_loveda_20211211_044756.log.json) | ### Potsdam -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | ------------------ | --------- | ------: | -------- | -------------- | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| FCN | HRNetV2p-W18-Small | 512x512 | 80000 | 1.58 | 36.00 | 77.64 | 78.8 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18s_4xb4-80k_potsdam-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_80k_potsdam/fcn_hr18s_512x512_80k_potsdam_20211218_205517-ba32af63.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_80k_potsdam/fcn_hr18s_512x512_80k_potsdam_20211218_205517.log.json) | -| FCN | HRNetV2p-W18 | 512x512 | 80000 | 2.76 | 19.25 | 78.26 | 79.24 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18_4xb4-80k_potsdam-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_80k_potsdam/fcn_hr18_512x512_80k_potsdam_20211218_205517-5d0387ad.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_80k_potsdam/fcn_hr18_512x512_80k_potsdam_20211218_205517.log.json) | -| FCN | HRNetV2p-W48 | 512x512 | 80000 | 6.20 | 16.42 | 78.39 | 79.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb4-80k_potsdam-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_80k_potsdam/fcn_hr48_512x512_80k_potsdam_20211219_020601-97434c78.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_80k_potsdam/fcn_hr48_512x512_80k_potsdam_20211219_020601.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | ------------------ | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| FCN | HRNetV2p-W18-Small | 512x512 | 80000 | 1.58 | 36.00 | V100 | 77.64 | 78.8 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18s_4xb4-80k_potsdam-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_80k_potsdam/fcn_hr18s_512x512_80k_potsdam_20211218_205517-ba32af63.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_80k_potsdam/fcn_hr18s_512x512_80k_potsdam_20211218_205517.log.json) | +| FCN | HRNetV2p-W18 | 512x512 | 80000 | 2.76 | 19.25 | V100 | 78.26 | 79.24 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18_4xb4-80k_potsdam-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_80k_potsdam/fcn_hr18_512x512_80k_potsdam_20211218_205517-5d0387ad.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_80k_potsdam/fcn_hr18_512x512_80k_potsdam_20211218_205517.log.json) | +| FCN | HRNetV2p-W48 | 512x512 | 80000 | 6.20 | 16.42 | V100 | 78.39 | 79.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb4-80k_potsdam-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_80k_potsdam/fcn_hr48_512x512_80k_potsdam_20211219_020601-97434c78.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_80k_potsdam/fcn_hr48_512x512_80k_potsdam_20211219_020601.log.json) | ### Vaihingen -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | ------------------ | --------- | ------: | -------- | -------------- | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| FCN | HRNetV2p-W18-Small | 512x512 | 80000 | 1.58 | 38.11 | 71.81 | 73.1 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18s_4xb4-80k_vaihingen-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_4x4_512x512_80k_vaihingen/fcn_hr18s_4x4_512x512_80k_vaihingen_20211231_230909-b23aae02.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_4x4_512x512_80k_vaihingen/fcn_hr18s_4x4_512x512_80k_vaihingen_20211231_230909.log.json) | -| FCN | HRNetV2p-W18 | 512x512 | 80000 | 2.76 | 19.55 | 72.57 | 74.09 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18_4xb4-80k_vaihingen-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_4x4_512x512_80k_vaihingen/fcn_hr18_4x4_512x512_80k_vaihingen_20211231_231216-2ec3ae8a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_4x4_512x512_80k_vaihingen/fcn_hr18_4x4_512x512_80k_vaihingen_20211231_231216.log.json) | -| FCN | HRNetV2p-W48 | 512x512 | 80000 | 6.20 | 17.25 | 72.50 | 73.52 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb4-80k_vaihingen-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_4x4_512x512_80k_vaihingen/fcn_hr48_4x4_512x512_80k_vaihingen_20211231_231244-7133cb22.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_4x4_512x512_80k_vaihingen/fcn_hr48_4x4_512x512_80k_vaihingen_20211231_231244.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | ------------------ | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| FCN | HRNetV2p-W18-Small | 512x512 | 80000 | 1.58 | 38.11 | V100 | 71.81 | 73.1 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18s_4xb4-80k_vaihingen-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_4x4_512x512_80k_vaihingen/fcn_hr18s_4x4_512x512_80k_vaihingen_20211231_230909-b23aae02.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_4x4_512x512_80k_vaihingen/fcn_hr18s_4x4_512x512_80k_vaihingen_20211231_230909.log.json) | +| FCN | HRNetV2p-W18 | 512x512 | 80000 | 2.76 | 19.55 | V100 | 72.57 | 74.09 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18_4xb4-80k_vaihingen-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_4x4_512x512_80k_vaihingen/fcn_hr18_4x4_512x512_80k_vaihingen_20211231_231216-2ec3ae8a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_4x4_512x512_80k_vaihingen/fcn_hr18_4x4_512x512_80k_vaihingen_20211231_231216.log.json) | +| FCN | HRNetV2p-W48 | 512x512 | 80000 | 6.20 | 17.25 | V100 | 72.50 | 73.52 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb4-80k_vaihingen-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_4x4_512x512_80k_vaihingen/fcn_hr48_4x4_512x512_80k_vaihingen_20211231_231244-7133cb22.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_4x4_512x512_80k_vaihingen/fcn_hr48_4x4_512x512_80k_vaihingen_20211231_231244.log.json) | ### iSAID -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | ------------------ | --------- | ------: | -------- | -------------- | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| FCN | HRNetV2p-W18-Small | 896x896 | 80000 | 4.95 | 13.84 | 62.30 | 62.97 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18s_4xb4-80k_isaid-896x896.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_4x4_896x896_80k_isaid/fcn_hr18s_4x4_896x896_80k_isaid_20220118_001603-3cc0769b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_4x4_896x896_80k_isaid/fcn_hr18s_4x4_896x896_80k_isaid_20220118_001603.log.json) | -| FCN | HRNetV2p-W18 | 896x896 | 80000 | 8.30 | 7.71 | 65.06 | 65.60 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18_4xb4-80k_isaid-896x896.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_4x4_896x896_80k_isaid/fcn_hr18_4x4_896x896_80k_isaid_20220110_182230-49bf752e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_4x4_896x896_80k_isaid/fcn_hr18_4x4_896x896_80k_isaid_20220110_182230.log.json) | -| FCN | HRNetV2p-W48 | 896x896 | 80000 | 16.89 | 7.34 | 67.80 | 68.53 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb4-80k_isaid-896x896.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_4x4_896x896_80k_isaid/fcn_hr48_4x4_896x896_80k_isaid_20220114_174643-547fc420.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_4x4_896x896_80k_isaid/fcn_hr48_4x4_896x896_80k_isaid_20220114_174643.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | ------------------ | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| FCN | HRNetV2p-W18-Small | 896x896 | 80000 | 4.95 | 13.84 | V100 | 62.30 | 62.97 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18s_4xb4-80k_isaid-896x896.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_4x4_896x896_80k_isaid/fcn_hr18s_4x4_896x896_80k_isaid_20220118_001603-3cc0769b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_4x4_896x896_80k_isaid/fcn_hr18s_4x4_896x896_80k_isaid_20220118_001603.log.json) | +| FCN | HRNetV2p-W18 | 896x896 | 80000 | 8.30 | 7.71 | V100 | 65.06 | 65.60 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18_4xb4-80k_isaid-896x896.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_4x4_896x896_80k_isaid/fcn_hr18_4x4_896x896_80k_isaid_20220110_182230-49bf752e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_4x4_896x896_80k_isaid/fcn_hr18_4x4_896x896_80k_isaid_20220110_182230.log.json) | +| FCN | HRNetV2p-W48 | 896x896 | 80000 | 16.89 | 7.34 | V100 | 67.80 | 68.53 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb4-80k_isaid-896x896.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_4x4_896x896_80k_isaid/fcn_hr48_4x4_896x896_80k_isaid_20220114_174643-547fc420.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_4x4_896x896_80k_isaid/fcn_hr48_4x4_896x896_80k_isaid_20220114_174643.log.json) | Note: - `896x896` is the Crop Size of iSAID dataset, which is followed by the implementation of [PointFlow: Flowing Semantics Through Points for Aerial Image Segmentation](https://arxiv.org/pdf/2103.06564.pdf) + +## Citation + +```bibtext +@inproceedings{SunXLW19, + title={Deep High-Resolution Representation Learning for Human Pose Estimation}, + author={Ke Sun and Bin Xiao and Dong Liu and Jingdong Wang}, + booktitle={CVPR}, + year={2019} +} +``` diff --git a/configs/hrnet/hrnet.yml b/configs/hrnet/hrnet.yml deleted file mode 100644 index 77f556e17a..0000000000 --- a/configs/hrnet/hrnet.yml +++ /dev/null @@ -1,695 +0,0 @@ -Models: -- Name: fcn_hr18s_4xb2-40k_cityscapes-512x1024 - In Collection: FCN - Metadata: - backbone: HRNetV2p-W18-Small - crop size: (512,1024) - lr schd: 40000 - inference time (ms/im): - - value: 42.12 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 1.7 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 73.86 - mIoU(ms+flip): 75.91 - Config: configs/hrnet/fcn_hr18s_4xb2-40k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_40k_cityscapes/fcn_hr18s_512x1024_40k_cityscapes_20200601_014216-93db27d0.pth -- Name: fcn_hr18_4xb2-40k_cityscapes-512x1024 - In Collection: FCN - Metadata: - backbone: HRNetV2p-W18 - crop size: (512,1024) - lr schd: 40000 - inference time (ms/im): - - value: 77.1 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 2.9 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 77.19 - mIoU(ms+flip): 78.92 - Config: configs/hrnet/fcn_hr18_4xb2-40k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_40k_cityscapes/fcn_hr18_512x1024_40k_cityscapes_20200601_014216-f196fb4e.pth -- Name: fcn_hr48_4xb2-40k_cityscapes-512x1024 - In Collection: FCN - Metadata: - backbone: HRNetV2p-W48 - crop size: (512,1024) - lr schd: 40000 - inference time (ms/im): - - value: 155.76 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 6.2 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.48 - mIoU(ms+flip): 79.69 - Config: configs/hrnet/fcn_hr48_4xb2-40k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_40k_cityscapes/fcn_hr48_512x1024_40k_cityscapes_20200601_014240-a989b146.pth -- Name: fcn_hr18s_4xb2-80k_cityscapes-512x1024 - In Collection: FCN - Metadata: - backbone: HRNetV2p-W18-Small - crop size: (512,1024) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 75.31 - mIoU(ms+flip): 77.48 - Config: configs/hrnet/fcn_hr18s_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_80k_cityscapes/fcn_hr18s_512x1024_80k_cityscapes_20200601_202700-1462b75d.pth -- Name: fcn_hr18_4xb2-80k_cityscapes-512x1024 - In Collection: FCN - Metadata: - backbone: HRNetV2p-W18 - crop size: (512,1024) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.65 - mIoU(ms+flip): 80.35 - Config: configs/hrnet/fcn_hr18_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_80k_cityscapes/fcn_hr18_512x1024_80k_cityscapes_20200601_223255-4e7b345e.pth -- Name: fcn_hr48_4xb2-80k_cityscapes-512x1024 - In Collection: FCN - Metadata: - backbone: HRNetV2p-W48 - crop size: (512,1024) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.93 - mIoU(ms+flip): 80.72 - Config: configs/hrnet/fcn_hr48_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_80k_cityscapes/fcn_hr48_512x1024_80k_cityscapes_20200601_202606-58ea95d6.pth -- Name: fcn_hr18s_4xb2-160k_cityscapes-512x1024 - In Collection: FCN - Metadata: - backbone: HRNetV2p-W18-Small - crop size: (512,1024) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 76.31 - mIoU(ms+flip): 78.31 - Config: configs/hrnet/fcn_hr18s_4xb2-160k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_160k_cityscapes/fcn_hr18s_512x1024_160k_cityscapes_20200602_190901-4a0797ea.pth -- Name: fcn_hr18_4xb2-160k_cityscapes-512x1024 - In Collection: FCN - Metadata: - backbone: HRNetV2p-W18 - crop size: (512,1024) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.8 - mIoU(ms+flip): 80.74 - Config: configs/hrnet/fcn_hr18_4xb2-160k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_160k_cityscapes/fcn_hr18_512x1024_160k_cityscapes_20200602_190822-221e4a4f.pth -- Name: fcn_hr48_4xb2-160k_cityscapes-512x1024 - In Collection: FCN - Metadata: - backbone: HRNetV2p-W48 - crop size: (512,1024) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 80.65 - mIoU(ms+flip): 81.92 - Config: configs/hrnet/fcn_hr48_4xb2-160k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_160k_cityscapes/fcn_hr48_512x1024_160k_cityscapes_20200602_190946-59b7973e.pth -- Name: fcn_hr18s_4xb4-80k_ade20k-512x512 - In Collection: FCN - Metadata: - backbone: HRNetV2p-W18-Small - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 25.87 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 3.8 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 31.38 - mIoU(ms+flip): 32.45 - Config: configs/hrnet/fcn_hr18s_4xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_80k_ade20k/fcn_hr18s_512x512_80k_ade20k_20200614_144345-77fc814a.pth -- Name: fcn_hr18_4xb4-80k_ade20k-512x512 - In Collection: FCN - Metadata: - backbone: HRNetV2p-W18 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 44.31 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 4.9 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 36.27 - mIoU(ms+flip): 37.28 - Config: configs/hrnet/fcn_hr18_4xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_80k_ade20k/fcn_hr18_512x512_80k_ade20k_20210827_114910-6c9382c0.pth -- Name: fcn_hr48_4xb4-80k_ade20k-512x512 - In Collection: FCN - Metadata: - backbone: HRNetV2p-W48 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 47.1 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 8.2 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 41.9 - mIoU(ms+flip): 43.27 - Config: configs/hrnet/fcn_hr48_4xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_80k_ade20k/fcn_hr48_512x512_80k_ade20k_20200614_193946-7ba5258d.pth -- Name: fcn_hr18s_4xb4-160k_ade20k-512x512 - In Collection: FCN - Metadata: - backbone: HRNetV2p-W18-Small - crop size: (512,512) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 33.07 - mIoU(ms+flip): 34.56 - Config: configs/hrnet/fcn_hr18s_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_160k_ade20k/fcn_hr18s_512x512_160k_ade20k_20210829_174739-f1e7c2e7.pth -- Name: fcn_hr18_4xb4-160k_ade20k-512x512 - In Collection: FCN - Metadata: - backbone: HRNetV2p-W18 - crop size: (512,512) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 36.79 - mIoU(ms+flip): 38.58 - Config: configs/hrnet/fcn_hr18_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_160k_ade20k/fcn_hr18_512x512_160k_ade20k_20200614_214426-ca961836.pth -- Name: fcn_hr48_4xb4-160k_ade20k-512x512 - In Collection: FCN - Metadata: - backbone: HRNetV2p-W48 - crop size: (512,512) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 42.02 - mIoU(ms+flip): 43.86 - Config: configs/hrnet/fcn_hr48_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_160k_ade20k/fcn_hr48_512x512_160k_ade20k_20200614_214407-a52fc02c.pth -- Name: fcn_hr18s_4xb4-20k_voc12aug-512x512 - In Collection: FCN - Metadata: - backbone: HRNetV2p-W18-Small - crop size: (512,512) - lr schd: 20000 - inference time (ms/im): - - value: 23.06 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 1.8 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 65.5 - mIoU(ms+flip): 68.89 - Config: configs/hrnet/fcn_hr18s_4xb4-20k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_20k_voc12aug/fcn_hr18s_512x512_20k_voc12aug_20210829_174910-0aceadb4.pth -- Name: fcn_hr18_4xb4-20k_voc12aug-512x512 - In Collection: FCN - Metadata: - backbone: HRNetV2p-W18 - crop size: (512,512) - lr schd: 20000 - inference time (ms/im): - - value: 42.59 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 2.9 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 72.3 - mIoU(ms+flip): 74.71 - Config: configs/hrnet/fcn_hr18_4xb4-20k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_20k_voc12aug/fcn_hr18_512x512_20k_voc12aug_20200617_224503-488d45f7.pth -- Name: fcn_hr48_4xb4-20k_voc12aug-512x512 - In Collection: FCN - Metadata: - backbone: HRNetV2p-W48 - crop size: (512,512) - lr schd: 20000 - inference time (ms/im): - - value: 45.35 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 6.2 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 75.87 - mIoU(ms+flip): 78.58 - Config: configs/hrnet/fcn_hr48_4xb4-20k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_20k_voc12aug/fcn_hr48_512x512_20k_voc12aug_20200617_224419-89de05cd.pth -- Name: fcn_hr18s_4xb4-40k_voc12aug-512x512 - In Collection: FCN - Metadata: - backbone: HRNetV2p-W18-Small - crop size: (512,512) - lr schd: 40000 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 66.61 - mIoU(ms+flip): 70.0 - Config: configs/hrnet/fcn_hr18s_4xb4-40k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_40k_voc12aug/fcn_hr18s_512x512_40k_voc12aug_20200614_000648-4f8d6e7f.pth -- Name: fcn_hr18_4xb4-40k_voc12aug-512x512 - In Collection: FCN - Metadata: - backbone: HRNetV2p-W18 - crop size: (512,512) - lr schd: 40000 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 72.9 - mIoU(ms+flip): 75.59 - Config: configs/hrnet/fcn_hr18_4xb4-40k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_40k_voc12aug/fcn_hr18_512x512_40k_voc12aug_20200613_224401-1b4b76cd.pth -- Name: fcn_hr48_4xb4-40k_voc12aug-512x512 - In Collection: FCN - Metadata: - backbone: HRNetV2p-W48 - crop size: (512,512) - lr schd: 40000 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 76.24 - mIoU(ms+flip): 78.49 - Config: configs/hrnet/fcn_hr48_4xb4-40k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_40k_voc12aug/fcn_hr48_512x512_40k_voc12aug_20200613_222111-1b0f18bc.pth -- Name: fcn_hr48_4xb4-40k_pascal-context-480x480 - In Collection: FCN - Metadata: - backbone: HRNetV2p-W48 - crop size: (480,480) - lr schd: 40000 - inference time (ms/im): - - value: 112.87 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (480,480) - Training Memory (GB): 6.1 - Results: - - Task: Semantic Segmentation - Dataset: Pascal Context - Metrics: - mIoU: 45.14 - mIoU(ms+flip): 47.42 - Config: configs/hrnet/fcn_hr48_4xb4-40k_pascal-context-480x480.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_40k_pascal_context/fcn_hr48_480x480_40k_pascal_context_20200911_164852-667d00b0.pth -- Name: fcn_hr48_4xb4-80k_pascal-context-480x480 - In Collection: FCN - Metadata: - backbone: HRNetV2p-W48 - crop size: (480,480) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Pascal Context - Metrics: - mIoU: 45.84 - mIoU(ms+flip): 47.84 - Config: configs/hrnet/fcn_hr48_4xb4-80k_pascal-context-480x480.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_80k_pascal_context/fcn_hr48_480x480_80k_pascal_context_20200911_155322-847a6711.pth -- Name: fcn_hr48_4xb4-40k_pascal-context-59-480x480 - In Collection: FCN - Metadata: - backbone: HRNetV2p-W48 - crop size: (480,480) - lr schd: 40000 - Results: - - Task: Semantic Segmentation - Dataset: Pascal Context 59 - Metrics: - mIoU: 50.33 - mIoU(ms+flip): 52.83 - Config: configs/hrnet/fcn_hr48_4xb4-40k_pascal-context-59-480x480.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_40k_pascal_context_59/fcn_hr48_480x480_40k_pascal_context_59_20210410_122738-b808b8b2.pth -- Name: fcn_hr48_4xb4-80k_pascal-context-59-480x480 - In Collection: FCN - Metadata: - backbone: HRNetV2p-W48 - crop size: (480,480) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Pascal Context 59 - Metrics: - mIoU: 51.12 - mIoU(ms+flip): 53.56 - Config: configs/hrnet/fcn_hr48_4xb4-80k_pascal-context-59-480x480.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_80k_pascal_context_59/fcn_hr48_480x480_80k_pascal_context_59_20210411_003240-3ae7081e.pth -- Name: fcn_hr18s_4xb4-80k_loveda-512x512 - In Collection: FCN - Metadata: - backbone: HRNetV2p-W18-Small - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 40.21 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 1.59 - Results: - - Task: Semantic Segmentation - Dataset: LoveDA - Metrics: - mIoU: 49.28 - mIoU(ms+flip): 49.42 - Config: configs/hrnet/fcn_hr18s_4xb4-80k_loveda-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_80k_loveda/fcn_hr18s_512x512_80k_loveda_20211210_203228-60a86a7a.pth -- Name: fcn_hr18_4xb4-80k_loveda-512x512 - In Collection: FCN - Metadata: - backbone: HRNetV2p-W18 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 77.4 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 2.76 - Results: - - Task: Semantic Segmentation - Dataset: LoveDA - Metrics: - mIoU: 50.81 - mIoU(ms+flip): 50.95 - Config: configs/hrnet/fcn_hr18_4xb4-80k_loveda-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_80k_loveda/fcn_hr18_512x512_80k_loveda_20211210_203952-93d9c3b3.pth -- Name: fcn_hr48_4xb4-80k_loveda-512x512 - In Collection: FCN - Metadata: - backbone: HRNetV2p-W48 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 104.06 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 6.2 - Results: - - Task: Semantic Segmentation - Dataset: LoveDA - Metrics: - mIoU: 51.42 - mIoU(ms+flip): 51.64 - Config: configs/hrnet/fcn_hr48_4xb4-80k_loveda-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_80k_loveda/fcn_hr48_512x512_80k_loveda_20211211_044756-67072f55.pth -- Name: fcn_hr18s_4xb4-80k_potsdam-512x512 - In Collection: FCN - Metadata: - backbone: HRNetV2p-W18-Small - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 27.78 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 1.58 - Results: - - Task: Semantic Segmentation - Dataset: Potsdam - Metrics: - mIoU: 77.64 - mIoU(ms+flip): 78.8 - Config: configs/hrnet/fcn_hr18s_4xb4-80k_potsdam-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_80k_potsdam/fcn_hr18s_512x512_80k_potsdam_20211218_205517-ba32af63.pth -- Name: fcn_hr18_4xb4-80k_potsdam-512x512 - In Collection: FCN - Metadata: - backbone: HRNetV2p-W18 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 51.95 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 2.76 - Results: - - Task: Semantic Segmentation - Dataset: Potsdam - Metrics: - mIoU: 78.26 - mIoU(ms+flip): 79.24 - Config: configs/hrnet/fcn_hr18_4xb4-80k_potsdam-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_80k_potsdam/fcn_hr18_512x512_80k_potsdam_20211218_205517-5d0387ad.pth -- Name: fcn_hr48_4xb4-80k_potsdam-512x512 - In Collection: FCN - Metadata: - backbone: HRNetV2p-W48 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 60.9 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 6.2 - Results: - - Task: Semantic Segmentation - Dataset: Potsdam - Metrics: - mIoU: 78.39 - mIoU(ms+flip): 79.34 - Config: configs/hrnet/fcn_hr48_4xb4-80k_potsdam-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_80k_potsdam/fcn_hr48_512x512_80k_potsdam_20211219_020601-97434c78.pth -- Name: fcn_hr18s_4xb4-80k_vaihingen-512x512 - In Collection: FCN - Metadata: - backbone: HRNetV2p-W18-Small - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 26.24 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 1.58 - Results: - - Task: Semantic Segmentation - Dataset: Vaihingen - Metrics: - mIoU: 71.81 - mIoU(ms+flip): 73.1 - Config: configs/hrnet/fcn_hr18s_4xb4-80k_vaihingen-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_4x4_512x512_80k_vaihingen/fcn_hr18s_4x4_512x512_80k_vaihingen_20211231_230909-b23aae02.pth -- Name: fcn_hr18_4xb4-80k_vaihingen-512x512 - In Collection: FCN - Metadata: - backbone: HRNetV2p-W18 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 51.15 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 2.76 - Results: - - Task: Semantic Segmentation - Dataset: Vaihingen - Metrics: - mIoU: 72.57 - mIoU(ms+flip): 74.09 - Config: configs/hrnet/fcn_hr18_4xb4-80k_vaihingen-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_4x4_512x512_80k_vaihingen/fcn_hr18_4x4_512x512_80k_vaihingen_20211231_231216-2ec3ae8a.pth -- Name: fcn_hr48_4xb4-80k_vaihingen-512x512 - In Collection: FCN - Metadata: - backbone: HRNetV2p-W48 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 57.97 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 6.2 - Results: - - Task: Semantic Segmentation - Dataset: Vaihingen - Metrics: - mIoU: 72.5 - mIoU(ms+flip): 73.52 - Config: configs/hrnet/fcn_hr48_4xb4-80k_vaihingen-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_4x4_512x512_80k_vaihingen/fcn_hr48_4x4_512x512_80k_vaihingen_20211231_231244-7133cb22.pth -- Name: fcn_hr18s_4xb4-80k_isaid-896x896 - In Collection: FCN - Metadata: - backbone: HRNetV2p-W18-Small - crop size: (896,896) - lr schd: 80000 - inference time (ms/im): - - value: 72.25 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (896,896) - Training Memory (GB): 4.95 - Results: - - Task: Semantic Segmentation - Dataset: iSAID - Metrics: - mIoU: 62.3 - mIoU(ms+flip): 62.97 - Config: configs/hrnet/fcn_hr18s_4xb4-80k_isaid-896x896.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_4x4_896x896_80k_isaid/fcn_hr18s_4x4_896x896_80k_isaid_20220118_001603-3cc0769b.pth -- Name: fcn_hr18_4xb4-80k_isaid-896x896 - In Collection: FCN - Metadata: - backbone: HRNetV2p-W18 - crop size: (896,896) - lr schd: 80000 - inference time (ms/im): - - value: 129.7 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (896,896) - Training Memory (GB): 8.3 - Results: - - Task: Semantic Segmentation - Dataset: iSAID - Metrics: - mIoU: 65.06 - mIoU(ms+flip): 65.6 - Config: configs/hrnet/fcn_hr18_4xb4-80k_isaid-896x896.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_4x4_896x896_80k_isaid/fcn_hr18_4x4_896x896_80k_isaid_20220110_182230-49bf752e.pth -- Name: fcn_hr48_4xb4-80k_isaid-896x896 - In Collection: FCN - Metadata: - backbone: HRNetV2p-W48 - crop size: (896,896) - lr schd: 80000 - inference time (ms/im): - - value: 136.24 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (896,896) - Training Memory (GB): 16.89 - Results: - - Task: Semantic Segmentation - Dataset: iSAID - Metrics: - mIoU: 67.8 - mIoU(ms+flip): 68.53 - Config: configs/hrnet/fcn_hr48_4xb4-80k_isaid-896x896.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_4x4_896x896_80k_isaid/fcn_hr48_4x4_896x896_80k_isaid_20220114_174643-547fc420.pth diff --git a/configs/hrnet/metafile.yaml b/configs/hrnet/metafile.yaml new file mode 100644 index 0000000000..11c30165a5 --- /dev/null +++ b/configs/hrnet/metafile.yaml @@ -0,0 +1,874 @@ +Models: +- Name: fcn_hr18s_4xb2-40k_cityscapes-512x1024 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 73.86 + mIoU(ms+flip): 75.91 + Config: configs/hrnet/fcn_hr18s_4xb2-40k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - HRNetV2p-W18-Small + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 1.7 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_40k_cityscapes/fcn_hr18s_512x1024_40k_cityscapes_20200601_014216-93db27d0.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_40k_cityscapes/fcn_hr18s_512x1024_40k_cityscapes_20200601_014216.log.json + Paper: + Title: Deep High-Resolution Representation Learning for Human Pose Estimation + URL: https://arxiv.org/abs/1908.07919 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/hrnet.py#L218 + Framework: PyTorch +- Name: fcn_hr18_4xb2-40k_cityscapes-512x1024 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 77.19 + mIoU(ms+flip): 78.92 + Config: configs/hrnet/fcn_hr18_4xb2-40k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - HRNetV2p-W18 + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 2.9 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_40k_cityscapes/fcn_hr18_512x1024_40k_cityscapes_20200601_014216-f196fb4e.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_40k_cityscapes/fcn_hr18_512x1024_40k_cityscapes_20200601_014216.log.json + Paper: + Title: Deep High-Resolution Representation Learning for Human Pose Estimation + URL: https://arxiv.org/abs/1908.07919 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/hrnet.py#L218 + Framework: PyTorch +- Name: fcn_hr48_4xb2-40k_cityscapes-512x1024 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.48 + mIoU(ms+flip): 79.69 + Config: configs/hrnet/fcn_hr48_4xb2-40k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - HRNetV2p-W48 + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 6.2 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_40k_cityscapes/fcn_hr48_512x1024_40k_cityscapes_20200601_014240-a989b146.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_40k_cityscapes/fcn_hr48_512x1024_40k_cityscapes_20200601_014240.log.json + Paper: + Title: Deep High-Resolution Representation Learning for Human Pose Estimation + URL: https://arxiv.org/abs/1908.07919 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/hrnet.py#L218 + Framework: PyTorch +- Name: fcn_hr18s_4xb2-80k_cityscapes-512x1024 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 75.31 + mIoU(ms+flip): 77.48 + Config: configs/hrnet/fcn_hr18s_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - HRNetV2p-W18-Small + - FCN + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_80k_cityscapes/fcn_hr18s_512x1024_80k_cityscapes_20200601_202700-1462b75d.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_80k_cityscapes/fcn_hr18s_512x1024_80k_cityscapes_20200601_202700.log.json + Paper: + Title: Deep High-Resolution Representation Learning for Human Pose Estimation + URL: https://arxiv.org/abs/1908.07919 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/hrnet.py#L218 + Framework: PyTorch +- Name: fcn_hr18_4xb2-80k_cityscapes-512x1024 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.65 + mIoU(ms+flip): 80.35 + Config: configs/hrnet/fcn_hr18_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - HRNetV2p-W18 + - FCN + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_80k_cityscapes/fcn_hr18_512x1024_80k_cityscapes_20200601_223255-4e7b345e.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_80k_cityscapes/fcn_hr18_512x1024_80k_cityscapes_20200601_223255.log.json + Paper: + Title: Deep High-Resolution Representation Learning for Human Pose Estimation + URL: https://arxiv.org/abs/1908.07919 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/hrnet.py#L218 + Framework: PyTorch +- Name: fcn_hr48_4xb2-80k_cityscapes-512x1024 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.93 + mIoU(ms+flip): 80.72 + Config: configs/hrnet/fcn_hr48_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - HRNetV2p-W48 + - FCN + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_80k_cityscapes/fcn_hr48_512x1024_80k_cityscapes_20200601_202606-58ea95d6.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_80k_cityscapes/fcn_hr48_512x1024_80k_cityscapes_20200601_202606.log.json + Paper: + Title: Deep High-Resolution Representation Learning for Human Pose Estimation + URL: https://arxiv.org/abs/1908.07919 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/hrnet.py#L218 + Framework: PyTorch +- Name: fcn_hr18s_4xb2-160k_cityscapes-512x1024 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 76.31 + mIoU(ms+flip): 78.31 + Config: configs/hrnet/fcn_hr18s_4xb2-160k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - HRNetV2p-W18-Small + - FCN + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_160k_cityscapes/fcn_hr18s_512x1024_160k_cityscapes_20200602_190901-4a0797ea.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_160k_cityscapes/fcn_hr18s_512x1024_160k_cityscapes_20200602_190901.log.json + Paper: + Title: Deep High-Resolution Representation Learning for Human Pose Estimation + URL: https://arxiv.org/abs/1908.07919 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/hrnet.py#L218 + Framework: PyTorch +- Name: fcn_hr18_4xb2-160k_cityscapes-512x1024 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.8 + mIoU(ms+flip): 80.74 + Config: configs/hrnet/fcn_hr18_4xb2-160k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - HRNetV2p-W18 + - FCN + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_160k_cityscapes/fcn_hr18_512x1024_160k_cityscapes_20200602_190822-221e4a4f.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_160k_cityscapes/fcn_hr18_512x1024_160k_cityscapes_20200602_190822.log.json + Paper: + Title: Deep High-Resolution Representation Learning for Human Pose Estimation + URL: https://arxiv.org/abs/1908.07919 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/hrnet.py#L218 + Framework: PyTorch +- Name: fcn_hr48_4xb2-160k_cityscapes-512x1024 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 80.65 + mIoU(ms+flip): 81.92 + Config: configs/hrnet/fcn_hr48_4xb2-160k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - HRNetV2p-W48 + - FCN + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_160k_cityscapes/fcn_hr48_512x1024_160k_cityscapes_20200602_190946-59b7973e.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_160k_cityscapes/fcn_hr48_512x1024_160k_cityscapes_20200602_190946.log.json + Paper: + Title: Deep High-Resolution Representation Learning for Human Pose Estimation + URL: https://arxiv.org/abs/1908.07919 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/hrnet.py#L218 + Framework: PyTorch +- Name: fcn_hr18s_4xb4-80k_ade20k-512x512 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 31.38 + mIoU(ms+flip): 32.45 + Config: configs/hrnet/fcn_hr18s_4xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - HRNetV2p-W18-Small + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 3.8 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_80k_ade20k/fcn_hr18s_512x512_80k_ade20k_20200614_144345-77fc814a.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_80k_ade20k/fcn_hr18s_512x512_80k_ade20k_20200614_144345.log.json + Paper: + Title: Deep High-Resolution Representation Learning for Human Pose Estimation + URL: https://arxiv.org/abs/1908.07919 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/hrnet.py#L218 + Framework: PyTorch +- Name: fcn_hr18_4xb4-80k_ade20k-512x512 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 36.27 + mIoU(ms+flip): 37.28 + Config: configs/hrnet/fcn_hr18_4xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - HRNetV2p-W18 + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 4.9 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_80k_ade20k/fcn_hr18_512x512_80k_ade20k_20210827_114910-6c9382c0.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_80k_ade20k/fcn_hr18_512x512_80k_ade20k_20210827_114910.log.json + Paper: + Title: Deep High-Resolution Representation Learning for Human Pose Estimation + URL: https://arxiv.org/abs/1908.07919 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/hrnet.py#L218 + Framework: PyTorch +- Name: fcn_hr48_4xb4-80k_ade20k-512x512 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 41.9 + mIoU(ms+flip): 43.27 + Config: configs/hrnet/fcn_hr48_4xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - HRNetV2p-W48 + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 8.2 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_80k_ade20k/fcn_hr48_512x512_80k_ade20k_20200614_193946-7ba5258d.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_80k_ade20k/fcn_hr48_512x512_80k_ade20k_20200614_193946.log.json + Paper: + Title: Deep High-Resolution Representation Learning for Human Pose Estimation + URL: https://arxiv.org/abs/1908.07919 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/hrnet.py#L218 + Framework: PyTorch +- Name: fcn_hr18s_4xb4-160k_ade20k-512x512 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 33.07 + mIoU(ms+flip): 34.56 + Config: configs/hrnet/fcn_hr18s_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - HRNetV2p-W18-Small + - FCN + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_160k_ade20k/fcn_hr18s_512x512_160k_ade20k_20210829_174739-f1e7c2e7.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_160k_ade20k/fcn_hr18s_512x512_160k_ade20k_20210829_174739.log.json + Paper: + Title: Deep High-Resolution Representation Learning for Human Pose Estimation + URL: https://arxiv.org/abs/1908.07919 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/hrnet.py#L218 + Framework: PyTorch +- Name: fcn_hr18_4xb4-160k_ade20k-512x512 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 36.79 + mIoU(ms+flip): 38.58 + Config: configs/hrnet/fcn_hr18_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - HRNetV2p-W18 + - FCN + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_160k_ade20k/fcn_hr18_512x512_160k_ade20k_20200614_214426-ca961836.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_160k_ade20k/fcn_hr18_512x512_160k_ade20k_20200614_214426.log.json + Paper: + Title: Deep High-Resolution Representation Learning for Human Pose Estimation + URL: https://arxiv.org/abs/1908.07919 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/hrnet.py#L218 + Framework: PyTorch +- Name: fcn_hr48_4xb4-160k_ade20k-512x512 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 42.02 + mIoU(ms+flip): 43.86 + Config: configs/hrnet/fcn_hr48_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - HRNetV2p-W48 + - FCN + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_160k_ade20k/fcn_hr48_512x512_160k_ade20k_20200614_214407-a52fc02c.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_160k_ade20k/fcn_hr48_512x512_160k_ade20k_20200614_214407.log.json + Paper: + Title: Deep High-Resolution Representation Learning for Human Pose Estimation + URL: https://arxiv.org/abs/1908.07919 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/hrnet.py#L218 + Framework: PyTorch +- Name: fcn_hr18s_4xb4-20k_voc12aug-512x512 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 65.5 + mIoU(ms+flip): 68.89 + Config: configs/hrnet/fcn_hr18s_4xb4-20k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - HRNetV2p-W18-Small + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 1.8 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_20k_voc12aug/fcn_hr18s_512x512_20k_voc12aug_20210829_174910-0aceadb4.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_20k_voc12aug/fcn_hr18s_512x512_20k_voc12aug_20210829_174910.log.json + Paper: + Title: Deep High-Resolution Representation Learning for Human Pose Estimation + URL: https://arxiv.org/abs/1908.07919 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/hrnet.py#L218 + Framework: PyTorch +- Name: fcn_hr18_4xb4-20k_voc12aug-512x512 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 72.3 + mIoU(ms+flip): 74.71 + Config: configs/hrnet/fcn_hr18_4xb4-20k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - HRNetV2p-W18 + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 2.9 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_20k_voc12aug/fcn_hr18_512x512_20k_voc12aug_20200617_224503-488d45f7.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_20k_voc12aug/fcn_hr18_512x512_20k_voc12aug_20200617_224503.log.json + Paper: + Title: Deep High-Resolution Representation Learning for Human Pose Estimation + URL: https://arxiv.org/abs/1908.07919 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/hrnet.py#L218 + Framework: PyTorch +- Name: fcn_hr48_4xb4-20k_voc12aug-512x512 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 75.87 + mIoU(ms+flip): 78.58 + Config: configs/hrnet/fcn_hr48_4xb4-20k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - HRNetV2p-W48 + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 6.2 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_20k_voc12aug/fcn_hr48_512x512_20k_voc12aug_20200617_224419-89de05cd.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_20k_voc12aug/fcn_hr48_512x512_20k_voc12aug_20200617_224419.log.json + Paper: + Title: Deep High-Resolution Representation Learning for Human Pose Estimation + URL: https://arxiv.org/abs/1908.07919 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/hrnet.py#L218 + Framework: PyTorch +- Name: fcn_hr18s_4xb4-40k_voc12aug-512x512 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 66.61 + mIoU(ms+flip): 70.0 + Config: configs/hrnet/fcn_hr18s_4xb4-40k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - HRNetV2p-W18-Small + - FCN + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_40k_voc12aug/fcn_hr18s_512x512_40k_voc12aug_20200614_000648-4f8d6e7f.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_40k_voc12aug/fcn_hr18s_512x512_40k_voc12aug_20200614_000648.log.json + Paper: + Title: Deep High-Resolution Representation Learning for Human Pose Estimation + URL: https://arxiv.org/abs/1908.07919 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/hrnet.py#L218 + Framework: PyTorch +- Name: fcn_hr18_4xb4-40k_voc12aug-512x512 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 72.9 + mIoU(ms+flip): 75.59 + Config: configs/hrnet/fcn_hr18_4xb4-40k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - HRNetV2p-W18 + - FCN + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_40k_voc12aug/fcn_hr18_512x512_40k_voc12aug_20200613_224401-1b4b76cd.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_40k_voc12aug/fcn_hr18_512x512_40k_voc12aug_20200613_224401.log.json + Paper: + Title: Deep High-Resolution Representation Learning for Human Pose Estimation + URL: https://arxiv.org/abs/1908.07919 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/hrnet.py#L218 + Framework: PyTorch +- Name: fcn_hr48_4xb4-40k_voc12aug-512x512 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 76.24 + mIoU(ms+flip): 78.49 + Config: configs/hrnet/fcn_hr48_4xb4-40k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - HRNetV2p-W48 + - FCN + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_40k_voc12aug/fcn_hr48_512x512_40k_voc12aug_20200613_222111-1b0f18bc.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_40k_voc12aug/fcn_hr48_512x512_40k_voc12aug_20200613_222111.log.json + Paper: + Title: Deep High-Resolution Representation Learning for Human Pose Estimation + URL: https://arxiv.org/abs/1908.07919 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/hrnet.py#L218 + Framework: PyTorch +- Name: fcn_hr48_4xb4-40k_pascal-context-480x480 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Pascal Context + Metrics: + mIoU: 45.14 + mIoU(ms+flip): 47.42 + Config: configs/hrnet/fcn_hr48_4xb4-40k_pascal-context-480x480.py + Metadata: + Training Data: Pascal Context + Batch Size: 16 + Architecture: + - HRNetV2p-W48 + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 6.1 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_40k_pascal_context/fcn_hr48_480x480_40k_pascal_context_20200911_164852-667d00b0.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_40k_pascal_context/fcn_hr48_480x480_40k_pascal_context-20200911_164852.log.json + Paper: + Title: Deep High-Resolution Representation Learning for Human Pose Estimation + URL: https://arxiv.org/abs/1908.07919 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/hrnet.py#L218 + Framework: PyTorch +- Name: fcn_hr48_4xb4-80k_pascal-context-480x480 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Pascal Context + Metrics: + mIoU: 45.84 + mIoU(ms+flip): 47.84 + Config: configs/hrnet/fcn_hr48_4xb4-80k_pascal-context-480x480.py + Metadata: + Training Data: Pascal Context + Batch Size: 16 + Architecture: + - HRNetV2p-W48 + - FCN + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_80k_pascal_context/fcn_hr48_480x480_80k_pascal_context_20200911_155322-847a6711.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_80k_pascal_context/fcn_hr48_480x480_80k_pascal_context-20200911_155322.log.json + Paper: + Title: Deep High-Resolution Representation Learning for Human Pose Estimation + URL: https://arxiv.org/abs/1908.07919 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/hrnet.py#L218 + Framework: PyTorch +- Name: fcn_hr48_4xb4-40k_pascal-context-59-480x480 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Pascal Context 59 + Metrics: + mIoU: 50.33 + mIoU(ms+flip): 52.83 + Config: configs/hrnet/fcn_hr48_4xb4-40k_pascal-context-59-480x480.py + Metadata: + Training Data: Pascal Context 59 + Batch Size: 16 + Architecture: + - HRNetV2p-W48 + - FCN + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_40k_pascal_context_59/fcn_hr48_480x480_40k_pascal_context_59_20210410_122738-b808b8b2.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_40k_pascal_context_59/fcn_hr48_480x480_40k_pascal_context_59-20210410_122738.log.json + Paper: + Title: Deep High-Resolution Representation Learning for Human Pose Estimation + URL: https://arxiv.org/abs/1908.07919 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/hrnet.py#L218 + Framework: PyTorch +- Name: fcn_hr48_4xb4-80k_pascal-context-59-480x480 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Pascal Context 59 + Metrics: + mIoU: 51.12 + mIoU(ms+flip): 53.56 + Config: configs/hrnet/fcn_hr48_4xb4-80k_pascal-context-59-480x480.py + Metadata: + Training Data: Pascal Context 59 + Batch Size: 16 + Architecture: + - HRNetV2p-W48 + - FCN + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_80k_pascal_context_59/fcn_hr48_480x480_80k_pascal_context_59_20210411_003240-3ae7081e.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_80k_pascal_context_59/fcn_hr48_480x480_80k_pascal_context_59-20210411_003240.log.json + Paper: + Title: Deep High-Resolution Representation Learning for Human Pose Estimation + URL: https://arxiv.org/abs/1908.07919 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/hrnet.py#L218 + Framework: PyTorch +- Name: fcn_hr18s_4xb4-80k_loveda-512x512 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: LoveDA + Metrics: + mIoU: 49.28 + mIoU(ms+flip): 49.42 + Config: configs/hrnet/fcn_hr18s_4xb4-80k_loveda-512x512.py + Metadata: + Training Data: LoveDA + Batch Size: 16 + Architecture: + - HRNetV2p-W18-Small + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 1.59 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_80k_loveda/fcn_hr18s_512x512_80k_loveda_20211210_203228-60a86a7a.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_80k_loveda/fcn_hr18s_512x512_80k_loveda_20211210_203228.log.json + Paper: + Title: Deep High-Resolution Representation Learning for Human Pose Estimation + URL: https://arxiv.org/abs/1908.07919 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/hrnet.py#L218 + Framework: PyTorch +- Name: fcn_hr18_4xb4-80k_loveda-512x512 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: LoveDA + Metrics: + mIoU: 50.81 + mIoU(ms+flip): 50.95 + Config: configs/hrnet/fcn_hr18_4xb4-80k_loveda-512x512.py + Metadata: + Training Data: LoveDA + Batch Size: 16 + Architecture: + - HRNetV2p-W18 + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 2.76 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_80k_loveda/fcn_hr18_512x512_80k_loveda_20211210_203952-93d9c3b3.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_80k_loveda/fcn_hr18_512x512_80k_loveda_20211210_203952.log.json + Paper: + Title: Deep High-Resolution Representation Learning for Human Pose Estimation + URL: https://arxiv.org/abs/1908.07919 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/hrnet.py#L218 + Framework: PyTorch +- Name: fcn_hr48_4xb4-80k_loveda-512x512 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: LoveDA + Metrics: + mIoU: 51.42 + mIoU(ms+flip): 51.64 + Config: configs/hrnet/fcn_hr48_4xb4-80k_loveda-512x512.py + Metadata: + Training Data: LoveDA + Batch Size: 16 + Architecture: + - HRNetV2p-W48 + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 6.2 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_80k_loveda/fcn_hr48_512x512_80k_loveda_20211211_044756-67072f55.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_80k_loveda/fcn_hr48_512x512_80k_loveda_20211211_044756.log.json + Paper: + Title: Deep High-Resolution Representation Learning for Human Pose Estimation + URL: https://arxiv.org/abs/1908.07919 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/hrnet.py#L218 + Framework: PyTorch +- Name: fcn_hr18s_4xb4-80k_potsdam-512x512 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Potsdam + Metrics: + mIoU: 77.64 + mIoU(ms+flip): 78.8 + Config: configs/hrnet/fcn_hr18s_4xb4-80k_potsdam-512x512.py + Metadata: + Training Data: Potsdam + Batch Size: 16 + Architecture: + - HRNetV2p-W18-Small + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 1.58 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_80k_potsdam/fcn_hr18s_512x512_80k_potsdam_20211218_205517-ba32af63.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_80k_potsdam/fcn_hr18s_512x512_80k_potsdam_20211218_205517.log.json + Paper: + Title: Deep High-Resolution Representation Learning for Human Pose Estimation + URL: https://arxiv.org/abs/1908.07919 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/hrnet.py#L218 + Framework: PyTorch +- Name: fcn_hr18_4xb4-80k_potsdam-512x512 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Potsdam + Metrics: + mIoU: 78.26 + mIoU(ms+flip): 79.24 + Config: configs/hrnet/fcn_hr18_4xb4-80k_potsdam-512x512.py + Metadata: + Training Data: Potsdam + Batch Size: 16 + Architecture: + - HRNetV2p-W18 + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 2.76 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_80k_potsdam/fcn_hr18_512x512_80k_potsdam_20211218_205517-5d0387ad.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_80k_potsdam/fcn_hr18_512x512_80k_potsdam_20211218_205517.log.json + Paper: + Title: Deep High-Resolution Representation Learning for Human Pose Estimation + URL: https://arxiv.org/abs/1908.07919 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/hrnet.py#L218 + Framework: PyTorch +- Name: fcn_hr48_4xb4-80k_potsdam-512x512 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Potsdam + Metrics: + mIoU: 78.39 + mIoU(ms+flip): 79.34 + Config: configs/hrnet/fcn_hr48_4xb4-80k_potsdam-512x512.py + Metadata: + Training Data: Potsdam + Batch Size: 16 + Architecture: + - HRNetV2p-W48 + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 6.2 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_80k_potsdam/fcn_hr48_512x512_80k_potsdam_20211219_020601-97434c78.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_80k_potsdam/fcn_hr48_512x512_80k_potsdam_20211219_020601.log.json + Paper: + Title: Deep High-Resolution Representation Learning for Human Pose Estimation + URL: https://arxiv.org/abs/1908.07919 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/hrnet.py#L218 + Framework: PyTorch +- Name: fcn_hr18s_4xb4-80k_vaihingen-512x512 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Vaihingen + Metrics: + mIoU: 71.81 + mIoU(ms+flip): 73.1 + Config: configs/hrnet/fcn_hr18s_4xb4-80k_vaihingen-512x512.py + Metadata: + Training Data: Vaihingen + Batch Size: 16 + Architecture: + - HRNetV2p-W18-Small + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 1.58 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_4x4_512x512_80k_vaihingen/fcn_hr18s_4x4_512x512_80k_vaihingen_20211231_230909-b23aae02.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_4x4_512x512_80k_vaihingen/fcn_hr18s_4x4_512x512_80k_vaihingen_20211231_230909.log.json + Paper: + Title: Deep High-Resolution Representation Learning for Human Pose Estimation + URL: https://arxiv.org/abs/1908.07919 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/hrnet.py#L218 + Framework: PyTorch +- Name: fcn_hr18_4xb4-80k_vaihingen-512x512 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Vaihingen + Metrics: + mIoU: 72.57 + mIoU(ms+flip): 74.09 + Config: configs/hrnet/fcn_hr18_4xb4-80k_vaihingen-512x512.py + Metadata: + Training Data: Vaihingen + Batch Size: 16 + Architecture: + - HRNetV2p-W18 + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 2.76 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_4x4_512x512_80k_vaihingen/fcn_hr18_4x4_512x512_80k_vaihingen_20211231_231216-2ec3ae8a.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_4x4_512x512_80k_vaihingen/fcn_hr18_4x4_512x512_80k_vaihingen_20211231_231216.log.json + Paper: + Title: Deep High-Resolution Representation Learning for Human Pose Estimation + URL: https://arxiv.org/abs/1908.07919 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/hrnet.py#L218 + Framework: PyTorch +- Name: fcn_hr48_4xb4-80k_vaihingen-512x512 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Vaihingen + Metrics: + mIoU: 72.5 + mIoU(ms+flip): 73.52 + Config: configs/hrnet/fcn_hr48_4xb4-80k_vaihingen-512x512.py + Metadata: + Training Data: Vaihingen + Batch Size: 16 + Architecture: + - HRNetV2p-W48 + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 6.2 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_4x4_512x512_80k_vaihingen/fcn_hr48_4x4_512x512_80k_vaihingen_20211231_231244-7133cb22.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_4x4_512x512_80k_vaihingen/fcn_hr48_4x4_512x512_80k_vaihingen_20211231_231244.log.json + Paper: + Title: Deep High-Resolution Representation Learning for Human Pose Estimation + URL: https://arxiv.org/abs/1908.07919 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/hrnet.py#L218 + Framework: PyTorch +- Name: fcn_hr18s_4xb4-80k_isaid-896x896 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: iSAID + Metrics: + mIoU: 62.3 + mIoU(ms+flip): 62.97 + Config: configs/hrnet/fcn_hr18s_4xb4-80k_isaid-896x896.py + Metadata: + Training Data: iSAID + Batch Size: 16 + Architecture: + - HRNetV2p-W18-Small + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 4.95 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_4x4_896x896_80k_isaid/fcn_hr18s_4x4_896x896_80k_isaid_20220118_001603-3cc0769b.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_4x4_896x896_80k_isaid/fcn_hr18s_4x4_896x896_80k_isaid_20220118_001603.log.json + Paper: + Title: Deep High-Resolution Representation Learning for Human Pose Estimation + URL: https://arxiv.org/abs/1908.07919 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/hrnet.py#L218 + Framework: PyTorch +- Name: fcn_hr18_4xb4-80k_isaid-896x896 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: iSAID + Metrics: + mIoU: 65.06 + mIoU(ms+flip): 65.6 + Config: configs/hrnet/fcn_hr18_4xb4-80k_isaid-896x896.py + Metadata: + Training Data: iSAID + Batch Size: 16 + Architecture: + - HRNetV2p-W18 + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 8.3 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_4x4_896x896_80k_isaid/fcn_hr18_4x4_896x896_80k_isaid_20220110_182230-49bf752e.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_4x4_896x896_80k_isaid/fcn_hr18_4x4_896x896_80k_isaid_20220110_182230.log.json + Paper: + Title: Deep High-Resolution Representation Learning for Human Pose Estimation + URL: https://arxiv.org/abs/1908.07919 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/hrnet.py#L218 + Framework: PyTorch +- Name: fcn_hr48_4xb4-80k_isaid-896x896 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: iSAID + Metrics: + mIoU: 67.8 + mIoU(ms+flip): 68.53 + Config: configs/hrnet/fcn_hr48_4xb4-80k_isaid-896x896.py + Metadata: + Training Data: iSAID + Batch Size: 16 + Architecture: + - HRNetV2p-W48 + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 16.89 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_4x4_896x896_80k_isaid/fcn_hr48_4x4_896x896_80k_isaid_20220114_174643-547fc420.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_4x4_896x896_80k_isaid/fcn_hr48_4x4_896x896_80k_isaid_20220114_174643.log.json + Paper: + Title: Deep High-Resolution Representation Learning for Human Pose Estimation + URL: https://arxiv.org/abs/1908.07919 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/hrnet.py#L218 + Framework: PyTorch diff --git a/configs/icnet/README.md b/configs/icnet/README.md index 134f53b29f..2b58c2eed8 100644 --- a/configs/icnet/README.md +++ b/configs/icnet/README.md @@ -1,6 +1,6 @@ # ICNet -[ICNet for Real-time Semantic Segmentation on High-resolution Images](https://arxiv.org/abs/1704.08545) +> [ICNet for Real-time Semantic Segmentation on High-resolution Images](https://arxiv.org/abs/1704.08545) ## Introduction @@ -22,6 +22,27 @@ We focus on the challenging task of real-time semantic segmentation in this pape +## Results and models + +### Cityscapes + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| ICNet | R-18-D8 | 832x832 | 80000 | 1.70 | 27.12 | V100 | 68.14 | 70.16 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/icnet/icnet_r18-d8_4xb2-80k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_832x832_80k_cityscapes/icnet_r18-d8_832x832_80k_cityscapes_20210925_225521-2e36638d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_832x832_80k_cityscapes/icnet_r18-d8_832x832_80k_cityscapes_20210925_225521.log.json) | +| ICNet | R-18-D8 | 832x832 | 160000 | - | - | V100 | 71.64 | 74.18 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/icnet/icnet_r18-d8_4xb2-160k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_832x832_160k_cityscapes/icnet_r18-d8_832x832_160k_cityscapes_20210925_230153-2c6eb6e0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_832x832_160k_cityscapes/icnet_r18-d8_832x832_160k_cityscapes_20210925_230153.log.json) | +| ICNet (in1k-pre) | R-18-D8 | 832x832 | 80000 | - | - | V100 | 72.51 | 74.78 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/icnet/icnet_r18-d8-in1k-pre_4xb2-80k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_in1k-pre_832x832_80k_cityscapes/icnet_r18-d8_in1k-pre_832x832_80k_cityscapes_20210925_230354-1cbe3022.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_in1k-pre_832x832_80k_cityscapes/icnet_r18-d8_in1k-pre_832x832_80k_cityscapes_20210925_230354.log.json) | +| ICNet (in1k-pre) | R-18-D8 | 832x832 | 160000 | - | - | V100 | 74.43 | 76.72 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/icnet/icnet_r18-d8-in1k-pre_4xb2-160k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_in1k-pre_832x832_160k_cityscapes/icnet_r18-d8_in1k-pre_832x832_160k_cityscapes_20210926_052702-619c8ae1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_in1k-pre_832x832_160k_cityscapes/icnet_r18-d8_in1k-pre_832x832_160k_cityscapes_20210926_052702.log.json) | +| ICNet | R-50-D8 | 832x832 | 80000 | 2.53 | 20.08 | V100 | 68.91 | 69.72 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/icnet/icnet_r50-d8_4xb2-80k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_832x832_80k_cityscapes/icnet_r50-d8_832x832_80k_cityscapes_20210926_044625-c6407341.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_832x832_80k_cityscapes/icnet_r50-d8_832x832_80k_cityscapes_20210926_044625.log.json) | +| ICNet | R-50-D8 | 832x832 | 160000 | - | - | V100 | 73.82 | 75.67 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/icnet/icnet_r50-d8_4xb2-160k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_832x832_160k_cityscapes/icnet_r50-d8_832x832_160k_cityscapes_20210925_232612-a95f0d4e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_832x832_160k_cityscapes/icnet_r50-d8_832x832_160k_cityscapes_20210925_232612.log.json) | +| ICNet (in1k-pre) | R-50-D8 | 832x832 | 80000 | - | - | V100 | 74.58 | 76.41 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/icnet/icnet_r50-d8-in1k-pre_4xb2-80k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_in1k-pre_832x832_80k_cityscapes/icnet_r50-d8_in1k-pre_832x832_80k_cityscapes_20210926_032943-1743dc7b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_in1k-pre_832x832_80k_cityscapes/icnet_r50-d8_in1k-pre_832x832_80k_cityscapes_20210926_032943.log.json) | +| ICNet (in1k-pre) | R-50-D8 | 832x832 | 160000 | - | - | V100 | 76.29 | 78.09 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/icnet/icnet_r50-d8-in1k-pre_4xb2-160k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_in1k-pre_832x832_160k_cityscapes/icnet_r50-d8_in1k-pre_832x832_160k_cityscapes_20210926_042715-ce310aea.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_in1k-pre_832x832_160k_cityscapes/icnet_r50-d8_in1k-pre_832x832_160k_cityscapes_20210926_042715.log.json) | +| ICNet | R-101-D8 | 832x832 | 80000 | 3.08 | 16.95 | V100 | 70.28 | 71.95 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/icnet/icnet_r101-d8_4xb2-80k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_832x832_80k_cityscapes/icnet_r101-d8_832x832_80k_cityscapes_20210926_072447-b52f936e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_832x832_80k_cityscapes/icnet_r101-d8_832x832_80k_cityscapes_20210926_072447.log.json) | +| ICNet | R-101-D8 | 832x832 | 160000 | - | - | V100 | 73.80 | 76.10 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/icnet/icnet_r101-d8_4xb2-160k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_832x832_160k_cityscapes/icnet_r101-d8_832x832_160k_cityscapes_20210926_092350-3a1ebf1a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_832x832_160k_cityscapes/icnet_r101-d8_832x832_160k_cityscapes_20210926_092350.log.json) | +| ICNet (in1k-pre) | R-101-D8 | 832x832 | 80000 | - | - | V100 | 75.57 | 77.86 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/icnet/icnet_r101-d8-in1k-pre_4xb2-80k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_in1k-pre_832x832_80k_cityscapes/icnet_r101-d8_in1k-pre_832x832_80k_cityscapes_20210926_020414-7ceb12c5.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_in1k-pre_832x832_80k_cityscapes/icnet_r101-d8_in1k-pre_832x832_80k_cityscapes_20210926_020414.log.json) | +| ICNet (in1k-pre) | R-101-D8 | 832x832 | 160000 | - | - | V100 | 76.15 | 77.98 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/icnet/icnet_r101-d8-in1k-pre_4xb2-160k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_in1k-pre_832x832_160k_cityscapes/icnet_r101-d8_in1k-pre_832x832_160k_cityscapes_20210925_232612-9484ae8a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_in1k-pre_832x832_160k_cityscapes/icnet_r101-d8_in1k-pre_832x832_160k_cityscapes_20210925_232612.log.json) | + +Note: `in1k-pre` means pretrained model is used. + ## Citation ```bibtext @@ -33,24 +54,3 @@ We focus on the challenging task of real-time semantic segmentation in this pape year={2018} } ``` - -## Results and models - -### Cityscapes - -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ---------------- | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| ICNet | R-18-D8 | 832x832 | 80000 | 1.70 | 27.12 | 68.14 | 70.16 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/icnet/icnet_r18-d8_4xb2-80k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_832x832_80k_cityscapes/icnet_r18-d8_832x832_80k_cityscapes_20210925_225521-2e36638d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_832x832_80k_cityscapes/icnet_r18-d8_832x832_80k_cityscapes_20210925_225521.log.json) | -| ICNet | R-18-D8 | 832x832 | 160000 | - | - | 71.64 | 74.18 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/icnet/icnet_r18-d8_4xb2-160k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_832x832_160k_cityscapes/icnet_r18-d8_832x832_160k_cityscapes_20210925_230153-2c6eb6e0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_832x832_160k_cityscapes/icnet_r18-d8_832x832_160k_cityscapes_20210925_230153.log.json) | -| ICNet (in1k-pre) | R-18-D8 | 832x832 | 80000 | - | - | 72.51 | 74.78 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/icnet/icnet_r18-d8-in1k-pre_4xb2-80k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_in1k-pre_832x832_80k_cityscapes/icnet_r18-d8_in1k-pre_832x832_80k_cityscapes_20210925_230354-1cbe3022.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_in1k-pre_832x832_80k_cityscapes/icnet_r18-d8_in1k-pre_832x832_80k_cityscapes_20210925_230354.log.json) | -| ICNet (in1k-pre) | R-18-D8 | 832x832 | 160000 | - | - | 74.43 | 76.72 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/icnet/icnet_r18-d8-in1k-pre_4xb2-160k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_in1k-pre_832x832_160k_cityscapes/icnet_r18-d8_in1k-pre_832x832_160k_cityscapes_20210926_052702-619c8ae1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_in1k-pre_832x832_160k_cityscapes/icnet_r18-d8_in1k-pre_832x832_160k_cityscapes_20210926_052702.log.json) | -| ICNet | R-50-D8 | 832x832 | 80000 | 2.53 | 20.08 | 68.91 | 69.72 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/icnet/icnet_r50-d8_4xb2-80k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_832x832_80k_cityscapes/icnet_r50-d8_832x832_80k_cityscapes_20210926_044625-c6407341.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_832x832_80k_cityscapes/icnet_r50-d8_832x832_80k_cityscapes_20210926_044625.log.json) | -| ICNet | R-50-D8 | 832x832 | 160000 | - | - | 73.82 | 75.67 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/icnet/icnet_r50-d8_4xb2-160k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_832x832_160k_cityscapes/icnet_r50-d8_832x832_160k_cityscapes_20210925_232612-a95f0d4e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_832x832_160k_cityscapes/icnet_r50-d8_832x832_160k_cityscapes_20210925_232612.log.json) | -| ICNet (in1k-pre) | R-50-D8 | 832x832 | 80000 | - | - | 74.58 | 76.41 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/icnet/icnet_r50-d8-in1k-pre_4xb2-80k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_in1k-pre_832x832_80k_cityscapes/icnet_r50-d8_in1k-pre_832x832_80k_cityscapes_20210926_032943-1743dc7b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_in1k-pre_832x832_80k_cityscapes/icnet_r50-d8_in1k-pre_832x832_80k_cityscapes_20210926_032943.log.json) | -| ICNet (in1k-pre) | R-50-D8 | 832x832 | 160000 | - | - | 76.29 | 78.09 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/icnet/icnet_r50-d8-in1k-pre_4xb2-160k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_in1k-pre_832x832_160k_cityscapes/icnet_r50-d8_in1k-pre_832x832_160k_cityscapes_20210926_042715-ce310aea.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_in1k-pre_832x832_160k_cityscapes/icnet_r50-d8_in1k-pre_832x832_160k_cityscapes_20210926_042715.log.json) | -| ICNet | R-101-D8 | 832x832 | 80000 | 3.08 | 16.95 | 70.28 | 71.95 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/icnet/icnet_r101-d8_4xb2-80k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_832x832_80k_cityscapes/icnet_r101-d8_832x832_80k_cityscapes_20210926_072447-b52f936e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_832x832_80k_cityscapes/icnet_r101-d8_832x832_80k_cityscapes_20210926_072447.log.json) | -| ICNet | R-101-D8 | 832x832 | 160000 | - | - | 73.80 | 76.10 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/icnet/icnet_r101-d8_4xb2-160k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_832x832_160k_cityscapes/icnet_r101-d8_832x832_160k_cityscapes_20210926_092350-3a1ebf1a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_832x832_160k_cityscapes/icnet_r101-d8_832x832_160k_cityscapes_20210926_092350.log.json) | -| ICNet (in1k-pre) | R-101-D8 | 832x832 | 80000 | - | - | 75.57 | 77.86 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/icnet/icnet_r101-d8-in1k-pre_4xb2-80k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_in1k-pre_832x832_80k_cityscapes/icnet_r101-d8_in1k-pre_832x832_80k_cityscapes_20210926_020414-7ceb12c5.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_in1k-pre_832x832_80k_cityscapes/icnet_r101-d8_in1k-pre_832x832_80k_cityscapes_20210926_020414.log.json) | -| ICNet (in1k-pre) | R-101-D8 | 832x832 | 160000 | - | - | 76.15 | 77.98 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/icnet/icnet_r101-d8-in1k-pre_4xb2-160k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_in1k-pre_832x832_160k_cityscapes/icnet_r101-d8_in1k-pre_832x832_160k_cityscapes_20210925_232612-9484ae8a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_in1k-pre_832x832_160k_cityscapes/icnet_r101-d8_in1k-pre_832x832_160k_cityscapes_20210925_232612.log.json) | - -Note: `in1k-pre` means pretrained model is used. diff --git a/configs/icnet/icnet.yml b/configs/icnet/icnet.yml deleted file mode 100644 index 5ded544726..0000000000 --- a/configs/icnet/icnet.yml +++ /dev/null @@ -1,207 +0,0 @@ -Collections: -- Name: ICNet - Metadata: - Training Data: - - Cityscapes - Paper: - URL: https://arxiv.org/abs/1704.08545 - Title: ICNet for Real-time Semantic Segmentation on High-resolution Images - README: configs/icnet/README.md - Code: - URL: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/necks/ic_neck.py#L77 - Version: v0.18.0 - Converted From: - Code: https://github.com/hszhao/ICNet -Models: -- Name: icnet_r18-d8_4xb2-80k_cityscapes-832x832 - In Collection: ICNet - Metadata: - backbone: R-18-D8 - crop size: (832,832) - lr schd: 80000 - inference time (ms/im): - - value: 36.87 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (832,832) - Training Memory (GB): 1.7 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 68.14 - mIoU(ms+flip): 70.16 - Config: configs/icnet/icnet_r18-d8_4xb2-80k_cityscapes-832x832.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_832x832_80k_cityscapes/icnet_r18-d8_832x832_80k_cityscapes_20210925_225521-2e36638d.pth -- Name: icnet_r18-d8_4xb2-160k_cityscapes-832x832 - In Collection: ICNet - Metadata: - backbone: R-18-D8 - crop size: (832,832) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 71.64 - mIoU(ms+flip): 74.18 - Config: configs/icnet/icnet_r18-d8_4xb2-160k_cityscapes-832x832.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_832x832_160k_cityscapes/icnet_r18-d8_832x832_160k_cityscapes_20210925_230153-2c6eb6e0.pth -- Name: icnet_r18-d8-in1k-pre_4xb2-80k_cityscapes-832x832 - In Collection: ICNet - Metadata: - backbone: R-18-D8 - crop size: (832,832) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 72.51 - mIoU(ms+flip): 74.78 - Config: configs/icnet/icnet_r18-d8-in1k-pre_4xb2-80k_cityscapes-832x832.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_in1k-pre_832x832_80k_cityscapes/icnet_r18-d8_in1k-pre_832x832_80k_cityscapes_20210925_230354-1cbe3022.pth -- Name: icnet_r18-d8-in1k-pre_4xb2-160k_cityscapes-832x832 - In Collection: ICNet - Metadata: - backbone: R-18-D8 - crop size: (832,832) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 74.43 - mIoU(ms+flip): 76.72 - Config: configs/icnet/icnet_r18-d8-in1k-pre_4xb2-160k_cityscapes-832x832.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_in1k-pre_832x832_160k_cityscapes/icnet_r18-d8_in1k-pre_832x832_160k_cityscapes_20210926_052702-619c8ae1.pth -- Name: icnet_r50-d8_4xb2-80k_cityscapes-832x832 - In Collection: ICNet - Metadata: - backbone: R-50-D8 - crop size: (832,832) - lr schd: 80000 - inference time (ms/im): - - value: 49.8 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (832,832) - Training Memory (GB): 2.53 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 68.91 - mIoU(ms+flip): 69.72 - Config: configs/icnet/icnet_r50-d8_4xb2-80k_cityscapes-832x832.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_832x832_80k_cityscapes/icnet_r50-d8_832x832_80k_cityscapes_20210926_044625-c6407341.pth -- Name: icnet_r50-d8_4xb2-160k_cityscapes-832x832 - In Collection: ICNet - Metadata: - backbone: R-50-D8 - crop size: (832,832) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 73.82 - mIoU(ms+flip): 75.67 - Config: configs/icnet/icnet_r50-d8_4xb2-160k_cityscapes-832x832.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_832x832_160k_cityscapes/icnet_r50-d8_832x832_160k_cityscapes_20210925_232612-a95f0d4e.pth -- Name: icnet_r50-d8-in1k-pre_4xb2-80k_cityscapes-832x832 - In Collection: ICNet - Metadata: - backbone: R-50-D8 - crop size: (832,832) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 74.58 - mIoU(ms+flip): 76.41 - Config: configs/icnet/icnet_r50-d8-in1k-pre_4xb2-80k_cityscapes-832x832.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_in1k-pre_832x832_80k_cityscapes/icnet_r50-d8_in1k-pre_832x832_80k_cityscapes_20210926_032943-1743dc7b.pth -- Name: icnet_r50-d8-in1k-pre_4xb2-160k_cityscapes-832x832 - In Collection: ICNet - Metadata: - backbone: R-50-D8 - crop size: (832,832) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 76.29 - mIoU(ms+flip): 78.09 - Config: configs/icnet/icnet_r50-d8-in1k-pre_4xb2-160k_cityscapes-832x832.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_in1k-pre_832x832_160k_cityscapes/icnet_r50-d8_in1k-pre_832x832_160k_cityscapes_20210926_042715-ce310aea.pth -- Name: icnet_r101-d8_4xb2-80k_cityscapes-832x832 - In Collection: ICNet - Metadata: - backbone: R-101-D8 - crop size: (832,832) - lr schd: 80000 - inference time (ms/im): - - value: 59.0 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (832,832) - Training Memory (GB): 3.08 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 70.28 - mIoU(ms+flip): 71.95 - Config: configs/icnet/icnet_r101-d8_4xb2-80k_cityscapes-832x832.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_832x832_80k_cityscapes/icnet_r101-d8_832x832_80k_cityscapes_20210926_072447-b52f936e.pth -- Name: icnet_r101-d8_4xb2-160k_cityscapes-832x832 - In Collection: ICNet - Metadata: - backbone: R-101-D8 - crop size: (832,832) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 73.8 - mIoU(ms+flip): 76.1 - Config: configs/icnet/icnet_r101-d8_4xb2-160k_cityscapes-832x832.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_832x832_160k_cityscapes/icnet_r101-d8_832x832_160k_cityscapes_20210926_092350-3a1ebf1a.pth -- Name: icnet_r101-d8-in1k-pre_4xb2-80k_cityscapes-832x832 - In Collection: ICNet - Metadata: - backbone: R-101-D8 - crop size: (832,832) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 75.57 - mIoU(ms+flip): 77.86 - Config: configs/icnet/icnet_r101-d8-in1k-pre_4xb2-80k_cityscapes-832x832.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_in1k-pre_832x832_80k_cityscapes/icnet_r101-d8_in1k-pre_832x832_80k_cityscapes_20210926_020414-7ceb12c5.pth -- Name: icnet_r101-d8-in1k-pre_4xb2-160k_cityscapes-832x832 - In Collection: ICNet - Metadata: - backbone: R-101-D8 - crop size: (832,832) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 76.15 - mIoU(ms+flip): 77.98 - Config: configs/icnet/icnet_r101-d8-in1k-pre_4xb2-160k_cityscapes-832x832.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_in1k-pre_832x832_160k_cityscapes/icnet_r101-d8_in1k-pre_832x832_160k_cityscapes_20210925_232612-9484ae8a.pth diff --git a/configs/icnet/metafile.yaml b/configs/icnet/metafile.yaml new file mode 100644 index 0000000000..1d843ee4b6 --- /dev/null +++ b/configs/icnet/metafile.yaml @@ -0,0 +1,298 @@ +Collections: +- Name: ICNet + License: Apache License 2.0 + Metadata: + Training Data: + - Cityscapes + Paper: + Title: ICNet for Real-time Semantic Segmentation on High-resolution Images + URL: https://arxiv.org/abs/1704.08545 + README: configs/icnet/README.md + Frameworks: + - PyTorch +Models: +- Name: icnet_r18-d8_4xb2-80k_cityscapes-832x832 + In Collection: ICNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 68.14 + mIoU(ms+flip): 70.16 + Config: configs/icnet/icnet_r18-d8_4xb2-80k_cityscapes-832x832.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-18-D8 + - ICNet + Training Resources: 4x V100 GPUS + Memory (GB): 1.7 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_832x832_80k_cityscapes/icnet_r18-d8_832x832_80k_cityscapes_20210925_225521-2e36638d.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_832x832_80k_cityscapes/icnet_r18-d8_832x832_80k_cityscapes_20210925_225521.log.json + Paper: + Title: ICNet for Real-time Semantic Segmentation on High-resolution Images + URL: https://arxiv.org/abs/1704.08545 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/necks/ic_neck.py#L77 + Framework: PyTorch +- Name: icnet_r18-d8_4xb2-160k_cityscapes-832x832 + In Collection: ICNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 71.64 + mIoU(ms+flip): 74.18 + Config: configs/icnet/icnet_r18-d8_4xb2-160k_cityscapes-832x832.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-18-D8 + - ICNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_832x832_160k_cityscapes/icnet_r18-d8_832x832_160k_cityscapes_20210925_230153-2c6eb6e0.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_832x832_160k_cityscapes/icnet_r18-d8_832x832_160k_cityscapes_20210925_230153.log.json + Paper: + Title: ICNet for Real-time Semantic Segmentation on High-resolution Images + URL: https://arxiv.org/abs/1704.08545 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/necks/ic_neck.py#L77 + Framework: PyTorch +- Name: icnet_r18-d8-in1k-pre_4xb2-80k_cityscapes-832x832 + In Collection: ICNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 72.51 + mIoU(ms+flip): 74.78 + Config: configs/icnet/icnet_r18-d8-in1k-pre_4xb2-80k_cityscapes-832x832.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-18-D8 + - ICNet + - (in1k-pre) + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_in1k-pre_832x832_80k_cityscapes/icnet_r18-d8_in1k-pre_832x832_80k_cityscapes_20210925_230354-1cbe3022.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_in1k-pre_832x832_80k_cityscapes/icnet_r18-d8_in1k-pre_832x832_80k_cityscapes_20210925_230354.log.json + Paper: + Title: ICNet for Real-time Semantic Segmentation on High-resolution Images + URL: https://arxiv.org/abs/1704.08545 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/necks/ic_neck.py#L77 + Framework: PyTorch +- Name: icnet_r18-d8-in1k-pre_4xb2-160k_cityscapes-832x832 + In Collection: ICNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 74.43 + mIoU(ms+flip): 76.72 + Config: configs/icnet/icnet_r18-d8-in1k-pre_4xb2-160k_cityscapes-832x832.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-18-D8 + - ICNet + - (in1k-pre) + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_in1k-pre_832x832_160k_cityscapes/icnet_r18-d8_in1k-pre_832x832_160k_cityscapes_20210926_052702-619c8ae1.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_in1k-pre_832x832_160k_cityscapes/icnet_r18-d8_in1k-pre_832x832_160k_cityscapes_20210926_052702.log.json + Paper: + Title: ICNet for Real-time Semantic Segmentation on High-resolution Images + URL: https://arxiv.org/abs/1704.08545 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/necks/ic_neck.py#L77 + Framework: PyTorch +- Name: icnet_r50-d8_4xb2-80k_cityscapes-832x832 + In Collection: ICNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 68.91 + mIoU(ms+flip): 69.72 + Config: configs/icnet/icnet_r50-d8_4xb2-80k_cityscapes-832x832.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - ICNet + Training Resources: 4x V100 GPUS + Memory (GB): 2.53 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_832x832_80k_cityscapes/icnet_r50-d8_832x832_80k_cityscapes_20210926_044625-c6407341.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_832x832_80k_cityscapes/icnet_r50-d8_832x832_80k_cityscapes_20210926_044625.log.json + Paper: + Title: ICNet for Real-time Semantic Segmentation on High-resolution Images + URL: https://arxiv.org/abs/1704.08545 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/necks/ic_neck.py#L77 + Framework: PyTorch +- Name: icnet_r50-d8_4xb2-160k_cityscapes-832x832 + In Collection: ICNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 73.82 + mIoU(ms+flip): 75.67 + Config: configs/icnet/icnet_r50-d8_4xb2-160k_cityscapes-832x832.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - ICNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_832x832_160k_cityscapes/icnet_r50-d8_832x832_160k_cityscapes_20210925_232612-a95f0d4e.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_832x832_160k_cityscapes/icnet_r50-d8_832x832_160k_cityscapes_20210925_232612.log.json + Paper: + Title: ICNet for Real-time Semantic Segmentation on High-resolution Images + URL: https://arxiv.org/abs/1704.08545 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/necks/ic_neck.py#L77 + Framework: PyTorch +- Name: icnet_r50-d8-in1k-pre_4xb2-80k_cityscapes-832x832 + In Collection: ICNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 74.58 + mIoU(ms+flip): 76.41 + Config: configs/icnet/icnet_r50-d8-in1k-pre_4xb2-80k_cityscapes-832x832.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - ICNet + - (in1k-pre) + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_in1k-pre_832x832_80k_cityscapes/icnet_r50-d8_in1k-pre_832x832_80k_cityscapes_20210926_032943-1743dc7b.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_in1k-pre_832x832_80k_cityscapes/icnet_r50-d8_in1k-pre_832x832_80k_cityscapes_20210926_032943.log.json + Paper: + Title: ICNet for Real-time Semantic Segmentation on High-resolution Images + URL: https://arxiv.org/abs/1704.08545 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/necks/ic_neck.py#L77 + Framework: PyTorch +- Name: icnet_r50-d8-in1k-pre_4xb2-160k_cityscapes-832x832 + In Collection: ICNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 76.29 + mIoU(ms+flip): 78.09 + Config: configs/icnet/icnet_r50-d8-in1k-pre_4xb2-160k_cityscapes-832x832.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - ICNet + - (in1k-pre) + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_in1k-pre_832x832_160k_cityscapes/icnet_r50-d8_in1k-pre_832x832_160k_cityscapes_20210926_042715-ce310aea.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_in1k-pre_832x832_160k_cityscapes/icnet_r50-d8_in1k-pre_832x832_160k_cityscapes_20210926_042715.log.json + Paper: + Title: ICNet for Real-time Semantic Segmentation on High-resolution Images + URL: https://arxiv.org/abs/1704.08545 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/necks/ic_neck.py#L77 + Framework: PyTorch +- Name: icnet_r101-d8_4xb2-80k_cityscapes-832x832 + In Collection: ICNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 70.28 + mIoU(ms+flip): 71.95 + Config: configs/icnet/icnet_r101-d8_4xb2-80k_cityscapes-832x832.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - ICNet + Training Resources: 4x V100 GPUS + Memory (GB): 3.08 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_832x832_80k_cityscapes/icnet_r101-d8_832x832_80k_cityscapes_20210926_072447-b52f936e.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_832x832_80k_cityscapes/icnet_r101-d8_832x832_80k_cityscapes_20210926_072447.log.json + Paper: + Title: ICNet for Real-time Semantic Segmentation on High-resolution Images + URL: https://arxiv.org/abs/1704.08545 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/necks/ic_neck.py#L77 + Framework: PyTorch +- Name: icnet_r101-d8_4xb2-160k_cityscapes-832x832 + In Collection: ICNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 73.8 + mIoU(ms+flip): 76.1 + Config: configs/icnet/icnet_r101-d8_4xb2-160k_cityscapes-832x832.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - ICNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_832x832_160k_cityscapes/icnet_r101-d8_832x832_160k_cityscapes_20210926_092350-3a1ebf1a.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_832x832_160k_cityscapes/icnet_r101-d8_832x832_160k_cityscapes_20210926_092350.log.json + Paper: + Title: ICNet for Real-time Semantic Segmentation on High-resolution Images + URL: https://arxiv.org/abs/1704.08545 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/necks/ic_neck.py#L77 + Framework: PyTorch +- Name: icnet_r101-d8-in1k-pre_4xb2-80k_cityscapes-832x832 + In Collection: ICNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 75.57 + mIoU(ms+flip): 77.86 + Config: configs/icnet/icnet_r101-d8-in1k-pre_4xb2-80k_cityscapes-832x832.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - ICNet + - (in1k-pre) + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_in1k-pre_832x832_80k_cityscapes/icnet_r101-d8_in1k-pre_832x832_80k_cityscapes_20210926_020414-7ceb12c5.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_in1k-pre_832x832_80k_cityscapes/icnet_r101-d8_in1k-pre_832x832_80k_cityscapes_20210926_020414.log.json + Paper: + Title: ICNet for Real-time Semantic Segmentation on High-resolution Images + URL: https://arxiv.org/abs/1704.08545 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/necks/ic_neck.py#L77 + Framework: PyTorch +- Name: icnet_r101-d8-in1k-pre_4xb2-160k_cityscapes-832x832 + In Collection: ICNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 76.15 + mIoU(ms+flip): 77.98 + Config: configs/icnet/icnet_r101-d8-in1k-pre_4xb2-160k_cityscapes-832x832.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - ICNet + - (in1k-pre) + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_in1k-pre_832x832_160k_cityscapes/icnet_r101-d8_in1k-pre_832x832_160k_cityscapes_20210925_232612-9484ae8a.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_in1k-pre_832x832_160k_cityscapes/icnet_r101-d8_in1k-pre_832x832_160k_cityscapes_20210925_232612.log.json + Paper: + Title: ICNet for Real-time Semantic Segmentation on High-resolution Images + URL: https://arxiv.org/abs/1704.08545 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/necks/ic_neck.py#L77 + Framework: PyTorch diff --git a/configs/isanet/README.md b/configs/isanet/README.md index db93dae234..da9f0104c5 100644 --- a/configs/isanet/README.md +++ b/configs/isanet/README.md @@ -1,6 +1,6 @@ # ISANet -[Interlaced Sparse Self-Attention for Semantic Segmentation](https://arxiv.org/abs/1907.12273) +> [Interlaced Sparse Self-Attention for Semantic Segmentation](https://arxiv.org/abs/1907.12273) ## Introduction @@ -22,6 +22,39 @@ In this paper, we present a so-called interlaced sparse self-attention approach +## Results and models + +### Cityscapes + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------- | -------: | -------------- | ------ | ----- | ------------: | --------------------------------------------------------------------------------------------------------------------------------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| ISANet | R-50-D8 | 512x1024 | 40000 | 5.869 | 2.91 | V100 | 78.49 | 79.44 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x1024_40k_cityscapes/isanet_r50-d8_512x1024_40k_cityscapes_20210901_054739-981bd763.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x1024_40k_cityscapes/isanet_r50-d8_512x1024_40k_cityscapes_20210901_054739.log.json) | +| ISANet | R-50-D8 | 512x1024 | 80000 | 5.869 | 2.91 | V100 | 78.68 | 80.25 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x1024_80k_cityscapes/isanet_r50-d8_512x1024_80k_cityscapes_20210901_074202-89384497.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x1024_80k_cityscapes/isanet_r50-d8_512x1024_80k_cityscapes_20210901_074202.log.json) | +| ISANet | R-50-D8 | 769x769 | 40000 | 6.759 | 1.54 | V100 | 78.70 | 80.28 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_769x769_40k_cityscapes/isanet_r50-d8_769x769_40k_cityscapes_20210903_050200-4ae7e65b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_769x769_40k_cityscapes/isanet_r50-d8_769x769_40k_cityscapes_20210903_050200.log.json) | +| ISANet | R-50-D8 | 769x769 | 80000 | 6.759 | 1.54 | V100 | 79.29 | 80.53 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_769x769_80k_cityscapes/isanet_r50-d8_769x769_80k_cityscapes_20210903_101126-99b54519.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_769x769_80k_cityscapes/isanet_r50-d8_769x769_80k_cityscapes_20210903_101126.log.json) | +| ISANet | R-101-D8 | 512x1024 | 40000 | 9.425 | 2.35 | V100 | 79.58 | 81.05 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x1024_40k_cityscapes/isanet_r101-d8_512x1024_40k_cityscapes_20210901_145553-293e6bd6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x1024_40k_cityscapes/isanet_r101-d8_512x1024_40k_cityscapes_20210901_145553.log.json) | +| ISANet | R-101-D8 | 512x1024 | 80000 | 9.425 | 2.35 | V100 | 80.32 | 81.58 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x1024_80k_cityscapes/isanet_r101-d8_512x1024_80k_cityscapes_20210901_145243-5b99c9b2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x1024_80k_cityscapes/isanet_r101-d8_512x1024_80k_cityscapes_20210901_145243.log.json) | +| ISANet | R-101-D8 | 769x769 | 40000 | 10.815 | 0.92 | V100 | 79.68 | 80.95 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_769x769_40k_cityscapes/isanet_r101-d8_769x769_40k_cityscapes_20210903_111320-509e7224.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_769x769_40k_cityscapes/isanet_r101-d8_769x769_40k_cityscapes_20210903_111320.log.json) | +| ISANet | R-101-D8 | 769x769 | 80000 | 10.815 | 0.92 | V100 | 80.61 | 81.59 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_769x769_80k_cityscapes/isanet_r101-d8_769x769_80k_cityscapes_20210903_111319-24f71dfa.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_769x769_80k_cityscapes/isanet_r101-d8_769x769_80k_cityscapes_20210903_111319.log.json) | + +### ADE20K + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------- | -------: | -------------- | ------ | ----- | ------------: | ----------------------------------------------------------------------------------------------------------------------------: | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| ISANet | R-50-D8 | 512x512 | 80000 | 9.0 | 22.55 | V100 | 41.12 | 42.35 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_80k_ade20k/isanet_r50-d8_512x512_80k_ade20k_20210903_124557-6ed83a0c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_80k_ade20k/isanet_r50-d8_512x512_80k_ade20k_20210903_124557.log.json) | +| ISANet | R-50-D8 | 512x512 | 160000 | 9.0 | 22.55 | V100 | 42.59 | 43.07 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_160k_ade20k/isanet_r50-d8_512x512_160k_ade20k_20210903_104850-f752d0a3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_160k_ade20k/isanet_r50-d8_512x512_160k_ade20k_20210903_104850.log.json) | +| ISANet | R-101-D8 | 512x512 | 80000 | 12.562 | 10.56 | V100 | 43.51 | 44.38 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_80k_ade20k/isanet_r101-d8_512x512_80k_ade20k_20210903_162056-68b235c2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_80k_ade20k/isanet_r101-d8_512x512_80k_ade20k_20210903_162056.log.json) | +| ISANet | R-101-D8 | 512x512 | 160000 | 12.562 | 10.56 | V100 | 43.80 | 45.4 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_160k_ade20k/isanet_r101-d8_512x512_160k_ade20k_20210903_211431-a7879dcd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_160k_ade20k/isanet_r101-d8_512x512_160k_ade20k_20210903_211431.log.json) | + +### Pascal VOC 2012 + Aug + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------- | -------: | -------------- | ------ | ----- | ------------: | -----------------------------------------------------------------------------------------------------------------------------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| ISANet | R-50-D8 | 512x512 | 20000 | 5.9 | 23.08 | V100 | 76.78 | 77.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_20k_voc12aug/isanet_r50-d8_512x512_20k_voc12aug_20210901_164838-79d59b80.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_20k_voc12aug/isanet_r50-d8_512x512_20k_voc12aug_20210901_164838.log.json) | +| ISANet | R-50-D8 | 512x512 | 40000 | 5.9 | 23.08 | V100 | 76.20 | 77.22 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_40k_voc12aug/isanet_r50-d8_512x512_40k_voc12aug_20210901_151349-7d08a54e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_40k_voc12aug/isanet_r50-d8_512x512_40k_voc12aug_20210901_151349.log.json) | +| ISANet | R-101-D8 | 512x512 | 20000 | 9.465 | 7.42 | V100 | 78.46 | 79.16 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_20k_voc12aug/isanet_r101-d8_512x512_20k_voc12aug_20210901_115805-3ccbf355.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_20k_voc12aug/isanet_r101-d8_512x512_20k_voc12aug_20210901_115805.log.json) | +| ISANet | R-101-D8 | 512x512 | 40000 | 9.465 | 7.42 | V100 | 78.12 | 79.04 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_40k_voc12aug/isanet_r101-d8_512x512_40k_voc12aug_20210901_145814-bc71233b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_40k_voc12aug/isanet_r101-d8_512x512_40k_voc12aug_20210901_145814.log.json) | + ## Citation ```bibetex @@ -45,36 +78,3 @@ The technical report above is also presented at: publisher={Springer} } ``` - -## Results and models - -### Cityscapes - -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------- | -------: | -------------- | ----- | ------------: | --------------------------------------------------------------------------------------------------------------------------------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| ISANet | R-50-D8 | 512x1024 | 40000 | 5.869 | 2.91 | 78.49 | 79.44 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x1024_40k_cityscapes/isanet_r50-d8_512x1024_40k_cityscapes_20210901_054739-981bd763.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x1024_40k_cityscapes/isanet_r50-d8_512x1024_40k_cityscapes_20210901_054739.log.json) | -| ISANet | R-50-D8 | 512x1024 | 80000 | 5.869 | 2.91 | 78.68 | 80.25 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x1024_80k_cityscapes/isanet_r50-d8_512x1024_80k_cityscapes_20210901_074202-89384497.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x1024_80k_cityscapes/isanet_r50-d8_512x1024_80k_cityscapes_20210901_074202.log.json) | -| ISANet | R-50-D8 | 769x769 | 40000 | 6.759 | 1.54 | 78.70 | 80.28 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_769x769_40k_cityscapes/isanet_r50-d8_769x769_40k_cityscapes_20210903_050200-4ae7e65b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_769x769_40k_cityscapes/isanet_r50-d8_769x769_40k_cityscapes_20210903_050200.log.json) | -| ISANet | R-50-D8 | 769x769 | 80000 | 6.759 | 1.54 | 79.29 | 80.53 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_769x769_80k_cityscapes/isanet_r50-d8_769x769_80k_cityscapes_20210903_101126-99b54519.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_769x769_80k_cityscapes/isanet_r50-d8_769x769_80k_cityscapes_20210903_101126.log.json) | -| ISANet | R-101-D8 | 512x1024 | 40000 | 9.425 | 2.35 | 79.58 | 81.05 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x1024_40k_cityscapes/isanet_r101-d8_512x1024_40k_cityscapes_20210901_145553-293e6bd6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x1024_40k_cityscapes/isanet_r101-d8_512x1024_40k_cityscapes_20210901_145553.log.json) | -| ISANet | R-101-D8 | 512x1024 | 80000 | 9.425 | 2.35 | 80.32 | 81.58 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x1024_80k_cityscapes/isanet_r101-d8_512x1024_80k_cityscapes_20210901_145243-5b99c9b2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x1024_80k_cityscapes/isanet_r101-d8_512x1024_80k_cityscapes_20210901_145243.log.json) | -| ISANet | R-101-D8 | 769x769 | 40000 | 10.815 | 0.92 | 79.68 | 80.95 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_769x769_40k_cityscapes/isanet_r101-d8_769x769_40k_cityscapes_20210903_111320-509e7224.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_769x769_40k_cityscapes/isanet_r101-d8_769x769_40k_cityscapes_20210903_111320.log.json) | -| ISANet | R-101-D8 | 769x769 | 80000 | 10.815 | 0.92 | 80.61 | 81.59 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_769x769_80k_cityscapes/isanet_r101-d8_769x769_80k_cityscapes_20210903_111319-24f71dfa.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_769x769_80k_cityscapes/isanet_r101-d8_769x769_80k_cityscapes_20210903_111319.log.json) | - -### ADE20K - -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------- | -------: | -------------- | ----- | ------------: | ----------------------------------------------------------------------------------------------------------------------------: | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| ISANet | R-50-D8 | 512x512 | 80000 | 9.0 | 22.55 | 41.12 | 42.35 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_80k_ade20k/isanet_r50-d8_512x512_80k_ade20k_20210903_124557-6ed83a0c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_80k_ade20k/isanet_r50-d8_512x512_80k_ade20k_20210903_124557.log.json) | -| ISANet | R-50-D8 | 512x512 | 160000 | 9.0 | 22.55 | 42.59 | 43.07 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_160k_ade20k/isanet_r50-d8_512x512_160k_ade20k_20210903_104850-f752d0a3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_160k_ade20k/isanet_r50-d8_512x512_160k_ade20k_20210903_104850.log.json) | -| ISANet | R-101-D8 | 512x512 | 80000 | 12.562 | 10.56 | 43.51 | 44.38 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_80k_ade20k/isanet_r101-d8_512x512_80k_ade20k_20210903_162056-68b235c2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_80k_ade20k/isanet_r101-d8_512x512_80k_ade20k_20210903_162056.log.json) | -| ISANet | R-101-D8 | 512x512 | 160000 | 12.562 | 10.56 | 43.80 | 45.4 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_160k_ade20k/isanet_r101-d8_512x512_160k_ade20k_20210903_211431-a7879dcd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_160k_ade20k/isanet_r101-d8_512x512_160k_ade20k_20210903_211431.log.json) | - -### Pascal VOC 2012 + Aug - -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------- | -------: | -------------- | ----- | ------------: | -----------------------------------------------------------------------------------------------------------------------------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| ISANet | R-50-D8 | 512x512 | 20000 | 5.9 | 23.08 | 76.78 | 77.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_20k_voc12aug/isanet_r50-d8_512x512_20k_voc12aug_20210901_164838-79d59b80.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_20k_voc12aug/isanet_r50-d8_512x512_20k_voc12aug_20210901_164838.log.json) | -| ISANet | R-50-D8 | 512x512 | 40000 | 5.9 | 23.08 | 76.20 | 77.22 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_40k_voc12aug/isanet_r50-d8_512x512_40k_voc12aug_20210901_151349-7d08a54e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_40k_voc12aug/isanet_r50-d8_512x512_40k_voc12aug_20210901_151349.log.json) | -| ISANet | R-101-D8 | 512x512 | 20000 | 9.465 | 7.42 | 78.46 | 79.16 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_20k_voc12aug/isanet_r101-d8_512x512_20k_voc12aug_20210901_115805-3ccbf355.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_20k_voc12aug/isanet_r101-d8_512x512_20k_voc12aug_20210901_115805.log.json) | -| ISANet | R-101-D8 | 512x512 | 40000 | 9.465 | 7.42 | 78.12 | 79.04 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_40k_voc12aug/isanet_r101-d8_512x512_40k_voc12aug_20210901_145814-bc71233b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_40k_voc12aug/isanet_r101-d8_512x512_40k_voc12aug_20210901_145814.log.json) | diff --git a/configs/isanet/isanet.yml b/configs/isanet/isanet.yml deleted file mode 100644 index 405b3c1231..0000000000 --- a/configs/isanet/isanet.yml +++ /dev/null @@ -1,369 +0,0 @@ -Collections: -- Name: ISANet - Metadata: - Training Data: - - Cityscapes - - ADE20K - - Pascal VOC 2012 + Aug - Paper: - URL: https://arxiv.org/abs/1907.12273 - Title: Interlaced Sparse Self-Attention for Semantic Segmentation - README: configs/isanet/README.md - Code: - URL: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/decode_heads/isa_head.py#L58 - Version: v0.18.0 - Converted From: - Code: https://github.com/openseg-group/openseg.pytorch -Models: -- Name: isanet_r50-d8_4xb2-40k_cityscapes-512x1024 - In Collection: ISANet - Metadata: - backbone: R-50-D8 - crop size: (512,1024) - lr schd: 40000 - inference time (ms/im): - - value: 343.64 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 5.869 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.49 - mIoU(ms+flip): 79.44 - Config: configs/isanet/isanet_r50-d8_4xb2-40k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x1024_40k_cityscapes/isanet_r50-d8_512x1024_40k_cityscapes_20210901_054739-981bd763.pth -- Name: isanet_r50-d8_4xb2-80k_cityscapes-512x1024 - In Collection: ISANet - Metadata: - backbone: R-50-D8 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 343.64 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 5.869 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.68 - mIoU(ms+flip): 80.25 - Config: configs/isanet/isanet_r50-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x1024_80k_cityscapes/isanet_r50-d8_512x1024_80k_cityscapes_20210901_074202-89384497.pth -- Name: isanet_r50-d8_4xb2-40k_cityscapes-769x769 - In Collection: ISANet - Metadata: - backbone: R-50-D8 - crop size: (769,769) - lr schd: 40000 - inference time (ms/im): - - value: 649.35 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 6.759 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.7 - mIoU(ms+flip): 80.28 - Config: configs/isanet/isanet_r50-d8_4xb2-40k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_769x769_40k_cityscapes/isanet_r50-d8_769x769_40k_cityscapes_20210903_050200-4ae7e65b.pth -- Name: isanet_r50-d8_4xb2-80k_cityscapes-769x769 - In Collection: ISANet - Metadata: - backbone: R-50-D8 - crop size: (769,769) - lr schd: 80000 - inference time (ms/im): - - value: 649.35 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 6.759 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.29 - mIoU(ms+flip): 80.53 - Config: configs/isanet/isanet_r50-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_769x769_80k_cityscapes/isanet_r50-d8_769x769_80k_cityscapes_20210903_101126-99b54519.pth -- Name: isanet_r101-d8_4xb2-40k_cityscapes-512x1024 - In Collection: ISANet - Metadata: - backbone: R-101-D8 - crop size: (512,1024) - lr schd: 40000 - inference time (ms/im): - - value: 425.53 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 9.425 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.58 - mIoU(ms+flip): 81.05 - Config: configs/isanet/isanet_r101-d8_4xb2-40k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x1024_40k_cityscapes/isanet_r101-d8_512x1024_40k_cityscapes_20210901_145553-293e6bd6.pth -- Name: isanet_r101-d8_4xb2-80k_cityscapes-512x1024 - In Collection: ISANet - Metadata: - backbone: R-101-D8 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 425.53 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 9.425 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 80.32 - mIoU(ms+flip): 81.58 - Config: configs/isanet/isanet_r101-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x1024_80k_cityscapes/isanet_r101-d8_512x1024_80k_cityscapes_20210901_145243-5b99c9b2.pth -- Name: isanet_r101-d8_4xb2-40k_cityscapes-769x769 - In Collection: ISANet - Metadata: - backbone: R-101-D8 - crop size: (769,769) - lr schd: 40000 - inference time (ms/im): - - value: 1086.96 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 10.815 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.68 - mIoU(ms+flip): 80.95 - Config: configs/isanet/isanet_r101-d8_4xb2-40k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_769x769_40k_cityscapes/isanet_r101-d8_769x769_40k_cityscapes_20210903_111320-509e7224.pth -- Name: isanet_r101-d8_4xb2-80k_cityscapes-769x769 - In Collection: ISANet - Metadata: - backbone: R-101-D8 - crop size: (769,769) - lr schd: 80000 - inference time (ms/im): - - value: 1086.96 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 10.815 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 80.61 - mIoU(ms+flip): 81.59 - Config: configs/isanet/isanet_r101-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_769x769_80k_cityscapes/isanet_r101-d8_769x769_80k_cityscapes_20210903_111319-24f71dfa.pth -- Name: isanet_r50-d8_4xb4-80k_ade20k-512x512 - In Collection: ISANet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 44.35 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 9.0 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 41.12 - mIoU(ms+flip): 42.35 - Config: configs/isanet/isanet_r50-d8_4xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_80k_ade20k/isanet_r50-d8_512x512_80k_ade20k_20210903_124557-6ed83a0c.pth -- Name: isanet_r50-d8_4xb4-160k_ade20k-512x512 - In Collection: ISANet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 44.35 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 9.0 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 42.59 - mIoU(ms+flip): 43.07 - Config: configs/isanet/isanet_r50-d8_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_160k_ade20k/isanet_r50-d8_512x512_160k_ade20k_20210903_104850-f752d0a3.pth -- Name: isanet_r101-d8_4xb4-80k_ade20k-512x512 - In Collection: ISANet - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 94.7 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 12.562 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 43.51 - mIoU(ms+flip): 44.38 - Config: configs/isanet/isanet_r101-d8_4xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_80k_ade20k/isanet_r101-d8_512x512_80k_ade20k_20210903_162056-68b235c2.pth -- Name: isanet_r101-d8_4xb4-160k_ade20k-512x512 - In Collection: ISANet - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 94.7 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 12.562 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 43.8 - mIoU(ms+flip): 45.4 - Config: configs/isanet/isanet_r101-d8_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_160k_ade20k/isanet_r101-d8_512x512_160k_ade20k_20210903_211431-a7879dcd.pth -- Name: isanet_r50-d8_4xb4-20k_voc12aug-512x512 - In Collection: ISANet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 20000 - inference time (ms/im): - - value: 43.33 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 5.9 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 76.78 - mIoU(ms+flip): 77.79 - Config: configs/isanet/isanet_r50-d8_4xb4-20k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_20k_voc12aug/isanet_r50-d8_512x512_20k_voc12aug_20210901_164838-79d59b80.pth -- Name: isanet_r50-d8_4xb4-40k_voc12aug-512x512 - In Collection: ISANet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 40000 - inference time (ms/im): - - value: 43.33 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 5.9 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 76.2 - mIoU(ms+flip): 77.22 - Config: configs/isanet/isanet_r50-d8_4xb4-40k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_40k_voc12aug/isanet_r50-d8_512x512_40k_voc12aug_20210901_151349-7d08a54e.pth -- Name: isanet_r101-d8_4xb4-20k_voc12aug-512x512 - In Collection: ISANet - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 20000 - inference time (ms/im): - - value: 134.77 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 9.465 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 78.46 - mIoU(ms+flip): 79.16 - Config: configs/isanet/isanet_r101-d8_4xb4-20k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_20k_voc12aug/isanet_r101-d8_512x512_20k_voc12aug_20210901_115805-3ccbf355.pth -- Name: isanet_r101-d8_4xb4-40k_voc12aug-512x512 - In Collection: ISANet - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 40000 - inference time (ms/im): - - value: 134.77 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 9.465 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 78.12 - mIoU(ms+flip): 79.04 - Config: configs/isanet/isanet_r101-d8_4xb4-40k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_40k_voc12aug/isanet_r101-d8_512x512_40k_voc12aug_20210901_145814-bc71233b.pth diff --git a/configs/isanet/metafile.yaml b/configs/isanet/metafile.yaml new file mode 100644 index 0000000000..ad394eabb2 --- /dev/null +++ b/configs/isanet/metafile.yaml @@ -0,0 +1,399 @@ +Collections: +- Name: ISANet + License: Apache License 2.0 + Metadata: + Training Data: + - Cityscapes + - ADE20K + - Pascal VOC 2012 + Aug + Paper: + Title: Interlaced Sparse Self-Attention for Semantic Segmentation + URL: https://arxiv.org/abs/1907.12273 + README: configs/isanet/README.md + Frameworks: + - PyTorch +Models: +- Name: isanet_r50-d8_4xb2-40k_cityscapes-512x1024 + In Collection: ISANet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.49 + mIoU(ms+flip): 79.44 + Config: configs/isanet/isanet_r50-d8_4xb2-40k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - ISANet + Training Resources: 4x V100 GPUS + Memory (GB): 5.869 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x1024_40k_cityscapes/isanet_r50-d8_512x1024_40k_cityscapes_20210901_054739-981bd763.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x1024_40k_cityscapes/isanet_r50-d8_512x1024_40k_cityscapes_20210901_054739.log.json + Paper: + Title: Interlaced Sparse Self-Attention for Semantic Segmentation + URL: https://arxiv.org/abs/1907.12273 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/decode_heads/isa_head.py#L58 + Framework: PyTorch +- Name: isanet_r50-d8_4xb2-80k_cityscapes-512x1024 + In Collection: ISANet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.68 + mIoU(ms+flip): 80.25 + Config: configs/isanet/isanet_r50-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - ISANet + Training Resources: 4x V100 GPUS + Memory (GB): 5.869 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x1024_80k_cityscapes/isanet_r50-d8_512x1024_80k_cityscapes_20210901_074202-89384497.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x1024_80k_cityscapes/isanet_r50-d8_512x1024_80k_cityscapes_20210901_074202.log.json + Paper: + Title: Interlaced Sparse Self-Attention for Semantic Segmentation + URL: https://arxiv.org/abs/1907.12273 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/decode_heads/isa_head.py#L58 + Framework: PyTorch +- Name: isanet_r50-d8_4xb2-40k_cityscapes-769x769 + In Collection: ISANet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.7 + mIoU(ms+flip): 80.28 + Config: configs/isanet/isanet_r50-d8_4xb2-40k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - ISANet + Training Resources: 4x V100 GPUS + Memory (GB): 6.759 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_769x769_40k_cityscapes/isanet_r50-d8_769x769_40k_cityscapes_20210903_050200-4ae7e65b.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_769x769_40k_cityscapes/isanet_r50-d8_769x769_40k_cityscapes_20210903_050200.log.json + Paper: + Title: Interlaced Sparse Self-Attention for Semantic Segmentation + URL: https://arxiv.org/abs/1907.12273 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/decode_heads/isa_head.py#L58 + Framework: PyTorch +- Name: isanet_r50-d8_4xb2-80k_cityscapes-769x769 + In Collection: ISANet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.29 + mIoU(ms+flip): 80.53 + Config: configs/isanet/isanet_r50-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - ISANet + Training Resources: 4x V100 GPUS + Memory (GB): 6.759 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_769x769_80k_cityscapes/isanet_r50-d8_769x769_80k_cityscapes_20210903_101126-99b54519.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_769x769_80k_cityscapes/isanet_r50-d8_769x769_80k_cityscapes_20210903_101126.log.json + Paper: + Title: Interlaced Sparse Self-Attention for Semantic Segmentation + URL: https://arxiv.org/abs/1907.12273 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/decode_heads/isa_head.py#L58 + Framework: PyTorch +- Name: isanet_r101-d8_4xb2-40k_cityscapes-512x1024 + In Collection: ISANet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.58 + mIoU(ms+flip): 81.05 + Config: configs/isanet/isanet_r101-d8_4xb2-40k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - ISANet + Training Resources: 4x V100 GPUS + Memory (GB): 9.425 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x1024_40k_cityscapes/isanet_r101-d8_512x1024_40k_cityscapes_20210901_145553-293e6bd6.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x1024_40k_cityscapes/isanet_r101-d8_512x1024_40k_cityscapes_20210901_145553.log.json + Paper: + Title: Interlaced Sparse Self-Attention for Semantic Segmentation + URL: https://arxiv.org/abs/1907.12273 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/decode_heads/isa_head.py#L58 + Framework: PyTorch +- Name: isanet_r101-d8_4xb2-80k_cityscapes-512x1024 + In Collection: ISANet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 80.32 + mIoU(ms+flip): 81.58 + Config: configs/isanet/isanet_r101-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - ISANet + Training Resources: 4x V100 GPUS + Memory (GB): 9.425 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x1024_80k_cityscapes/isanet_r101-d8_512x1024_80k_cityscapes_20210901_145243-5b99c9b2.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x1024_80k_cityscapes/isanet_r101-d8_512x1024_80k_cityscapes_20210901_145243.log.json + Paper: + Title: Interlaced Sparse Self-Attention for Semantic Segmentation + URL: https://arxiv.org/abs/1907.12273 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/decode_heads/isa_head.py#L58 + Framework: PyTorch +- Name: isanet_r101-d8_4xb2-40k_cityscapes-769x769 + In Collection: ISANet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.68 + mIoU(ms+flip): 80.95 + Config: configs/isanet/isanet_r101-d8_4xb2-40k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - ISANet + Training Resources: 4x V100 GPUS + Memory (GB): 10.815 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_769x769_40k_cityscapes/isanet_r101-d8_769x769_40k_cityscapes_20210903_111320-509e7224.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_769x769_40k_cityscapes/isanet_r101-d8_769x769_40k_cityscapes_20210903_111320.log.json + Paper: + Title: Interlaced Sparse Self-Attention for Semantic Segmentation + URL: https://arxiv.org/abs/1907.12273 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/decode_heads/isa_head.py#L58 + Framework: PyTorch +- Name: isanet_r101-d8_4xb2-80k_cityscapes-769x769 + In Collection: ISANet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 80.61 + mIoU(ms+flip): 81.59 + Config: configs/isanet/isanet_r101-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - ISANet + Training Resources: 4x V100 GPUS + Memory (GB): 10.815 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_769x769_80k_cityscapes/isanet_r101-d8_769x769_80k_cityscapes_20210903_111319-24f71dfa.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_769x769_80k_cityscapes/isanet_r101-d8_769x769_80k_cityscapes_20210903_111319.log.json + Paper: + Title: Interlaced Sparse Self-Attention for Semantic Segmentation + URL: https://arxiv.org/abs/1907.12273 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/decode_heads/isa_head.py#L58 + Framework: PyTorch +- Name: isanet_r50-d8_4xb4-80k_ade20k-512x512 + In Collection: ISANet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 41.12 + mIoU(ms+flip): 42.35 + Config: configs/isanet/isanet_r50-d8_4xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50-D8 + - ISANet + Training Resources: 4x V100 GPUS + Memory (GB): 9.0 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_80k_ade20k/isanet_r50-d8_512x512_80k_ade20k_20210903_124557-6ed83a0c.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_80k_ade20k/isanet_r50-d8_512x512_80k_ade20k_20210903_124557.log.json + Paper: + Title: Interlaced Sparse Self-Attention for Semantic Segmentation + URL: https://arxiv.org/abs/1907.12273 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/decode_heads/isa_head.py#L58 + Framework: PyTorch +- Name: isanet_r50-d8_4xb4-160k_ade20k-512x512 + In Collection: ISANet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 42.59 + mIoU(ms+flip): 43.07 + Config: configs/isanet/isanet_r50-d8_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50-D8 + - ISANet + Training Resources: 4x V100 GPUS + Memory (GB): 9.0 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_160k_ade20k/isanet_r50-d8_512x512_160k_ade20k_20210903_104850-f752d0a3.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_160k_ade20k/isanet_r50-d8_512x512_160k_ade20k_20210903_104850.log.json + Paper: + Title: Interlaced Sparse Self-Attention for Semantic Segmentation + URL: https://arxiv.org/abs/1907.12273 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/decode_heads/isa_head.py#L58 + Framework: PyTorch +- Name: isanet_r101-d8_4xb4-80k_ade20k-512x512 + In Collection: ISANet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 43.51 + mIoU(ms+flip): 44.38 + Config: configs/isanet/isanet_r101-d8_4xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-101-D8 + - ISANet + Training Resources: 4x V100 GPUS + Memory (GB): 12.562 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_80k_ade20k/isanet_r101-d8_512x512_80k_ade20k_20210903_162056-68b235c2.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_80k_ade20k/isanet_r101-d8_512x512_80k_ade20k_20210903_162056.log.json + Paper: + Title: Interlaced Sparse Self-Attention for Semantic Segmentation + URL: https://arxiv.org/abs/1907.12273 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/decode_heads/isa_head.py#L58 + Framework: PyTorch +- Name: isanet_r101-d8_4xb4-160k_ade20k-512x512 + In Collection: ISANet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 43.8 + mIoU(ms+flip): 45.4 + Config: configs/isanet/isanet_r101-d8_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-101-D8 + - ISANet + Training Resources: 4x V100 GPUS + Memory (GB): 12.562 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_160k_ade20k/isanet_r101-d8_512x512_160k_ade20k_20210903_211431-a7879dcd.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_160k_ade20k/isanet_r101-d8_512x512_160k_ade20k_20210903_211431.log.json + Paper: + Title: Interlaced Sparse Self-Attention for Semantic Segmentation + URL: https://arxiv.org/abs/1907.12273 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/decode_heads/isa_head.py#L58 + Framework: PyTorch +- Name: isanet_r50-d8_4xb4-20k_voc12aug-512x512 + In Collection: ISANet + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 76.78 + mIoU(ms+flip): 77.79 + Config: configs/isanet/isanet_r50-d8_4xb4-20k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - R-50-D8 + - ISANet + Training Resources: 4x V100 GPUS + Memory (GB): 5.9 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_20k_voc12aug/isanet_r50-d8_512x512_20k_voc12aug_20210901_164838-79d59b80.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_20k_voc12aug/isanet_r50-d8_512x512_20k_voc12aug_20210901_164838.log.json + Paper: + Title: Interlaced Sparse Self-Attention for Semantic Segmentation + URL: https://arxiv.org/abs/1907.12273 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/decode_heads/isa_head.py#L58 + Framework: PyTorch +- Name: isanet_r50-d8_4xb4-40k_voc12aug-512x512 + In Collection: ISANet + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 76.2 + mIoU(ms+flip): 77.22 + Config: configs/isanet/isanet_r50-d8_4xb4-40k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - R-50-D8 + - ISANet + Training Resources: 4x V100 GPUS + Memory (GB): 5.9 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_40k_voc12aug/isanet_r50-d8_512x512_40k_voc12aug_20210901_151349-7d08a54e.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_40k_voc12aug/isanet_r50-d8_512x512_40k_voc12aug_20210901_151349.log.json + Paper: + Title: Interlaced Sparse Self-Attention for Semantic Segmentation + URL: https://arxiv.org/abs/1907.12273 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/decode_heads/isa_head.py#L58 + Framework: PyTorch +- Name: isanet_r101-d8_4xb4-20k_voc12aug-512x512 + In Collection: ISANet + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 78.46 + mIoU(ms+flip): 79.16 + Config: configs/isanet/isanet_r101-d8_4xb4-20k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - R-101-D8 + - ISANet + Training Resources: 4x V100 GPUS + Memory (GB): 9.465 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_20k_voc12aug/isanet_r101-d8_512x512_20k_voc12aug_20210901_115805-3ccbf355.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_20k_voc12aug/isanet_r101-d8_512x512_20k_voc12aug_20210901_115805.log.json + Paper: + Title: Interlaced Sparse Self-Attention for Semantic Segmentation + URL: https://arxiv.org/abs/1907.12273 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/decode_heads/isa_head.py#L58 + Framework: PyTorch +- Name: isanet_r101-d8_4xb4-40k_voc12aug-512x512 + In Collection: ISANet + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 78.12 + mIoU(ms+flip): 79.04 + Config: configs/isanet/isanet_r101-d8_4xb4-40k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - R-101-D8 + - ISANet + Training Resources: 4x V100 GPUS + Memory (GB): 9.465 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_40k_voc12aug/isanet_r101-d8_512x512_40k_voc12aug_20210901_145814-bc71233b.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_40k_voc12aug/isanet_r101-d8_512x512_40k_voc12aug_20210901_145814.log.json + Paper: + Title: Interlaced Sparse Self-Attention for Semantic Segmentation + URL: https://arxiv.org/abs/1907.12273 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.18.0/mmseg/models/decode_heads/isa_head.py#L58 + Framework: PyTorch diff --git a/configs/knet/README.md b/configs/knet/README.md index ed5bc06257..070c7256da 100644 --- a/configs/knet/README.md +++ b/configs/knet/README.md @@ -1,6 +1,6 @@ # K-Net -[K-Net: Towards Unified Image Segmentation](https://arxiv.org/abs/2106.14855) +> [K-Net: Towards Unified Image Segmentation](https://arxiv.org/abs/2106.14855) ## Introduction @@ -22,29 +22,31 @@ Semantic, instance, and panoptic segmentations have been addressed using differe -```bibtex -@inproceedings{zhang2021knet, - title={{K-Net: Towards} Unified Image Segmentation}, - author={Wenwei Zhang and Jiangmiao Pang and Kai Chen and Chen Change Loy}, - year={2021}, - booktitle={NeurIPS}, -} -``` - ## Results and models ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ---------------- | -------- | --------- | ------- | -------- | -------------- | ----- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| KNet + FCN | R-50-D8 | 512x512 | 80000 | 7.01 | 19.24 | 43.60 | 45.12 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/knet/knet-s3_r50-d8_fcn_8xb2-adamw-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_fcn_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_fcn_r50-d8_8x2_512x512_adamw_80k_ade20k_20220228_043751-abcab920.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_fcn_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_fcn_r50-d8_8x2_512x512_adamw_80k_ade20k_20220228_043751.log.json) | -| KNet + PSPNet | R-50-D8 | 512x512 | 80000 | 6.98 | 20.04 | 44.18 | 45.58 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/knet/knet-s3_r50-d8_pspnet_8xb2-adamw-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_pspnet_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_pspnet_r50-d8_8x2_512x512_adamw_80k_ade20k_20220228_054634-d2c72240.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_pspnet_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_pspnet_r50-d8_8x2_512x512_adamw_80k_ade20k_20220228_054634.log.json) | -| KNet + DeepLabV3 | R-50-D8 | 512x512 | 80000 | 7.42 | 12.10 | 45.06 | 46.11 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/knet/knet-s3_r50-d8_deeplabv3_8xb2-adamw-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_deeplabv3_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_deeplabv3_r50-d8_8x2_512x512_adamw_80k_ade20k_20220228_041642-00c8fbeb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_deeplabv3_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_deeplabv3_r50-d8_8x2_512x512_adamw_80k_ade20k_20220228_041642.log.json) | -| KNet + UperNet | R-50-D8 | 512x512 | 80000 | 7.34 | 17.11 | 43.45 | 44.07 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/knet/knet-s3_r50-d8_upernet_8xb2-adamw-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_upernet_r50-d8_8x2_512x512_adamw_80k_ade20k_20220304_125657-215753b0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_upernet_r50-d8_8x2_512x512_adamw_80k_ade20k_20220304_125657.log.json) | -| KNet + UperNet | Swin-T | 512x512 | 80000 | 7.57 | 15.56 | 45.84 | 46.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/knet/knet-s3_swin-t_upernet_8xb2-adamw-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_swin-t_8x2_512x512_adamw_80k_ade20k/knet_s3_upernet_swin-t_8x2_512x512_adamw_80k_ade20k_20220303_133059-7545e1dc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_swin-t_8x2_512x512_adamw_80k_ade20k/knet_s3_upernet_swin-t_8x2_512x512_adamw_80k_ade20k_20220303_133059.log.json) | -| KNet + UperNet | Swin-L | 512x512 | 80000 | 13.5 | 8.29 | 52.05 | 53.24 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/knet/knet-s3_swin-l_upernet_8xb2-adamw-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_swin-l_8x2_512x512_adamw_80k_ade20k/knet_s3_upernet_swin-l_8x2_512x512_adamw_80k_ade20k_20220303_154559-d8da9a90.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_swin-l_8x2_512x512_adamw_80k_ade20k/knet_s3_upernet_swin-l_8x2_512x512_adamw_80k_ade20k_20220303_154559.log.json) | -| KNet + UperNet | Swin-L | 640x640 | 80000 | 13.54 | 8.29 | 52.21 | 53.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/knet/knet-s3_swin-l_upernet_8xb2-adamw-80k_ade20k-640x640.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_swin-l_8x2_640x640_adamw_80k_ade20k/knet_s3_upernet_swin-l_8x2_640x640_adamw_80k_ade20k_20220301_220747-8787fc71.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_swin-l_8x2_640x640_adamw_80k_ade20k/knet_s3_upernet_swin-l_8x2_640x640_adamw_80k_ade20k_20220301_220747.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------------- | -------- | --------- | ------- | -------- | -------------- | ------ | ----- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| KNet + FCN | R-50-D8 | 512x512 | 80000 | 7.01 | 19.24 | V100 | 43.60 | 45.12 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/knet/knet-s3_r50-d8_fcn_8xb2-adamw-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_fcn_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_fcn_r50-d8_8x2_512x512_adamw_80k_ade20k_20220228_043751-abcab920.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_fcn_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_fcn_r50-d8_8x2_512x512_adamw_80k_ade20k_20220228_043751.log.json) | +| KNet + PSPNet | R-50-D8 | 512x512 | 80000 | 6.98 | 20.04 | V100 | 44.18 | 45.58 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/knet/knet-s3_r50-d8_pspnet_8xb2-adamw-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_pspnet_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_pspnet_r50-d8_8x2_512x512_adamw_80k_ade20k_20220228_054634-d2c72240.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_pspnet_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_pspnet_r50-d8_8x2_512x512_adamw_80k_ade20k_20220228_054634.log.json) | +| KNet + DeepLabV3 | R-50-D8 | 512x512 | 80000 | 7.42 | 12.10 | V100 | 45.06 | 46.11 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/knet/knet-s3_r50-d8_deeplabv3_8xb2-adamw-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_deeplabv3_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_deeplabv3_r50-d8_8x2_512x512_adamw_80k_ade20k_20220228_041642-00c8fbeb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_deeplabv3_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_deeplabv3_r50-d8_8x2_512x512_adamw_80k_ade20k_20220228_041642.log.json) | +| KNet + UperNet | R-50-D8 | 512x512 | 80000 | 7.34 | 17.11 | V100 | 43.45 | 44.07 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/knet/knet-s3_r50-d8_upernet_8xb2-adamw-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_upernet_r50-d8_8x2_512x512_adamw_80k_ade20k_20220304_125657-215753b0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_upernet_r50-d8_8x2_512x512_adamw_80k_ade20k_20220304_125657.log.json) | +| KNet + UperNet | Swin-T | 512x512 | 80000 | 7.57 | 15.56 | V100 | 45.84 | 46.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/knet/knet-s3_swin-t_upernet_8xb2-adamw-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_swin-t_8x2_512x512_adamw_80k_ade20k/knet_s3_upernet_swin-t_8x2_512x512_adamw_80k_ade20k_20220303_133059-7545e1dc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_swin-t_8x2_512x512_adamw_80k_ade20k/knet_s3_upernet_swin-t_8x2_512x512_adamw_80k_ade20k_20220303_133059.log.json) | +| KNet + UperNet | Swin-L | 512x512 | 80000 | 13.5 | 8.29 | V100 | 52.05 | 53.24 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/knet/knet-s3_swin-l_upernet_8xb2-adamw-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_swin-l_8x2_512x512_adamw_80k_ade20k/knet_s3_upernet_swin-l_8x2_512x512_adamw_80k_ade20k_20220303_154559-d8da9a90.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_swin-l_8x2_512x512_adamw_80k_ade20k/knet_s3_upernet_swin-l_8x2_512x512_adamw_80k_ade20k_20220303_154559.log.json) | +| KNet + UperNet | Swin-L | 640x640 | 80000 | 13.54 | 8.29 | V100 | 52.21 | 53.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/knet/knet-s3_swin-l_upernet_8xb2-adamw-80k_ade20k-640x640.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_swin-l_8x2_640x640_adamw_80k_ade20k/knet_s3_upernet_swin-l_8x2_640x640_adamw_80k_ade20k_20220301_220747-8787fc71.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_swin-l_8x2_640x640_adamw_80k_ade20k/knet_s3_upernet_swin-l_8x2_640x640_adamw_80k_ade20k_20220301_220747.log.json) | Note: - All experiments of K-Net are implemented with 8 V100 (32G) GPUs with 2 samplers per GPU. + +# Citation + +```bibtex +@inproceedings{zhang2021knet, + title={{K-Net: Towards} Unified Image Segmentation}, + author={Wenwei Zhang and Jiangmiao Pang and Kai Chen and Chen Change Loy}, + year={2021}, + booktitle={NeurIPS}, +} +``` diff --git a/configs/knet/knet.yml b/configs/knet/knet.yml deleted file mode 100644 index 1c98e4703c..0000000000 --- a/configs/knet/knet.yml +++ /dev/null @@ -1,169 +0,0 @@ -Collections: -- Name: KNet - Metadata: - Training Data: - - ADE20K - Paper: - URL: https://arxiv.org/abs/2106.14855 - Title: 'K-Net: Towards Unified Image Segmentation' - README: configs/knet/README.md - Code: - URL: https://github.com/open-mmlab/mmsegmentation/blob/v0.23.0/mmseg/models/decode_heads/knet_head.py#L392 - Version: v0.23.0 - Converted From: - Code: https://github.com/ZwwWayne/K-Net/ -Models: -- Name: knet-s3_r50-d8_fcn_8xb2-adamw-80k_ade20k-512x512 - In Collection: KNet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 51.98 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 7.01 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 43.6 - mIoU(ms+flip): 45.12 - Config: configs/knet/knet-s3_r50-d8_fcn_8xb2-adamw-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_fcn_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_fcn_r50-d8_8x2_512x512_adamw_80k_ade20k_20220228_043751-abcab920.pth -- Name: knet-s3_r50-d8_pspnet_8xb2-adamw-80k_ade20k-512x512 - In Collection: KNet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 49.9 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 6.98 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 44.18 - mIoU(ms+flip): 45.58 - Config: configs/knet/knet-s3_r50-d8_pspnet_8xb2-adamw-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_pspnet_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_pspnet_r50-d8_8x2_512x512_adamw_80k_ade20k_20220228_054634-d2c72240.pth -- Name: knet-s3_r50-d8_deeplabv3_8xb2-adamw-80k_ade20k-512x512 - In Collection: KNet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 82.64 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 7.42 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 45.06 - mIoU(ms+flip): 46.11 - Config: configs/knet/knet-s3_r50-d8_deeplabv3_8xb2-adamw-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_deeplabv3_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_deeplabv3_r50-d8_8x2_512x512_adamw_80k_ade20k_20220228_041642-00c8fbeb.pth -- Name: knet-s3_r50-d8_upernet_8xb2-adamw-80k_ade20k-512x512 - In Collection: KNet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 58.45 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 7.34 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 43.45 - mIoU(ms+flip): 44.07 - Config: configs/knet/knet-s3_r50-d8_upernet_8xb2-adamw-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_upernet_r50-d8_8x2_512x512_adamw_80k_ade20k_20220304_125657-215753b0.pth -- Name: knet-s3_swin-t_upernet_8xb2-adamw-80k_ade20k-512x512 - In Collection: KNet - Metadata: - backbone: Swin-T - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 64.27 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 7.57 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 45.84 - mIoU(ms+flip): 46.27 - Config: configs/knet/knet-s3_swin-t_upernet_8xb2-adamw-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_swin-t_8x2_512x512_adamw_80k_ade20k/knet_s3_upernet_swin-t_8x2_512x512_adamw_80k_ade20k_20220303_133059-7545e1dc.pth -- Name: knet-s3_swin-l_upernet_8xb2-adamw-80k_ade20k-512x512 - In Collection: KNet - Metadata: - backbone: Swin-L - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 120.63 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 13.5 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 52.05 - mIoU(ms+flip): 53.24 - Config: configs/knet/knet-s3_swin-l_upernet_8xb2-adamw-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_swin-l_8x2_512x512_adamw_80k_ade20k/knet_s3_upernet_swin-l_8x2_512x512_adamw_80k_ade20k_20220303_154559-d8da9a90.pth -- Name: knet-s3_swin-l_upernet_8xb2-adamw-80k_ade20k-640x640 - In Collection: KNet - Metadata: - backbone: Swin-L - crop size: (640,640) - lr schd: 80000 - inference time (ms/im): - - value: 120.63 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (640,640) - Training Memory (GB): 13.54 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 52.21 - mIoU(ms+flip): 53.34 - Config: configs/knet/knet-s3_swin-l_upernet_8xb2-adamw-80k_ade20k-640x640.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_swin-l_8x2_640x640_adamw_80k_ade20k/knet_s3_upernet_swin-l_8x2_640x640_adamw_80k_ade20k_20220301_220747-8787fc71.pth diff --git a/configs/knet/metafile.yaml b/configs/knet/metafile.yaml new file mode 100644 index 0000000000..0f4ab79609 --- /dev/null +++ b/configs/knet/metafile.yaml @@ -0,0 +1,188 @@ +Collections: +- Name: KNet + License: Apache License 2.0 + Metadata: + Training Data: + - ADE20K + Paper: + Title: 'K-Net: Towards Unified Image Segmentation' + URL: https://arxiv.org/abs/2106.14855 + README: configs/knet/README.md + Frameworks: + - PyTorch +Models: +- Name: knet-s3_r50-d8_fcn_8xb2-adamw-80k_ade20k-512x512 + In Collection: KNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 43.6 + mIoU(ms+flip): 45.12 + Config: configs/knet/knet-s3_r50-d8_fcn_8xb2-adamw-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50-D8 + - KNet + - FCN + Training Resources: 8x V100 GPUS + Memory (GB): 7.01 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_fcn_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_fcn_r50-d8_8x2_512x512_adamw_80k_ade20k_20220228_043751-abcab920.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_fcn_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_fcn_r50-d8_8x2_512x512_adamw_80k_ade20k_20220228_043751.log.json + Paper: + Title: 'K-Net: Towards Unified Image Segmentation' + URL: https://arxiv.org/abs/2106.14855 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.23.0/mmseg/models/decode_heads/knet_head.py#L392 + Framework: PyTorch +- Name: knet-s3_r50-d8_pspnet_8xb2-adamw-80k_ade20k-512x512 + In Collection: KNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 44.18 + mIoU(ms+flip): 45.58 + Config: configs/knet/knet-s3_r50-d8_pspnet_8xb2-adamw-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50-D8 + - KNet + - PSPNet + Training Resources: 8x V100 GPUS + Memory (GB): 6.98 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_pspnet_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_pspnet_r50-d8_8x2_512x512_adamw_80k_ade20k_20220228_054634-d2c72240.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_pspnet_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_pspnet_r50-d8_8x2_512x512_adamw_80k_ade20k_20220228_054634.log.json + Paper: + Title: 'K-Net: Towards Unified Image Segmentation' + URL: https://arxiv.org/abs/2106.14855 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.23.0/mmseg/models/decode_heads/knet_head.py#L392 + Framework: PyTorch +- Name: knet-s3_r50-d8_deeplabv3_8xb2-adamw-80k_ade20k-512x512 + In Collection: KNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 45.06 + mIoU(ms+flip): 46.11 + Config: configs/knet/knet-s3_r50-d8_deeplabv3_8xb2-adamw-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50-D8 + - KNet + - DeepLabV3 + Training Resources: 8x V100 GPUS + Memory (GB): 7.42 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_deeplabv3_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_deeplabv3_r50-d8_8x2_512x512_adamw_80k_ade20k_20220228_041642-00c8fbeb.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_deeplabv3_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_deeplabv3_r50-d8_8x2_512x512_adamw_80k_ade20k_20220228_041642.log.json + Paper: + Title: 'K-Net: Towards Unified Image Segmentation' + URL: https://arxiv.org/abs/2106.14855 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.23.0/mmseg/models/decode_heads/knet_head.py#L392 + Framework: PyTorch +- Name: knet-s3_r50-d8_upernet_8xb2-adamw-80k_ade20k-512x512 + In Collection: KNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 43.45 + mIoU(ms+flip): 44.07 + Config: configs/knet/knet-s3_r50-d8_upernet_8xb2-adamw-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50-D8 + - KNet + - UperNet + Training Resources: 8x V100 GPUS + Memory (GB): 7.34 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_upernet_r50-d8_8x2_512x512_adamw_80k_ade20k_20220304_125657-215753b0.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_upernet_r50-d8_8x2_512x512_adamw_80k_ade20k_20220304_125657.log.json + Paper: + Title: 'K-Net: Towards Unified Image Segmentation' + URL: https://arxiv.org/abs/2106.14855 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.23.0/mmseg/models/decode_heads/knet_head.py#L392 + Framework: PyTorch +- Name: knet-s3_swin-t_upernet_8xb2-adamw-80k_ade20k-512x512 + In Collection: KNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 45.84 + mIoU(ms+flip): 46.27 + Config: configs/knet/knet-s3_swin-t_upernet_8xb2-adamw-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - Swin-T + - KNet + - UperNet + Training Resources: 8x V100 GPUS + Memory (GB): 7.57 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_swin-t_8x2_512x512_adamw_80k_ade20k/knet_s3_upernet_swin-t_8x2_512x512_adamw_80k_ade20k_20220303_133059-7545e1dc.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_swin-t_8x2_512x512_adamw_80k_ade20k/knet_s3_upernet_swin-t_8x2_512x512_adamw_80k_ade20k_20220303_133059.log.json + Paper: + Title: 'K-Net: Towards Unified Image Segmentation' + URL: https://arxiv.org/abs/2106.14855 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.23.0/mmseg/models/decode_heads/knet_head.py#L392 + Framework: PyTorch +- Name: knet-s3_swin-l_upernet_8xb2-adamw-80k_ade20k-512x512 + In Collection: KNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 52.05 + mIoU(ms+flip): 53.24 + Config: configs/knet/knet-s3_swin-l_upernet_8xb2-adamw-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - Swin-L + - KNet + - UperNet + Training Resources: 8x V100 GPUS + Memory (GB): 13.5 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_swin-l_8x2_512x512_adamw_80k_ade20k/knet_s3_upernet_swin-l_8x2_512x512_adamw_80k_ade20k_20220303_154559-d8da9a90.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_swin-l_8x2_512x512_adamw_80k_ade20k/knet_s3_upernet_swin-l_8x2_512x512_adamw_80k_ade20k_20220303_154559.log.json + Paper: + Title: 'K-Net: Towards Unified Image Segmentation' + URL: https://arxiv.org/abs/2106.14855 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.23.0/mmseg/models/decode_heads/knet_head.py#L392 + Framework: PyTorch +- Name: knet-s3_swin-l_upernet_8xb2-adamw-80k_ade20k-640x640 + In Collection: KNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 52.21 + mIoU(ms+flip): 53.34 + Config: configs/knet/knet-s3_swin-l_upernet_8xb2-adamw-80k_ade20k-640x640.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - Swin-L + - KNet + - UperNet + Training Resources: 8x V100 GPUS + Memory (GB): 13.54 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_swin-l_8x2_640x640_adamw_80k_ade20k/knet_s3_upernet_swin-l_8x2_640x640_adamw_80k_ade20k_20220301_220747-8787fc71.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_swin-l_8x2_640x640_adamw_80k_ade20k/knet_s3_upernet_swin-l_8x2_640x640_adamw_80k_ade20k_20220301_220747.log.json + Paper: + Title: 'K-Net: Towards Unified Image Segmentation' + URL: https://arxiv.org/abs/2106.14855 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.23.0/mmseg/models/decode_heads/knet_head.py#L392 + Framework: PyTorch diff --git a/configs/mae/README.md b/configs/mae/README.md index 330749732e..94ade08823 100644 --- a/configs/mae/README.md +++ b/configs/mae/README.md @@ -1,6 +1,6 @@ # MAE -[Masked Autoencoders Are Scalable Vision Learners](https://arxiv.org/abs/2111.06377) +> [Masked Autoencoders Are Scalable Vision Learners](https://arxiv.org/abs/2111.06377) ## Introduction @@ -22,17 +22,6 @@ This paper shows that masked autoencoders (MAE) are scalable self-supervised lea -## Citation - -```bibtex -@article{he2021masked, - title={Masked autoencoders are scalable vision learners}, - author={He, Kaiming and Chen, Xinlei and Xie, Saining and Li, Yanghao and Doll{\'a}r, Piotr and Girshick, Ross}, - journal={arXiv preprint arXiv:2111.06377}, - year={2021} -} -``` - ## Usage To use other repositories' pre-trained models, it is necessary to convert keys. @@ -77,6 +66,17 @@ upernet_mae-base_fp16_8x2_512x512_160k_ade20k_20220426_174752-f92a2975.pth $GPUS ### ADE20K -| Method | Backbone | Crop Size | pretrain | pretrain img size | Batch Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------- | -------- | --------- | ----------- | ----------------- | ---------- | ------- | -------- | -------------- | ----- | ------------: | -------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| UPerNet | ViT-B | 512x512 | ImageNet-1K | 224x224 | 16 | 160000 | 9.96 | 7.14 | 48.13 | 48.70 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mae/mae-base_upernet_8xb2-amp-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mae/upernet_mae-base_fp16_8x2_512x512_160k_ade20k/upernet_mae-base_fp16_8x2_512x512_160k_ade20k_20220426_174752-f92a2975.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mae/upernet_mae-base_fp16_8x2_512x512_160k_ade20k/upernet_mae-base_fp16_8x2_512x512_160k_ade20k_20220426_174752.log.json) | +| Method | Backbone | Crop Size | pretrain | pretrain img size | Batch Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------- | -------- | --------- | ----------- | ----------------- | ---------- | ------- | -------- | -------------- | ------ | ----- | ------------: | -------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| UPerNet | ViT-B | 512x512 | ImageNet-1K | 224x224 | 16 | 160000 | 9.96 | 7.14 | V100 | 48.13 | 48.70 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mae/mae-base_upernet_8xb2-amp-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mae/upernet_mae-base_fp16_8x2_512x512_160k_ade20k/upernet_mae-base_fp16_8x2_512x512_160k_ade20k_20220426_174752-f92a2975.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mae/upernet_mae-base_fp16_8x2_512x512_160k_ade20k/upernet_mae-base_fp16_8x2_512x512_160k_ade20k_20220426_174752.log.json) | + +## Citation + +```bibtex +@article{he2021masked, + title={Masked autoencoders are scalable vision learners}, + author={He, Kaiming and Chen, Xinlei and Xie, Saining and Li, Yanghao and Doll{\'a}r, Piotr and Girshick, Ross}, + journal={arXiv preprint arXiv:2111.06377}, + year={2021} +} +``` diff --git a/configs/mae/mae.yml b/configs/mae/mae.yml deleted file mode 100644 index 72b2cc7f12..0000000000 --- a/configs/mae/mae.yml +++ /dev/null @@ -1,23 +0,0 @@ -Models: -- Name: mae-base_upernet_8xb2-amp-160k_ade20k-512x512 - In Collection: UPerNet - Metadata: - backbone: ViT-B - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 140.06 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: AMP - resolution: (512,512) - Training Memory (GB): 9.96 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 48.13 - mIoU(ms+flip): 48.7 - Config: configs/mae/mae-base_upernet_8xb2-amp-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mae/upernet_mae-base_fp16_8x2_512x512_160k_ade20k/upernet_mae-base_fp16_8x2_512x512_160k_ade20k_20220426_174752-f92a2975.pth diff --git a/configs/mae/metafile.yaml b/configs/mae/metafile.yaml new file mode 100644 index 0000000000..567eafe131 --- /dev/null +++ b/configs/mae/metafile.yaml @@ -0,0 +1,25 @@ +Models: +- Name: mae-base_upernet_8xb2-amp-160k_ade20k-512x512 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 48.13 + mIoU(ms+flip): 48.7 + Config: configs/mae/mae-base_upernet_8xb2-amp-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - ViT-B + - UPerNet + Training Resources: 8x V100 GPUS + Memory (GB): 9.96 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mae/upernet_mae-base_fp16_8x2_512x512_160k_ade20k/upernet_mae-base_fp16_8x2_512x512_160k_ade20k_20220426_174752-f92a2975.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/mae/upernet_mae-base_fp16_8x2_512x512_160k_ade20k/upernet_mae-base_fp16_8x2_512x512_160k_ade20k_20220426_174752.log.json + Paper: + Title: Masked Autoencoders Are Scalable Vision Learners + URL: https://arxiv.org/abs/2111.06377 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.24.0/mmseg/models/backbones/mae.py#L46 + Framework: PyTorch diff --git a/configs/mask2former/README.md b/configs/mask2former/README.md index 1861fec3b1..02639bef58 100644 --- a/configs/mask2former/README.md +++ b/configs/mask2former/README.md @@ -1,6 +1,6 @@ # Mask2Former -[Masked-attention Mask Transformer for Universal Image Segmentation](https://arxiv.org/abs/2112.01527) +> [Masked-attention Mask Transformer for Universal Image Segmentation](https://arxiv.org/abs/2112.01527) ## Introduction @@ -16,21 +16,6 @@ Image segmentation is about grouping pixels with different semantics, e.g., category or instance membership, where each choice of semantics defines a task. While only the semantics of each task differ, current research focuses on designing specialized architectures for each task. We present Masked-attention Mask Transformer (Mask2Former), a new architecture capable of addressing any image segmentation task (panoptic, instance or semantic). Its key components include masked attention, which extracts localized features by constraining cross-attention within predicted mask regions. In addition to reducing the research effort by at least three times, it outperforms the best specialized architectures by a significant margin on four popular datasets. Most notably, Mask2Former sets a new state-of-the-art for panoptic segmentation (57.8 PQ on COCO), instance segmentation (50.1 AP on COCO) and semantic segmentation (57.7 mIoU on ADE20K). -```bibtex -@inproceedings{cheng2021mask2former, - title={Masked-attention Mask Transformer for Universal Image Segmentation}, - author={Bowen Cheng and Ishan Misra and Alexander G. Schwing and Alexander Kirillov and Rohit Girdhar}, - journal={CVPR}, - year={2022} -} -@inproceedings{cheng2021maskformer, - title={Per-Pixel Classification is Not All You Need for Semantic Segmentation}, - author={Bowen Cheng and Alexander G. Schwing and Alexander Kirillov}, - journal={NeurIPS}, - year={2021} -} -``` - ### Usage - Mask2Former model needs to install [MMDetection](https://github.com/open-mmlab/mmdetection) first. @@ -43,26 +28,26 @@ pip install "mmdet>=3.0.0rc4" ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ----------- | -------------- | --------- | ------- | -------: | -------------- | ----- | ------------: | -----------------------------------------------------------------------------------------------------------------------------------------------------------: | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Mask2Former | R-50-D32 | 512x1024 | 90000 | 5806 | 9.17 | 80.44 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_r50_8xb2-90k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r50_8xb2-90k_cityscapes-512x1024/mask2former_r50_8xb2-90k_cityscapes-512x1024_20221202_140802-ffd9d750.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r50_8xb2-90k_cityscapes-512x1024/mask2former_r50_8xb2-90k_cityscapes-512x1024_20221202_140802.json) | -| Mask2Former | R-101-D32 | 512x1024 | 90000 | 6971 | 7.11 | 80.80 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_r101_8xb2-90k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r101_8xb2-90k_cityscapes-512x1024/mask2former_r101_8xb2-90k_cityscapes-512x1024_20221130_031628-43e68666.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r101_8xb2-90k_cityscapes-512x1024/mask2former_r101_8xb2-90k_cityscapes-512x1024_20221130_031628.json)) | -| Mask2Former | Swin-T | 512x1024 | 90000 | 6511 | 7.18 | 81.71 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_swin-t_8xb2-90k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-t_8xb2-90k_cityscapes-512x1024/mask2former_swin-t_8xb2-90k_cityscapes-512x1024_20221127_144501-36c59341.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-t_8xb2-90k_cityscapes-512x1024/mask2former_swin-t_8xb2-90k_cityscapes-512x1024_20221127_144501.json)) | -| Mask2Former | Swin-S | 512x1024 | 90000 | 8282 | 5.57 | 82.57 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_swin-s_8xb2-90k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-s_8xb2-90k_cityscapes-512x1024/mask2former_swin-s_8xb2-90k_cityscapes-512x1024_20221127_143802-9ab177f6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-s_8xb2-90k_cityscapes-512x1024/mask2former_swin-s_8xb2-90k_cityscapes-512x1024_20221127_143802.json)) | -| Mask2Former | Swin-B (in22k) | 512x1024 | 90000 | 11152 | 4.32 | 83.52 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_swin-b-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-b-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024/mask2former_swin-b-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024_20221203_045030-9a86a225.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-b-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024/mask2former_swin-b-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024_20221203_045030.json)) | -| Mask2Former | Swin-L (in22k) | 512x1024 | 90000 | 16207 | 2.86 | 83.65 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_swin-l-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-l-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024/mask2former_swin-l-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024_20221202_141901-28ad20f1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-l-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024/mask2former_swin-l-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024_20221202_141901.json)) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ----------- | -------------- | --------- | ------- | -------: | -------------- | ------ | ----- | ------------: | -----------------------------------------------------------------------------------------------------------------------------------------------------------: | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Mask2Former | R-50-D32 | 512x1024 | 90000 | 5.67 | 9.17 | A100 | 80.44 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_r50_8xb2-90k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r50_8xb2-90k_cityscapes-512x1024/mask2former_r50_8xb2-90k_cityscapes-512x1024_20221202_140802-ffd9d750.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r50_8xb2-90k_cityscapes-512x1024/mask2former_r50_8xb2-90k_cityscapes-512x1024_20221202_140802.json) | +| Mask2Former | R-101-D32 | 512x1024 | 90000 | 6.81 | 7.11 | A100 | 80.80 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_r101_8xb2-90k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r101_8xb2-90k_cityscapes-512x1024/mask2former_r101_8xb2-90k_cityscapes-512x1024_20221130_031628-43e68666.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r101_8xb2-90k_cityscapes-512x1024/mask2former_r101_8xb2-90k_cityscapes-512x1024_20221130_031628.json)) | +| Mask2Former | Swin-T | 512x1024 | 90000 | 6.36 | 7.18 | A100 | 81.71 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_swin-t_8xb2-90k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-t_8xb2-90k_cityscapes-512x1024/mask2former_swin-t_8xb2-90k_cityscapes-512x1024_20221127_144501-36c59341.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-t_8xb2-90k_cityscapes-512x1024/mask2former_swin-t_8xb2-90k_cityscapes-512x1024_20221127_144501.json)) | +| Mask2Former | Swin-S | 512x1024 | 90000 | 8.09 | 5.57 | A100 | 82.57 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_swin-s_8xb2-90k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-s_8xb2-90k_cityscapes-512x1024/mask2former_swin-s_8xb2-90k_cityscapes-512x1024_20221127_143802-9ab177f6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-s_8xb2-90k_cityscapes-512x1024/mask2former_swin-s_8xb2-90k_cityscapes-512x1024_20221127_143802.json)) | +| Mask2Former | Swin-B (in22k) | 512x1024 | 90000 | 10.89 | 4.32 | A100 | 83.52 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_swin-b-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-b-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024/mask2former_swin-b-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024_20221203_045030-9a86a225.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-b-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024/mask2former_swin-b-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024_20221203_045030.json)) | +| Mask2Former | Swin-L (in22k) | 512x1024 | 90000 | 15.83 | 2.86 | A100 | 83.65 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_swin-l-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-l-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024/mask2former_swin-l-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024_20221202_141901-28ad20f1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-l-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024/mask2former_swin-l-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024_20221202_141901.json)) | ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ----------- | -------------- | --------- | ------- | -------: | -------------- | ----- | ------------: | -------------------------------------------------------------------------------------------------------------------------------------------------------: | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Mask2Former | R-50-D32 | 512x512 | 160000 | 3385 | 26.59 | 47.87 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_r50_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r50_8xb2-160k_ade20k-512x512/mask2former_r50_8xb2-160k_ade20k-512x512_20221204_000055-2d1f55f1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r50_8xb2-160k_ade20k-512x512/mask2former_r50_8xb2-160k_ade20k-512x512_20221204_000055.json)) | -| Mask2Former | R-101-D32 | 512x512 | 160000 | 4190 | 22.97 | 48.60 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_r101_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r101_8xb2-160k_ade20k-512x512/mask2former_r101_8xb2-160k_ade20k-512x512_20221203_233905-b7135890.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r101_8xb2-160k_ade20k-512x512/mask2former_r101_8xb2-160k_ade20k-512x512_20221203_233905.json)) | -| Mask2Former | Swin-T | 512x512 | 160000 | 3826 | 23.82 | 48.66 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_swin-t_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-t_8xb2-160k_ade20k-512x512/mask2former_swin-t_8xb2-160k_ade20k-512x512_20221203_234230-7d64e5dd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-t_8xb2-160k_ade20k-512x512/mask2former_swin-t_8xb2-160k_ade20k-512x512_20221203_234230.json)) | -| Mask2Former | Swin-S | 512x512 | 160000 | 5034 | 19.69 | 51.24 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_swin-s_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-s_8xb2-160k_ade20k-512x512/mask2former_swin-s_8xb2-160k_ade20k-512x512_20221204_143905-e715144e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-s_8xb2-160k_ade20k-512x512/mask2former_swin-s_8xb2-160k_ade20k-512x512_20221204_143905.json)) | -| Mask2Former | Swin-B | 640x640 | 160000 | 5795 | 12.48 | 52.44 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_swin-b-in1k-384x384-pre_8xb2-160k_ade20k-640x640.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-b-in1k-384x384-pre_8xb2-160k_ade20k-640x640/mask2former_swin-b-in1k-384x384-pre_8xb2-160k_ade20k-640x640_20221129_125118-a4a086d2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-b-in1k-384x384-pre_8xb2-160k_ade20k-640x640/mask2former_swin-b-in1k-384x384-pre_8xb2-160k_ade20k-640x640_20221129_125118.json)) | -| Mask2Former | Swin-B (in22k) | 640x640 | 160000 | 5795 | 12.43 | 53.90 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_swin-b-in22k-384x384-pre_8xb2-160k_ade20k-640x640.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-b-in22k-384x384-pre_8xb2-160k_ade20k-640x640/mask2former_swin-b-in22k-384x384-pre_8xb2-160k_ade20k-640x640_20221203_235230-7ec0f569.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-b-in22k-384x384-pre_8xb2-160k_ade20k-640x640/mask2former_swin-b-in22k-384x384-pre_8xb2-160k_ade20k-640x640_20221203_235230.json)) | -| Mask2Former | Swin-L (in22k) | 640x640 | 160000 | 9077 | 8.81 | 56.01 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_swin-l-in22k-384x384-pre_8xb2-160k_ade20k-640x640.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-l-in22k-384x384-pre_8xb2-160k_ade20k-640x640/mask2former_swin-l-in22k-384x384-pre_8xb2-160k_ade20k-640x640_20221203_235933-7120c214.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-l-in22k-384x384-pre_8xb2-160k_ade20k-640x640/mask2former_swin-l-in22k-384x384-pre_8xb2-160k_ade20k-640x640_20221203_235933.json)) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ----------- | -------------- | --------- | ------- | -------: | -------------- | ------ | ----- | ------------: | -------------------------------------------------------------------------------------------------------------------------------------------------------: | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Mask2Former | R-50-D32 | 512x512 | 160000 | 3.31 | 26.59 | A100 | 47.87 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_r50_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r50_8xb2-160k_ade20k-512x512/mask2former_r50_8xb2-160k_ade20k-512x512_20221204_000055-2d1f55f1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r50_8xb2-160k_ade20k-512x512/mask2former_r50_8xb2-160k_ade20k-512x512_20221204_000055.json)) | +| Mask2Former | R-101-D32 | 512x512 | 160000 | 4.09 | 22.97 | A100 | 48.60 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_r101_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r101_8xb2-160k_ade20k-512x512/mask2former_r101_8xb2-160k_ade20k-512x512_20221203_233905-b7135890.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r101_8xb2-160k_ade20k-512x512/mask2former_r101_8xb2-160k_ade20k-512x512_20221203_233905.json)) | +| Mask2Former | Swin-T | 512x512 | 160000 | 3826 | 23.82 | A100 | 48.66 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_swin-t_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-t_8xb2-160k_ade20k-512x512/mask2former_swin-t_8xb2-160k_ade20k-512x512_20221203_234230-7d64e5dd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-t_8xb2-160k_ade20k-512x512/mask2former_swin-t_8xb2-160k_ade20k-512x512_20221203_234230.json)) | +| Mask2Former | Swin-S | 512x512 | 160000 | 3.74 | 19.69 | A100 | 51.24 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_swin-s_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-s_8xb2-160k_ade20k-512x512/mask2former_swin-s_8xb2-160k_ade20k-512x512_20221204_143905-e715144e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-s_8xb2-160k_ade20k-512x512/mask2former_swin-s_8xb2-160k_ade20k-512x512_20221204_143905.json)) | +| Mask2Former | Swin-B | 640x640 | 160000 | 5.66 | 12.48 | A100 | 52.44 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_swin-b-in1k-384x384-pre_8xb2-160k_ade20k-640x640.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-b-in1k-384x384-pre_8xb2-160k_ade20k-640x640/mask2former_swin-b-in1k-384x384-pre_8xb2-160k_ade20k-640x640_20221129_125118-a4a086d2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-b-in1k-384x384-pre_8xb2-160k_ade20k-640x640/mask2former_swin-b-in1k-384x384-pre_8xb2-160k_ade20k-640x640_20221129_125118.json)) | +| Mask2Former | Swin-B (in22k) | 640x640 | 160000 | 5.66 | 12.43 | A100 | 53.90 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_swin-b-in22k-384x384-pre_8xb2-160k_ade20k-640x640.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-b-in22k-384x384-pre_8xb2-160k_ade20k-640x640/mask2former_swin-b-in22k-384x384-pre_8xb2-160k_ade20k-640x640_20221203_235230-7ec0f569.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-b-in22k-384x384-pre_8xb2-160k_ade20k-640x640/mask2former_swin-b-in22k-384x384-pre_8xb2-160k_ade20k-640x640_20221203_235230.json)) | +| Mask2Former | Swin-L (in22k) | 640x640 | 160000 | 8.86 | 8.81 | A100 | 56.01 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_swin-l-in22k-384x384-pre_8xb2-160k_ade20k-640x640.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-l-in22k-384x384-pre_8xb2-160k_ade20k-640x640/mask2former_swin-l-in22k-384x384-pre_8xb2-160k_ade20k-640x640_20221203_235933-7120c214.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-l-in22k-384x384-pre_8xb2-160k_ade20k-640x640/mask2former_swin-l-in22k-384x384-pre_8xb2-160k_ade20k-640x640_20221203_235933.json)) | Note: @@ -70,3 +55,20 @@ Note: - As mentioned at [the official repo](https://github.com/facebookresearch/Mask2Former/issues/5), the results of Mask2Former are relatively not stable, the result of Mask2Former(swin-s) on ADE20K dataset in the table is the medium result obtained by training 5 times following the suggestion of the author. - The ResNet backbones utilized in MaskFormer models are standard `ResNet` rather than `ResNetV1c`. - Test time augmentation is not supported in MMSegmentation 1.x version yet, we would add "ms+flip" results as soon as possible. + +## Citation + +```bibtex +@inproceedings{cheng2021mask2former, + title={Masked-attention Mask Transformer for Universal Image Segmentation}, + author={Bowen Cheng and Ishan Misra and Alexander G. Schwing and Alexander Kirillov and Rohit Girdhar}, + journal={CVPR}, + year={2022} +} +@inproceedings{cheng2021maskformer, + title={Per-Pixel Classification is Not All You Need for Semantic Segmentation}, + author={Bowen Cheng and Alexander G. Schwing and Alexander Kirillov}, + journal={NeurIPS}, + year={2021} +} +``` diff --git a/configs/mask2former/mask2former.yml b/configs/mask2former/mask2former.yml deleted file mode 100644 index 4e33766c70..0000000000 --- a/configs/mask2former/mask2former.yml +++ /dev/null @@ -1,290 +0,0 @@ -Collections: -- Name: Mask2Former - Metadata: - Training Data: - - Usage - - Cityscapes - - ADE20K - Paper: - URL: https://arxiv.org/abs/2112.01527 - Title: Masked-attention Mask Transformer for Universal Image Segmentation - README: configs/mask2former/README.md - Code: - URL: https://github.com/open-mmlab/mmdetection/blob/3.x/mmdet/models/dense_heads/mask2former_head.py - Version: 3.x - Converted From: - Code: https://github.com/facebookresearch/Mask2Former -Models: -- Name: mask2former_r50_8xb2-90k_cityscapes-512x1024 - In Collection: Mask2Former - Metadata: - backbone: R-50-D32 - crop size: (512,1024) - lr schd: 90000 - inference time (ms/im): - - value: 109.05 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 5806.0 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 80.44 - Config: configs/mask2former/mask2former_r50_8xb2-90k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r50_8xb2-90k_cityscapes-512x1024/mask2former_r50_8xb2-90k_cityscapes-512x1024_20221202_140802-ffd9d750.pth -- Name: mask2former_r101_8xb2-90k_cityscapes-512x1024 - In Collection: Mask2Former - Metadata: - backbone: R-101-D32 - crop size: (512,1024) - lr schd: 90000 - inference time (ms/im): - - value: 140.65 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 6971.0 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 80.8 - Config: configs/mask2former/mask2former_r101_8xb2-90k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r101_8xb2-90k_cityscapes-512x1024/mask2former_r101_8xb2-90k_cityscapes-512x1024_20221130_031628-43e68666.pth -- Name: mask2former_swin-t_8xb2-90k_cityscapes-512x1024 - In Collection: Mask2Former - Metadata: - backbone: Swin-T - crop size: (512,1024) - lr schd: 90000 - inference time (ms/im): - - value: 139.28 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 6511.0 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 81.71 - Config: configs/mask2former/mask2former_swin-t_8xb2-90k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-t_8xb2-90k_cityscapes-512x1024/mask2former_swin-t_8xb2-90k_cityscapes-512x1024_20221127_144501-36c59341.pth -- Name: mask2former_swin-s_8xb2-90k_cityscapes-512x1024 - In Collection: Mask2Former - Metadata: - backbone: Swin-S - crop size: (512,1024) - lr schd: 90000 - inference time (ms/im): - - value: 179.53 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 8282.0 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 82.57 - Config: configs/mask2former/mask2former_swin-s_8xb2-90k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-s_8xb2-90k_cityscapes-512x1024/mask2former_swin-s_8xb2-90k_cityscapes-512x1024_20221127_143802-9ab177f6.pth -- Name: mask2former_swin-b-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024 - In Collection: Mask2Former - Metadata: - backbone: Swin-B (in22k) - crop size: (512,1024) - lr schd: 90000 - inference time (ms/im): - - value: 231.48 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 11152.0 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 83.52 - Config: configs/mask2former/mask2former_swin-b-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-b-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024/mask2former_swin-b-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024_20221203_045030-9a86a225.pth -- Name: mask2former_swin-l-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024 - In Collection: Mask2Former - Metadata: - backbone: Swin-L (in22k) - crop size: (512,1024) - lr schd: 90000 - inference time (ms/im): - - value: 349.65 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 16207.0 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 83.65 - Config: configs/mask2former/mask2former_swin-l-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-l-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024/mask2former_swin-l-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024_20221202_141901-28ad20f1.pth -- Name: mask2former_r50_8xb2-160k_ade20k-512x512 - In Collection: Mask2Former - Metadata: - backbone: R-50-D32 - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 37.61 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 3385.0 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 47.87 - Config: configs/mask2former/mask2former_r50_8xb2-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r50_8xb2-160k_ade20k-512x512/mask2former_r50_8xb2-160k_ade20k-512x512_20221204_000055-2d1f55f1.pth -- Name: mask2former_r101_8xb2-160k_ade20k-512x512 - In Collection: Mask2Former - Metadata: - backbone: R-101-D32 - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 43.54 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 4190.0 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 48.6 - Config: configs/mask2former/mask2former_r101_8xb2-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r101_8xb2-160k_ade20k-512x512/mask2former_r101_8xb2-160k_ade20k-512x512_20221203_233905-b7135890.pth -- Name: mask2former_swin-t_8xb2-160k_ade20k-512x512 - In Collection: Mask2Former - Metadata: - backbone: Swin-T - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 41.98 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 3826.0 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 48.66 - Config: configs/mask2former/mask2former_swin-t_8xb2-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-t_8xb2-160k_ade20k-512x512/mask2former_swin-t_8xb2-160k_ade20k-512x512_20221203_234230-7d64e5dd.pth -- Name: mask2former_swin-s_8xb2-160k_ade20k-512x512 - In Collection: Mask2Former - Metadata: - backbone: Swin-S - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 50.79 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 5034.0 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 51.24 - Config: configs/mask2former/mask2former_swin-s_8xb2-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-s_8xb2-160k_ade20k-512x512/mask2former_swin-s_8xb2-160k_ade20k-512x512_20221204_143905-e715144e.pth -- Name: mask2former_swin-b-in1k-384x384-pre_8xb2-160k_ade20k-640x640 - In Collection: Mask2Former - Metadata: - backbone: Swin-B - crop size: (640,640) - lr schd: 160000 - inference time (ms/im): - - value: 80.13 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (640,640) - Training Memory (GB): 5795.0 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 52.44 - Config: configs/mask2former/mask2former_swin-b-in1k-384x384-pre_8xb2-160k_ade20k-640x640.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-b-in1k-384x384-pre_8xb2-160k_ade20k-640x640/mask2former_swin-b-in1k-384x384-pre_8xb2-160k_ade20k-640x640_20221129_125118-a4a086d2.pth -- Name: mask2former_swin-b-in22k-384x384-pre_8xb2-160k_ade20k-640x640 - In Collection: Mask2Former - Metadata: - backbone: Swin-B (in22k) - crop size: (640,640) - lr schd: 160000 - inference time (ms/im): - - value: 80.45 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (640,640) - Training Memory (GB): 5795.0 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 53.9 - Config: configs/mask2former/mask2former_swin-b-in22k-384x384-pre_8xb2-160k_ade20k-640x640.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-b-in22k-384x384-pre_8xb2-160k_ade20k-640x640/mask2former_swin-b-in22k-384x384-pre_8xb2-160k_ade20k-640x640_20221203_235230-7ec0f569.pth -- Name: mask2former_swin-l-in22k-384x384-pre_8xb2-160k_ade20k-640x640 - In Collection: Mask2Former - Metadata: - backbone: Swin-L (in22k) - crop size: (640,640) - lr schd: 160000 - inference time (ms/im): - - value: 113.51 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (640,640) - Training Memory (GB): 9077.0 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 56.01 - Config: configs/mask2former/mask2former_swin-l-in22k-384x384-pre_8xb2-160k_ade20k-640x640.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-l-in22k-384x384-pre_8xb2-160k_ade20k-640x640/mask2former_swin-l-in22k-384x384-pre_8xb2-160k_ade20k-640x640_20221203_235933-7120c214.pth diff --git a/configs/mask2former/metafile.yaml b/configs/mask2former/metafile.yaml new file mode 100644 index 0000000000..090c95e7cf --- /dev/null +++ b/configs/mask2former/metafile.yaml @@ -0,0 +1,314 @@ +Collections: +- Name: Mask2Former + License: Apache License 2.0 + Metadata: + Training Data: + - Usage + - Cityscapes + - ADE20K + Paper: + Title: Masked-attention Mask Transformer for Universal Image Segmentation + URL: https://arxiv.org/abs/2112.01527 + README: configs/mask2former/README.md + Frameworks: + - PyTorch +Models: +- Name: mask2former_r50_8xb2-90k_cityscapes-512x1024 + In Collection: Mask2Former + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 80.44 + Config: configs/mask2former/mask2former_r50_8xb2-90k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 16 + Architecture: + - R-50-D32 + - Mask2Former + Training Resources: 8x A100 GPUS + Memory (GB): 5.67 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r50_8xb2-90k_cityscapes-512x1024/mask2former_r50_8xb2-90k_cityscapes-512x1024_20221202_140802-ffd9d750.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r50_8xb2-90k_cityscapes-512x1024/mask2former_r50_8xb2-90k_cityscapes-512x1024_20221202_140802.json + Paper: + Title: Masked-attention Mask Transformer for Universal Image Segmentation + URL: https://arxiv.org/abs/2112.01527 + Code: https://github.com/open-mmlab/mmdetection/blob/3.x/mmdet/models/dense_heads/mask2former_head.py + Framework: PyTorch +- Name: mask2former_r101_8xb2-90k_cityscapes-512x1024 + In Collection: Mask2Former + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 80.8 + Config: configs/mask2former/mask2former_r101_8xb2-90k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 16 + Architecture: + - R-101-D32 + - Mask2Former + Training Resources: 8x A100 GPUS + Memory (GB): 6.81 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r101_8xb2-90k_cityscapes-512x1024/mask2former_r101_8xb2-90k_cityscapes-512x1024_20221130_031628-43e68666.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r101_8xb2-90k_cityscapes-512x1024/mask2former_r101_8xb2-90k_cityscapes-512x1024_20221130_031628.json + Paper: + Title: Masked-attention Mask Transformer for Universal Image Segmentation + URL: https://arxiv.org/abs/2112.01527 + Code: https://github.com/open-mmlab/mmdetection/blob/3.x/mmdet/models/dense_heads/mask2former_head.py + Framework: PyTorch +- Name: mask2former_swin-t_8xb2-90k_cityscapes-512x1024 + In Collection: Mask2Former + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 81.71 + Config: configs/mask2former/mask2former_swin-t_8xb2-90k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 16 + Architecture: + - Swin-T + - Mask2Former + Training Resources: 8x A100 GPUS + Memory (GB): 6.36 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-t_8xb2-90k_cityscapes-512x1024/mask2former_swin-t_8xb2-90k_cityscapes-512x1024_20221127_144501-36c59341.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-t_8xb2-90k_cityscapes-512x1024/mask2former_swin-t_8xb2-90k_cityscapes-512x1024_20221127_144501.json + Paper: + Title: Masked-attention Mask Transformer for Universal Image Segmentation + URL: https://arxiv.org/abs/2112.01527 + Code: https://github.com/open-mmlab/mmdetection/blob/3.x/mmdet/models/dense_heads/mask2former_head.py + Framework: PyTorch +- Name: mask2former_swin-s_8xb2-90k_cityscapes-512x1024 + In Collection: Mask2Former + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 82.57 + Config: configs/mask2former/mask2former_swin-s_8xb2-90k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 16 + Architecture: + - Swin-S + - Mask2Former + Training Resources: 8x A100 GPUS + Memory (GB): 8.09 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-s_8xb2-90k_cityscapes-512x1024/mask2former_swin-s_8xb2-90k_cityscapes-512x1024_20221127_143802-9ab177f6.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-s_8xb2-90k_cityscapes-512x1024/mask2former_swin-s_8xb2-90k_cityscapes-512x1024_20221127_143802.json + Paper: + Title: Masked-attention Mask Transformer for Universal Image Segmentation + URL: https://arxiv.org/abs/2112.01527 + Code: https://github.com/open-mmlab/mmdetection/blob/3.x/mmdet/models/dense_heads/mask2former_head.py + Framework: PyTorch +- Name: mask2former_swin-b-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024 + In Collection: Mask2Former + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 83.52 + Config: configs/mask2former/mask2former_swin-b-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 16 + Architecture: + - Swin-B + - Mask2Former + Training Resources: 8x A100 GPUS + Memory (GB): 10.89 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-b-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024/mask2former_swin-b-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024_20221203_045030-9a86a225.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-b-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024/mask2former_swin-b-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024_20221203_045030.json + Paper: + Title: Masked-attention Mask Transformer for Universal Image Segmentation + URL: https://arxiv.org/abs/2112.01527 + Code: https://github.com/open-mmlab/mmdetection/blob/3.x/mmdet/models/dense_heads/mask2former_head.py + Framework: PyTorch +- Name: mask2former_swin-l-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024 + In Collection: Mask2Former + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 83.65 + Config: configs/mask2former/mask2former_swin-l-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 16 + Architecture: + - Swin-L + - Mask2Former + Training Resources: 8x A100 GPUS + Memory (GB): 15.83 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-l-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024/mask2former_swin-l-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024_20221202_141901-28ad20f1.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-l-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024/mask2former_swin-l-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024_20221202_141901.json + Paper: + Title: Masked-attention Mask Transformer for Universal Image Segmentation + URL: https://arxiv.org/abs/2112.01527 + Code: https://github.com/open-mmlab/mmdetection/blob/3.x/mmdet/models/dense_heads/mask2former_head.py + Framework: PyTorch +- Name: mask2former_r50_8xb2-160k_ade20k-512x512 + In Collection: Mask2Former + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 47.87 + Config: configs/mask2former/mask2former_r50_8xb2-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50-D32 + - Mask2Former + Training Resources: 8x A100 GPUS + Memory (GB): 3.31 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r50_8xb2-160k_ade20k-512x512/mask2former_r50_8xb2-160k_ade20k-512x512_20221204_000055-2d1f55f1.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r50_8xb2-160k_ade20k-512x512/mask2former_r50_8xb2-160k_ade20k-512x512_20221204_000055.json + Paper: + Title: Masked-attention Mask Transformer for Universal Image Segmentation + URL: https://arxiv.org/abs/2112.01527 + Code: https://github.com/open-mmlab/mmdetection/blob/3.x/mmdet/models/dense_heads/mask2former_head.py + Framework: PyTorch +- Name: mask2former_r101_8xb2-160k_ade20k-512x512 + In Collection: Mask2Former + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 48.6 + Config: configs/mask2former/mask2former_r101_8xb2-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-101-D32 + - Mask2Former + Training Resources: 8x A100 GPUS + Memory (GB): 4.09 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r101_8xb2-160k_ade20k-512x512/mask2former_r101_8xb2-160k_ade20k-512x512_20221203_233905-b7135890.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r101_8xb2-160k_ade20k-512x512/mask2former_r101_8xb2-160k_ade20k-512x512_20221203_233905.json + Paper: + Title: Masked-attention Mask Transformer for Universal Image Segmentation + URL: https://arxiv.org/abs/2112.01527 + Code: https://github.com/open-mmlab/mmdetection/blob/3.x/mmdet/models/dense_heads/mask2former_head.py + Framework: PyTorch +- Name: mask2former_swin-t_8xb2-160k_ade20k-512x512 + In Collection: Mask2Former + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 48.66 + Config: configs/mask2former/mask2former_swin-t_8xb2-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - Swin-T + - Mask2Former + Training Resources: 8x A100 GPUS + Memory (GB): 3826.0 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-t_8xb2-160k_ade20k-512x512/mask2former_swin-t_8xb2-160k_ade20k-512x512_20221203_234230-7d64e5dd.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-t_8xb2-160k_ade20k-512x512/mask2former_swin-t_8xb2-160k_ade20k-512x512_20221203_234230.json + Paper: + Title: Masked-attention Mask Transformer for Universal Image Segmentation + URL: https://arxiv.org/abs/2112.01527 + Code: https://github.com/open-mmlab/mmdetection/blob/3.x/mmdet/models/dense_heads/mask2former_head.py + Framework: PyTorch +- Name: mask2former_swin-s_8xb2-160k_ade20k-512x512 + In Collection: Mask2Former + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 51.24 + Config: configs/mask2former/mask2former_swin-s_8xb2-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - Swin-S + - Mask2Former + Training Resources: 8x A100 GPUS + Memory (GB): 3.74 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-s_8xb2-160k_ade20k-512x512/mask2former_swin-s_8xb2-160k_ade20k-512x512_20221204_143905-e715144e.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-s_8xb2-160k_ade20k-512x512/mask2former_swin-s_8xb2-160k_ade20k-512x512_20221204_143905.json + Paper: + Title: Masked-attention Mask Transformer for Universal Image Segmentation + URL: https://arxiv.org/abs/2112.01527 + Code: https://github.com/open-mmlab/mmdetection/blob/3.x/mmdet/models/dense_heads/mask2former_head.py + Framework: PyTorch +- Name: mask2former_swin-b-in1k-384x384-pre_8xb2-160k_ade20k-640x640 + In Collection: Mask2Former + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 52.44 + Config: configs/mask2former/mask2former_swin-b-in1k-384x384-pre_8xb2-160k_ade20k-640x640.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - Swin-B + - Mask2Former + Training Resources: 8x A100 GPUS + Memory (GB): 5.66 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-b-in1k-384x384-pre_8xb2-160k_ade20k-640x640/mask2former_swin-b-in1k-384x384-pre_8xb2-160k_ade20k-640x640_20221129_125118-a4a086d2.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-b-in1k-384x384-pre_8xb2-160k_ade20k-640x640/mask2former_swin-b-in1k-384x384-pre_8xb2-160k_ade20k-640x640_20221129_125118.json + Paper: + Title: Masked-attention Mask Transformer for Universal Image Segmentation + URL: https://arxiv.org/abs/2112.01527 + Code: https://github.com/open-mmlab/mmdetection/blob/3.x/mmdet/models/dense_heads/mask2former_head.py + Framework: PyTorch +- Name: mask2former_swin-b-in22k-384x384-pre_8xb2-160k_ade20k-640x640 + In Collection: Mask2Former + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 53.9 + Config: configs/mask2former/mask2former_swin-b-in22k-384x384-pre_8xb2-160k_ade20k-640x640.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - Swin-B + - Mask2Former + Training Resources: 8x A100 GPUS + Memory (GB): 5.66 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-b-in22k-384x384-pre_8xb2-160k_ade20k-640x640/mask2former_swin-b-in22k-384x384-pre_8xb2-160k_ade20k-640x640_20221203_235230-7ec0f569.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-b-in22k-384x384-pre_8xb2-160k_ade20k-640x640/mask2former_swin-b-in22k-384x384-pre_8xb2-160k_ade20k-640x640_20221203_235230.json + Paper: + Title: Masked-attention Mask Transformer for Universal Image Segmentation + URL: https://arxiv.org/abs/2112.01527 + Code: https://github.com/open-mmlab/mmdetection/blob/3.x/mmdet/models/dense_heads/mask2former_head.py + Framework: PyTorch +- Name: mask2former_swin-l-in22k-384x384-pre_8xb2-160k_ade20k-640x640 + In Collection: Mask2Former + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 56.01 + Config: configs/mask2former/mask2former_swin-l-in22k-384x384-pre_8xb2-160k_ade20k-640x640.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - Swin-L + - Mask2Former + Training Resources: 8x A100 GPUS + Memory (GB): 8.86 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-l-in22k-384x384-pre_8xb2-160k_ade20k-640x640/mask2former_swin-l-in22k-384x384-pre_8xb2-160k_ade20k-640x640_20221203_235933-7120c214.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-l-in22k-384x384-pre_8xb2-160k_ade20k-640x640/mask2former_swin-l-in22k-384x384-pre_8xb2-160k_ade20k-640x640_20221203_235933.json + Paper: + Title: Masked-attention Mask Transformer for Universal Image Segmentation + URL: https://arxiv.org/abs/2112.01527 + Code: https://github.com/open-mmlab/mmdetection/blob/3.x/mmdet/models/dense_heads/mask2former_head.py + Framework: PyTorch diff --git a/configs/maskformer/README.md b/configs/maskformer/README.md index 0248dbb63c..aa54a27088 100644 --- a/configs/maskformer/README.md +++ b/configs/maskformer/README.md @@ -1,6 +1,6 @@ # MaskFormer -[MaskFormer: Per-Pixel Classification is Not All You Need for Semantic Segmentation](https://arxiv.org/abs/2107.06278) +> [MaskFormer: Per-Pixel Classification is Not All You Need for Semantic Segmentation](https://arxiv.org/abs/2107.06278) ## Introduction @@ -22,17 +22,6 @@ Modern approaches typically formulate semantic segmentation as a per-pixel class -```bibtex -@article{cheng2021per, - title={Per-pixel classification is not all you need for semantic segmentation}, - author={Cheng, Bowen and Schwing, Alex and Kirillov, Alexander}, - journal={Advances in Neural Information Processing Systems}, - volume={34}, - pages={17864--17875}, - year={2021} -} -``` - ### Usage - MaskFormer model needs to install [MMDetection](https://github.com/open-mmlab/mmdetection) first. @@ -45,12 +34,12 @@ pip install "mmdet>=3.0.0rc4" ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ---------- | --------- | --------- | ------- | -------- | -------------- | ----- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| MaskFormer | R-50-D32 | 512x512 | 160000 | 3.29 | 42.20 | 44.29 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/maskformer/maskformer_r50-d32_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_r50-d32_8xb2-160k_ade20k-512x512/maskformer_r50-d32_8xb2-160k_ade20k-512x512_20221030_182724-3a9cfe45.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_r50-d32_8xb2-160k_ade20k-512x512/maskformer_r50-d32_8xb2-160k_ade20k-512x512_20221030_182724.json) | -| MaskFormer | R-101-D32 | 512x512 | 160000 | 4.12 | 34.90 | 45.11 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/maskformer/maskformer_r101-d32_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_r101-d32_8xb2-160k_ade20k-512x512/maskformer_r101-d32_8xb2-160k_ade20k-512x512_20221031_223053-84adbfcb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_r101-d32_8xb2-160k_ade20k-512x512/maskformer_r101-d32_8xb2-160k_ade20k-512x512_20221031_223053.json) | -| MaskFormer | Swin-T | 512x512 | 160000 | 3.73 | 40.53 | 46.69 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/maskformer/maskformer_swin-t_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_swin-t_upernet_8xb2-160k_ade20k-512x512/maskformer_swin-t_upernet_8xb2-160k_ade20k-512x512_20221114_232813-f14e7ce0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_swin-t_upernet_8xb2-160k_ade20k-512x512/maskformer_swin-t_upernet_8xb2-160k_ade20k-512x512_20221114_232813.json) | -| MaskFormer | Swin-S | 512x512 | 160000 | 5.33 | 26.98 | 49.36 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/maskformer/maskformer_swin-s_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_swin-s_upernet_8xb2-160k_ade20k-512x512/maskformer_swin-s_upernet_8xb2-160k_ade20k-512x512_20221115_114710-723512c7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_swin-s_upernet_8xb2-160k_ade20k-512x512/maskformer_swin-s_upernet_8xb2-160k_ade20k-512x512_20221115_114710.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------- | --------- | --------- | ------- | -------- | -------------- | ------ | ----- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| MaskFormer | R-50-D32 | 512x512 | 160000 | 3.29 | A100 | 42.20 | 44.29 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/maskformer/maskformer_r50-d32_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_r50-d32_8xb2-160k_ade20k-512x512/maskformer_r50-d32_8xb2-160k_ade20k-512x512_20221030_182724-3a9cfe45.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_r50-d32_8xb2-160k_ade20k-512x512/maskformer_r50-d32_8xb2-160k_ade20k-512x512_20221030_182724.json) | +| MaskFormer | R-101-D32 | 512x512 | 160000 | 4.12 | A100 | 34.90 | 45.11 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/maskformer/maskformer_r101-d32_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_r101-d32_8xb2-160k_ade20k-512x512/maskformer_r101-d32_8xb2-160k_ade20k-512x512_20221031_223053-84adbfcb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_r101-d32_8xb2-160k_ade20k-512x512/maskformer_r101-d32_8xb2-160k_ade20k-512x512_20221031_223053.json) | +| MaskFormer | Swin-T | 512x512 | 160000 | 3.73 | A100 | 40.53 | 46.69 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/maskformer/maskformer_swin-t_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_swin-t_upernet_8xb2-160k_ade20k-512x512/maskformer_swin-t_upernet_8xb2-160k_ade20k-512x512_20221114_232813-f14e7ce0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_swin-t_upernet_8xb2-160k_ade20k-512x512/maskformer_swin-t_upernet_8xb2-160k_ade20k-512x512_20221114_232813.json) | +| MaskFormer | Swin-S | 512x512 | 160000 | 5.33 | A100 | 26.98 | 49.36 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/maskformer/maskformer_swin-s_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_swin-s_upernet_8xb2-160k_ade20k-512x512/maskformer_swin-s_upernet_8xb2-160k_ade20k-512x512_20221115_114710-723512c7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_swin-s_upernet_8xb2-160k_ade20k-512x512/maskformer_swin-s_upernet_8xb2-160k_ade20k-512x512_20221115_114710.json) | Note: @@ -58,3 +47,16 @@ Note: - The results of MaskFormer are relatively not stable. The accuracy (mIoU) of model with `R-101-D32` is from 44.7 to 46.0, and with `Swin-S` is from 49.0 to 49.8. - The ResNet backbones utilized in MaskFormer models are standard `ResNet` rather than `ResNetV1c`. - Test time augmentation is not supported in MMSegmentation 1.x version yet, we would add "ms+flip" results as soon as possible. + +## Citation + +```bibtex +@article{cheng2021per, + title={Per-pixel classification is not all you need for semantic segmentation}, + author={Cheng, Bowen and Schwing, Alex and Kirillov, Alexander}, + journal={Advances in Neural Information Processing Systems}, + volume={34}, + pages={17864--17875}, + year={2021} +} +``` diff --git a/configs/maskformer/maskformer.yml b/configs/maskformer/maskformer.yml deleted file mode 100644 index b499476a50..0000000000 --- a/configs/maskformer/maskformer.yml +++ /dev/null @@ -1,101 +0,0 @@ -Collections: -- Name: MaskFormer - Metadata: - Training Data: - - Usage - - ADE20K - Paper: - URL: https://arxiv.org/abs/2107.06278 - Title: 'MaskFormer: Per-Pixel Classification is Not All You Need for Semantic - Segmentation' - README: configs/maskformer/README.md - Code: - URL: https://github.com/open-mmlab/mmdetection/blob/dev-3.x/mmdet/models/dense_heads/maskformer_head.py#L21 - Version: dev-3.x - Converted From: - Code: https://github.com/facebookresearch/MaskFormer/ -Models: -- Name: maskformer_r50-d32_8xb2-160k_ade20k-512x512 - In Collection: MaskFormer - Metadata: - backbone: R-50-D32 - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 23.7 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 3.29 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 44.29 - Config: configs/maskformer/maskformer_r50-d32_8xb2-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_r50-d32_8xb2-160k_ade20k-512x512/maskformer_r50-d32_8xb2-160k_ade20k-512x512_20221030_182724-3a9cfe45.pth -- Name: maskformer_r101-d32_8xb2-160k_ade20k-512x512 - In Collection: MaskFormer - Metadata: - backbone: R-101-D32 - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 28.65 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 4.12 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 45.11 - Config: configs/maskformer/maskformer_r101-d32_8xb2-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_r101-d32_8xb2-160k_ade20k-512x512/maskformer_r101-d32_8xb2-160k_ade20k-512x512_20221031_223053-84adbfcb.pth -- Name: maskformer_swin-t_upernet_8xb2-160k_ade20k-512x512 - In Collection: MaskFormer - Metadata: - backbone: Swin-T - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 24.67 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 3.73 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 46.69 - Config: configs/maskformer/maskformer_swin-t_upernet_8xb2-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_swin-t_upernet_8xb2-160k_ade20k-512x512/maskformer_swin-t_upernet_8xb2-160k_ade20k-512x512_20221114_232813-f14e7ce0.pth -- Name: maskformer_swin-s_upernet_8xb2-160k_ade20k-512x512 - In Collection: MaskFormer - Metadata: - backbone: Swin-S - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 37.06 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 5.33 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 49.36 - Config: configs/maskformer/maskformer_swin-s_upernet_8xb2-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_swin-s_upernet_8xb2-160k_ade20k-512x512/maskformer_swin-s_upernet_8xb2-160k_ade20k-512x512_20221115_114710-723512c7.pth diff --git a/configs/maskformer/metafile.yaml b/configs/maskformer/metafile.yaml new file mode 100644 index 0000000000..c9853e131f --- /dev/null +++ b/configs/maskformer/metafile.yaml @@ -0,0 +1,111 @@ +Collections: +- Name: MaskFormer + License: Apache License 2.0 + Metadata: + Training Data: + - Usage + - ADE20K + Paper: + Title: 'MaskFormer: Per-Pixel Classification is Not All You Need for Semantic + Segmentation' + URL: https://arxiv.org/abs/2107.06278 + README: configs/maskformer/README.md + Frameworks: + - PyTorch +Models: +- Name: maskformer_r50-d32_8xb2-160k_ade20k-512x512 + In Collection: MaskFormer + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 44.29 + Config: configs/maskformer/maskformer_r50-d32_8xb2-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50-D32 + - MaskFormer + Training Resources: 8x 42.20 GPUS + Memory (GB): 3.29 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_r50-d32_8xb2-160k_ade20k-512x512/maskformer_r50-d32_8xb2-160k_ade20k-512x512_20221030_182724-3a9cfe45.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_r50-d32_8xb2-160k_ade20k-512x512/maskformer_r50-d32_8xb2-160k_ade20k-512x512_20221030_182724.json + Paper: + Title: 'MaskFormer: Per-Pixel Classification is Not All You Need for Semantic + Segmentation' + URL: https://arxiv.org/abs/2107.06278 + Code: https://github.com/open-mmlab/mmdetection/blob/dev-3.x/mmdet/models/dense_heads/maskformer_head.py#L21 + Framework: PyTorch +- Name: maskformer_r101-d32_8xb2-160k_ade20k-512x512 + In Collection: MaskFormer + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 45.11 + Config: configs/maskformer/maskformer_r101-d32_8xb2-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-101-D32 + - MaskFormer + Training Resources: 8x 34.90 GPUS + Memory (GB): 4.12 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_r101-d32_8xb2-160k_ade20k-512x512/maskformer_r101-d32_8xb2-160k_ade20k-512x512_20221031_223053-84adbfcb.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_r101-d32_8xb2-160k_ade20k-512x512/maskformer_r101-d32_8xb2-160k_ade20k-512x512_20221031_223053.json + Paper: + Title: 'MaskFormer: Per-Pixel Classification is Not All You Need for Semantic + Segmentation' + URL: https://arxiv.org/abs/2107.06278 + Code: https://github.com/open-mmlab/mmdetection/blob/dev-3.x/mmdet/models/dense_heads/maskformer_head.py#L21 + Framework: PyTorch +- Name: maskformer_swin-t_upernet_8xb2-160k_ade20k-512x512 + In Collection: MaskFormer + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 46.69 + Config: configs/maskformer/maskformer_swin-t_upernet_8xb2-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - Swin-T + - MaskFormer + Training Resources: 8x 40.53 GPUS + Memory (GB): 3.73 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_swin-t_upernet_8xb2-160k_ade20k-512x512/maskformer_swin-t_upernet_8xb2-160k_ade20k-512x512_20221114_232813-f14e7ce0.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_swin-t_upernet_8xb2-160k_ade20k-512x512/maskformer_swin-t_upernet_8xb2-160k_ade20k-512x512_20221114_232813.json + Paper: + Title: 'MaskFormer: Per-Pixel Classification is Not All You Need for Semantic + Segmentation' + URL: https://arxiv.org/abs/2107.06278 + Code: https://github.com/open-mmlab/mmdetection/blob/dev-3.x/mmdet/models/dense_heads/maskformer_head.py#L21 + Framework: PyTorch +- Name: maskformer_swin-s_upernet_8xb2-160k_ade20k-512x512 + In Collection: MaskFormer + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 49.36 + Config: configs/maskformer/maskformer_swin-s_upernet_8xb2-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - Swin-S + - MaskFormer + Training Resources: 8x 26.98 GPUS + Memory (GB): 5.33 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_swin-s_upernet_8xb2-160k_ade20k-512x512/maskformer_swin-s_upernet_8xb2-160k_ade20k-512x512_20221115_114710-723512c7.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_swin-s_upernet_8xb2-160k_ade20k-512x512/maskformer_swin-s_upernet_8xb2-160k_ade20k-512x512_20221115_114710.json + Paper: + Title: 'MaskFormer: Per-Pixel Classification is Not All You Need for Semantic + Segmentation' + URL: https://arxiv.org/abs/2107.06278 + Code: https://github.com/open-mmlab/mmdetection/blob/dev-3.x/mmdet/models/dense_heads/maskformer_head.py#L21 + Framework: PyTorch diff --git a/configs/mobilenet_v2/README.md b/configs/mobilenet_v2/README.md index 30f1fe3ce2..6d8e5945cb 100644 --- a/configs/mobilenet_v2/README.md +++ b/configs/mobilenet_v2/README.md @@ -1,6 +1,6 @@ # MobileNetV2 -[MobileNetV2: Inverted Residuals and Linear Bottlenecks](https://arxiv.org/abs/1801.04381) +> [MobileNetV2: Inverted Residuals and Linear Bottlenecks](https://arxiv.org/abs/1801.04381) ## Introduction @@ -23,6 +23,26 @@ The MobileNetV2 architecture is based on an inverted residual structure where th +## Results and models + +### Cityscapes + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------- | -------- | --------- | ------: | -------: | -------------- | ------ | ----: | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| FCN | M-V2-D8 | 512x1024 | 80000 | 3.4 | 14.2 | A100 | 71.19 | 73.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mobilenet_v2/mobilenet-v2-d8_fcn_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/mobilenet-v2-d8_fcn_4xb2-80k_cityscapes-512x1024/mobilenet-v2-d8_fcn_4xb2-80k_cityscapes-512x1024-20230224_185436-13fef4ea.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/mobilenet-v2-d8_fcn_4xb2-80k_cityscapes-512x1024/mobilenet-v2-d8_fcn_4xb2-80k_cityscapes-512x1024_20230224_185436.json) | +| PSPNet | M-V2-D8 | 512x1024 | 80000 | 3.6 | 11.2 | V100 | 70.23 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mobilenet_v2/mobilenet-v2-d8_pspnet_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/pspnet_m-v2-d8_512x1024_80k_cityscapes/pspnet_m-v2-d8_512x1024_80k_cityscapes_20200825_124817-19e81d51.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/pspnet_m-v2-d8_512x1024_80k_cityscapes/pspnet_m-v2-d8_512x1024_80k_cityscapes-20200825_124817.log.json) | +| DeepLabV3 | M-V2-D8 | 512x1024 | 80000 | 3.9 | 8.4 | V100 | 73.84 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mobilenet_v2/mobilenet-v2-d8_deeplabv3_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3_m-v2-d8_512x1024_80k_cityscapes/deeplabv3_m-v2-d8_512x1024_80k_cityscapes_20200825_124836-bef03590.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3_m-v2-d8_512x1024_80k_cityscapes/deeplabv3_m-v2-d8_512x1024_80k_cityscapes-20200825_124836.log.json) | +| DeepLabV3+ | M-V2-D8 | 512x1024 | 80000 | 5.1 | 8.4 | V100 | 75.20 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mobilenet_v2/mobilenet-v2-d8_deeplabv3plus_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3plus_m-v2-d8_512x1024_80k_cityscapes/deeplabv3plus_m-v2-d8_512x1024_80k_cityscapes_20200825_124836-d256dd4b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3plus_m-v2-d8_512x1024_80k_cityscapes/deeplabv3plus_m-v2-d8_512x1024_80k_cityscapes-20200825_124836.log.json) | + +### ADE20K + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------- | -------- | --------- | ------: | -------: | -------------- | ------ | ----: | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| FCN | M-V2-D8 | 512x512 | 160000 | 6.5 | 64.4 | V100 | 19.71 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mobilenet_v2/mobilenet-v2-d8_fcn_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/fcn_m-v2-d8_512x512_160k_ade20k/fcn_m-v2-d8_512x512_160k_ade20k_20200825_214953-c40e1095.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/fcn_m-v2-d8_512x512_160k_ade20k/fcn_m-v2-d8_512x512_160k_ade20k-20200825_214953.log.json) | +| PSPNet | M-V2-D8 | 512x512 | 160000 | 6.5 | 57.7 | V100 | 29.68 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mobilenet_v2/mobilenet-v2-d8_pspnet_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/pspnet_m-v2-d8_512x512_160k_ade20k/pspnet_m-v2-d8_512x512_160k_ade20k_20200825_214953-f5942f7a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/pspnet_m-v2-d8_512x512_160k_ade20k/pspnet_m-v2-d8_512x512_160k_ade20k-20200825_214953.log.json) | +| DeepLabV3 | M-V2-D8 | 512x512 | 160000 | 6.8 | 39.9 | V100 | 34.08 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mobilenet_v2/mobilenet-v2-d8_deeplabv3_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3_m-v2-d8_512x512_160k_ade20k/deeplabv3_m-v2-d8_512x512_160k_ade20k_20200825_223255-63986343.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3_m-v2-d8_512x512_160k_ade20k/deeplabv3_m-v2-d8_512x512_160k_ade20k-20200825_223255.log.json) | +| DeepLabV3+ | M-V2-D8 | 512x512 | 160000 | 8.2 | 43.1 | V100 | 34.02 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mobilenet_v2/mobilenet-v2-d8_deeplabv3plus_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3plus_m-v2-d8_512x512_160k_ade20k/deeplabv3plus_m-v2-d8_512x512_160k_ade20k_20200825_223255-465a01d4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3plus_m-v2-d8_512x512_160k_ade20k/deeplabv3plus_m-v2-d8_512x512_160k_ade20k-20200825_223255.log.json) | + ## Citation ```bibtex @@ -34,23 +54,3 @@ The MobileNetV2 architecture is based on an inverted residual structure where th year={2018} } ``` - -## Results and models - -### Cityscapes - -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ---------- | -------- | --------- | ------: | -------: | -------------- | ----: | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| FCN | M-V2-D8 | 512x1024 | 80000 | 3.4 | 14.2 | 71.19 | 73.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mobilenet_v2/mobilenet-v2-d8_fcn_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/mobilenet-v2-d8_fcn_4xb2-80k_cityscapes-512x1024/mobilenet-v2-d8_fcn_4xb2-80k_cityscapes-512x1024-20230224_185436-13fef4ea.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/mobilenet-v2-d8_fcn_4xb2-80k_cityscapes-512x1024/mobilenet-v2-d8_fcn_4xb2-80k_cityscapes-512x1024_20230224_185436.json) | -| PSPNet | M-V2-D8 | 512x1024 | 80000 | 3.6 | 11.2 | 70.23 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mobilenet_v2/mobilenet-v2-d8_pspnet_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/pspnet_m-v2-d8_512x1024_80k_cityscapes/pspnet_m-v2-d8_512x1024_80k_cityscapes_20200825_124817-19e81d51.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/pspnet_m-v2-d8_512x1024_80k_cityscapes/pspnet_m-v2-d8_512x1024_80k_cityscapes-20200825_124817.log.json) | -| DeepLabV3 | M-V2-D8 | 512x1024 | 80000 | 3.9 | 8.4 | 73.84 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mobilenet_v2/mobilenet-v2-d8_deeplabv3_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3_m-v2-d8_512x1024_80k_cityscapes/deeplabv3_m-v2-d8_512x1024_80k_cityscapes_20200825_124836-bef03590.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3_m-v2-d8_512x1024_80k_cityscapes/deeplabv3_m-v2-d8_512x1024_80k_cityscapes-20200825_124836.log.json) | -| DeepLabV3+ | M-V2-D8 | 512x1024 | 80000 | 5.1 | 8.4 | 75.20 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mobilenet_v2/mobilenet-v2-d8_deeplabv3plus_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3plus_m-v2-d8_512x1024_80k_cityscapes/deeplabv3plus_m-v2-d8_512x1024_80k_cityscapes_20200825_124836-d256dd4b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3plus_m-v2-d8_512x1024_80k_cityscapes/deeplabv3plus_m-v2-d8_512x1024_80k_cityscapes-20200825_124836.log.json) | - -### ADE20K - -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ---------- | -------- | --------- | ------: | -------: | -------------- | ----: | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| FCN | M-V2-D8 | 512x512 | 160000 | 6.5 | 64.4 | 19.71 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mobilenet_v2/mobilenet-v2-d8_fcn_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/fcn_m-v2-d8_512x512_160k_ade20k/fcn_m-v2-d8_512x512_160k_ade20k_20200825_214953-c40e1095.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/fcn_m-v2-d8_512x512_160k_ade20k/fcn_m-v2-d8_512x512_160k_ade20k-20200825_214953.log.json) | -| PSPNet | M-V2-D8 | 512x512 | 160000 | 6.5 | 57.7 | 29.68 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mobilenet_v2/mobilenet-v2-d8_pspnet_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/pspnet_m-v2-d8_512x512_160k_ade20k/pspnet_m-v2-d8_512x512_160k_ade20k_20200825_214953-f5942f7a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/pspnet_m-v2-d8_512x512_160k_ade20k/pspnet_m-v2-d8_512x512_160k_ade20k-20200825_214953.log.json) | -| DeepLabV3 | M-V2-D8 | 512x512 | 160000 | 6.8 | 39.9 | 34.08 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mobilenet_v2/mobilenet-v2-d8_deeplabv3_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3_m-v2-d8_512x512_160k_ade20k/deeplabv3_m-v2-d8_512x512_160k_ade20k_20200825_223255-63986343.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3_m-v2-d8_512x512_160k_ade20k/deeplabv3_m-v2-d8_512x512_160k_ade20k-20200825_223255.log.json) | -| DeepLabV3+ | M-V2-D8 | 512x512 | 160000 | 8.2 | 43.1 | 34.02 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mobilenet_v2/mobilenet-v2-d8_deeplabv3plus_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3plus_m-v2-d8_512x512_160k_ade20k/deeplabv3plus_m-v2-d8_512x512_160k_ade20k_20200825_223255-465a01d4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3plus_m-v2-d8_512x512_160k_ade20k/deeplabv3plus_m-v2-d8_512x512_160k_ade20k-20200825_223255.log.json) | diff --git a/configs/mobilenet_v2/metafile.yaml b/configs/mobilenet_v2/metafile.yaml new file mode 100644 index 0000000000..119c9ae7d6 --- /dev/null +++ b/configs/mobilenet_v2/metafile.yaml @@ -0,0 +1,186 @@ +Models: +- Name: mobilenet-v2-d8_fcn_4xb2-80k_cityscapes-512x1024 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 71.19 + mIoU(ms+flip): 73.34 + Config: configs/mobilenet_v2/mobilenet-v2-d8_fcn_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - M-V2-D8 + - FCN + Training Resources: 4x A100 GPUS + Memory (GB): 3.4 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/mobilenet-v2-d8_fcn_4xb2-80k_cityscapes-512x1024/mobilenet-v2-d8_fcn_4xb2-80k_cityscapes-512x1024-20230224_185436-13fef4ea.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/mobilenet-v2-d8_fcn_4xb2-80k_cityscapes-512x1024/mobilenet-v2-d8_fcn_4xb2-80k_cityscapes-512x1024_20230224_185436.json + Paper: + Title: 'MobileNetV2: Inverted Residuals and Linear Bottlenecks' + URL: https://arxiv.org/abs/1801.04381 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/mobilenet_v2.py#L14 + Framework: PyTorch +- Name: mobilenet-v2-d8_pspnet_4xb2-80k_cityscapes-512x1024 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 70.23 + Config: configs/mobilenet_v2/mobilenet-v2-d8_pspnet_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - M-V2-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 3.6 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/pspnet_m-v2-d8_512x1024_80k_cityscapes/pspnet_m-v2-d8_512x1024_80k_cityscapes_20200825_124817-19e81d51.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/pspnet_m-v2-d8_512x1024_80k_cityscapes/pspnet_m-v2-d8_512x1024_80k_cityscapes-20200825_124817.log.json + Paper: + Title: 'MobileNetV2: Inverted Residuals and Linear Bottlenecks' + URL: https://arxiv.org/abs/1801.04381 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/mobilenet_v2.py#L14 + Framework: PyTorch +- Name: mobilenet-v2-d8_deeplabv3_4xb2-80k_cityscapes-512x1024 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 73.84 + Config: configs/mobilenet_v2/mobilenet-v2-d8_deeplabv3_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - M-V2-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Memory (GB): 3.9 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3_m-v2-d8_512x1024_80k_cityscapes/deeplabv3_m-v2-d8_512x1024_80k_cityscapes_20200825_124836-bef03590.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3_m-v2-d8_512x1024_80k_cityscapes/deeplabv3_m-v2-d8_512x1024_80k_cityscapes-20200825_124836.log.json + Paper: + Title: 'MobileNetV2: Inverted Residuals and Linear Bottlenecks' + URL: https://arxiv.org/abs/1801.04381 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/mobilenet_v2.py#L14 + Framework: PyTorch +- Name: mobilenet-v2-d8_deeplabv3plus_4xb2-80k_cityscapes-512x1024 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 75.2 + Config: configs/mobilenet_v2/mobilenet-v2-d8_deeplabv3plus_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - M-V2-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Memory (GB): 5.1 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3plus_m-v2-d8_512x1024_80k_cityscapes/deeplabv3plus_m-v2-d8_512x1024_80k_cityscapes_20200825_124836-d256dd4b.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3plus_m-v2-d8_512x1024_80k_cityscapes/deeplabv3plus_m-v2-d8_512x1024_80k_cityscapes-20200825_124836.log.json + Paper: + Title: 'MobileNetV2: Inverted Residuals and Linear Bottlenecks' + URL: https://arxiv.org/abs/1801.04381 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/mobilenet_v2.py#L14 + Framework: PyTorch +- Name: mobilenet-v2-d8_fcn_4xb4-160k_ade20k-512x512 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 19.71 + Config: configs/mobilenet_v2/mobilenet-v2-d8_fcn_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - M-V2-D8 + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 6.5 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/fcn_m-v2-d8_512x512_160k_ade20k/fcn_m-v2-d8_512x512_160k_ade20k_20200825_214953-c40e1095.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/fcn_m-v2-d8_512x512_160k_ade20k/fcn_m-v2-d8_512x512_160k_ade20k-20200825_214953.log.json + Paper: + Title: 'MobileNetV2: Inverted Residuals and Linear Bottlenecks' + URL: https://arxiv.org/abs/1801.04381 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/mobilenet_v2.py#L14 + Framework: PyTorch +- Name: mobilenet-v2-d8_pspnet_4xb4-160k_ade20k-512x512 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 29.68 + Config: configs/mobilenet_v2/mobilenet-v2-d8_pspnet_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - M-V2-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 6.5 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/pspnet_m-v2-d8_512x512_160k_ade20k/pspnet_m-v2-d8_512x512_160k_ade20k_20200825_214953-f5942f7a.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/pspnet_m-v2-d8_512x512_160k_ade20k/pspnet_m-v2-d8_512x512_160k_ade20k-20200825_214953.log.json + Paper: + Title: 'MobileNetV2: Inverted Residuals and Linear Bottlenecks' + URL: https://arxiv.org/abs/1801.04381 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/mobilenet_v2.py#L14 + Framework: PyTorch +- Name: mobilenet-v2-d8_deeplabv3_4xb4-160k_ade20k-512x512 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 34.08 + Config: configs/mobilenet_v2/mobilenet-v2-d8_deeplabv3_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - M-V2-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Memory (GB): 6.8 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3_m-v2-d8_512x512_160k_ade20k/deeplabv3_m-v2-d8_512x512_160k_ade20k_20200825_223255-63986343.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3_m-v2-d8_512x512_160k_ade20k/deeplabv3_m-v2-d8_512x512_160k_ade20k-20200825_223255.log.json + Paper: + Title: 'MobileNetV2: Inverted Residuals and Linear Bottlenecks' + URL: https://arxiv.org/abs/1801.04381 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/mobilenet_v2.py#L14 + Framework: PyTorch +- Name: mobilenet-v2-d8_deeplabv3plus_4xb4-160k_ade20k-512x512 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 34.02 + Config: configs/mobilenet_v2/mobilenet-v2-d8_deeplabv3plus_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - M-V2-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Memory (GB): 8.2 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3plus_m-v2-d8_512x512_160k_ade20k/deeplabv3plus_m-v2-d8_512x512_160k_ade20k_20200825_223255-465a01d4.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3plus_m-v2-d8_512x512_160k_ade20k/deeplabv3plus_m-v2-d8_512x512_160k_ade20k-20200825_223255.log.json + Paper: + Title: 'MobileNetV2: Inverted Residuals and Linear Bottlenecks' + URL: https://arxiv.org/abs/1801.04381 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/mobilenet_v2.py#L14 + Framework: PyTorch diff --git a/configs/mobilenet_v2/mobilenet_v2.yml b/configs/mobilenet_v2/mobilenet_v2.yml deleted file mode 100644 index 6d87401ce8..0000000000 --- a/configs/mobilenet_v2/mobilenet_v2.yml +++ /dev/null @@ -1,170 +0,0 @@ -Models: -- Name: mobilenet-v2-d8_fcn_4xb2-80k_cityscapes-512x1024 - In Collection: FCN - Metadata: - backbone: M-V2-D8 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 70.42 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 3.4 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 71.19 - mIoU(ms+flip): 73.34 - Config: configs/mobilenet_v2/mobilenet-v2-d8_fcn_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/mobilenet-v2-d8_fcn_4xb2-80k_cityscapes-512x1024/mobilenet-v2-d8_fcn_4xb2-80k_cityscapes-512x1024-20230224_185436-13fef4ea.pth -- Name: mobilenet-v2-d8_pspnet_4xb2-80k_cityscapes-512x1024 - In Collection: PSPNet - Metadata: - backbone: M-V2-D8 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 89.29 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 3.6 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 70.23 - Config: configs/mobilenet_v2/mobilenet-v2-d8_pspnet_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/pspnet_m-v2-d8_512x1024_80k_cityscapes/pspnet_m-v2-d8_512x1024_80k_cityscapes_20200825_124817-19e81d51.pth -- Name: mobilenet-v2-d8_deeplabv3_4xb2-80k_cityscapes-512x1024 - In Collection: DeepLabV3 - Metadata: - backbone: M-V2-D8 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 119.05 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 3.9 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 73.84 - Config: configs/mobilenet_v2/mobilenet-v2-d8_deeplabv3_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3_m-v2-d8_512x1024_80k_cityscapes/deeplabv3_m-v2-d8_512x1024_80k_cityscapes_20200825_124836-bef03590.pth -- Name: mobilenet-v2-d8_deeplabv3plus_4xb2-80k_cityscapes-512x1024 - In Collection: DeepLabV3+ - Metadata: - backbone: M-V2-D8 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 119.05 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 5.1 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 75.2 - Config: configs/mobilenet_v2/mobilenet-v2-d8_deeplabv3plus_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3plus_m-v2-d8_512x1024_80k_cityscapes/deeplabv3plus_m-v2-d8_512x1024_80k_cityscapes_20200825_124836-d256dd4b.pth -- Name: mobilenet-v2-d8_fcn_4xb4-160k_ade20k-512x512 - In Collection: FCN - Metadata: - backbone: M-V2-D8 - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 15.53 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 6.5 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 19.71 - Config: configs/mobilenet_v2/mobilenet-v2-d8_fcn_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/fcn_m-v2-d8_512x512_160k_ade20k/fcn_m-v2-d8_512x512_160k_ade20k_20200825_214953-c40e1095.pth -- Name: mobilenet-v2-d8_pspnet_4xb4-160k_ade20k-512x512 - In Collection: PSPNet - Metadata: - backbone: M-V2-D8 - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 17.33 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 6.5 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 29.68 - Config: configs/mobilenet_v2/mobilenet-v2-d8_pspnet_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/pspnet_m-v2-d8_512x512_160k_ade20k/pspnet_m-v2-d8_512x512_160k_ade20k_20200825_214953-f5942f7a.pth -- Name: mobilenet-v2-d8_deeplabv3_4xb4-160k_ade20k-512x512 - In Collection: DeepLabV3 - Metadata: - backbone: M-V2-D8 - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 25.06 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 6.8 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 34.08 - Config: configs/mobilenet_v2/mobilenet-v2-d8_deeplabv3_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3_m-v2-d8_512x512_160k_ade20k/deeplabv3_m-v2-d8_512x512_160k_ade20k_20200825_223255-63986343.pth -- Name: mobilenet-v2-d8_deeplabv3plus_4xb4-160k_ade20k-512x512 - In Collection: DeepLabV3+ - Metadata: - backbone: M-V2-D8 - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 23.2 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 8.2 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 34.02 - Config: configs/mobilenet_v2/mobilenet-v2-d8_deeplabv3plus_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3plus_m-v2-d8_512x512_160k_ade20k/deeplabv3plus_m-v2-d8_512x512_160k_ade20k_20200825_223255-465a01d4.pth diff --git a/configs/mobilenet_v3/README.md b/configs/mobilenet_v3/README.md index c2fed06ccd..3b63db7e50 100644 --- a/configs/mobilenet_v3/README.md +++ b/configs/mobilenet_v3/README.md @@ -1,6 +1,6 @@ # MobileNetV3 -[Searching for MobileNetV3](https://arxiv.org/abs/1905.02244) +> [Searching for MobileNetV3](https://arxiv.org/abs/1905.02244) ## Introduction @@ -24,6 +24,17 @@ We present the next generation of MobileNets based on a combination of complemen +## Results and models + +### Cityscapes + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | ------------------ | --------- | ------: | -------: | -------------- | ------ | ----: | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| LRASPP | M-V3-D8 | 512x1024 | 320000 | 8.9 | 15.22 | V100 | 69.54 | 70.89 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mobilenet_v3/mobilenet-v3-d8_lraspp_4xb4-320k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3-d8_512x1024_320k_cityscapes/lraspp_m-v3-d8_512x1024_320k_cityscapes_20201224_220337-cfe8fb07.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3-d8_512x1024_320k_cityscapes/lraspp_m-v3-d8_512x1024_320k_cityscapes-20201224_220337.log.json) | +| LRASPP | M-V3-D8 (scratch) | 512x1024 | 320000 | 8.9 | 14.77 | V100 | 67.87 | 69.78 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mobilenet_v3/mobilenet-v3-d8-scratch_lraspp_4xb4-320k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3-d8_scratch_512x1024_320k_cityscapes/lraspp_m-v3-d8_scratch_512x1024_320k_cityscapes_20201224_220337-9f29cd72.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3-d8_scratch_512x1024_320k_cityscapes/lraspp_m-v3-d8_scratch_512x1024_320k_cityscapes-20201224_220337.log.json) | +| LRASPP | M-V3s-D8 | 512x1024 | 320000 | 5.3 | 23.64 | V100 | 64.11 | 66.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mobilenet_v3/mobilenet-v3-d8-s_lraspp_4xb4-320k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3s-d8_512x1024_320k_cityscapes/lraspp_m-v3s-d8_512x1024_320k_cityscapes_20201224_223935-61565b34.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3s-d8_512x1024_320k_cityscapes/lraspp_m-v3s-d8_512x1024_320k_cityscapes-20201224_223935.log.json) | +| LRASPP | M-V3s-D8 (scratch) | 512x1024 | 320000 | 5.3 | 24.50 | V100 | 62.74 | 65.01 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mobilenet_v3/mobilenet-v3-d8-scratch-s_lraspp_4xb4-320k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3s-d8_scratch_512x1024_320k_cityscapes/lraspp_m-v3s-d8_scratch_512x1024_320k_cityscapes_20201224_223935-03daeabb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3s-d8_scratch_512x1024_320k_cityscapes/lraspp_m-v3s-d8_scratch_512x1024_320k_cityscapes-20201224_223935.log.json) | + ## Citation ```bibtex @@ -37,14 +48,3 @@ We present the next generation of MobileNets based on a combination of complemen doi={10.1109/ICCV.2019.00140}} } ``` - -## Results and models - -### Cityscapes - -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | ------------------ | --------- | ------: | -------: | -------------- | ----: | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| LRASPP | M-V3-D8 | 512x1024 | 320000 | 8.9 | 15.22 | 69.54 | 70.89 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mobilenet_v3/mobilenet-v3-d8_lraspp_4xb4-320k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3-d8_512x1024_320k_cityscapes/lraspp_m-v3-d8_512x1024_320k_cityscapes_20201224_220337-cfe8fb07.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3-d8_512x1024_320k_cityscapes/lraspp_m-v3-d8_512x1024_320k_cityscapes-20201224_220337.log.json) | -| LRASPP | M-V3-D8 (scratch) | 512x1024 | 320000 | 8.9 | 14.77 | 67.87 | 69.78 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mobilenet_v3/mobilenet-v3-d8-scratch_lraspp_4xb4-320k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3-d8_scratch_512x1024_320k_cityscapes/lraspp_m-v3-d8_scratch_512x1024_320k_cityscapes_20201224_220337-9f29cd72.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3-d8_scratch_512x1024_320k_cityscapes/lraspp_m-v3-d8_scratch_512x1024_320k_cityscapes-20201224_220337.log.json) | -| LRASPP | M-V3s-D8 | 512x1024 | 320000 | 5.3 | 23.64 | 64.11 | 66.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mobilenet_v3/mobilenet-v3-d8-s_lraspp_4xb4-320k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3s-d8_512x1024_320k_cityscapes/lraspp_m-v3s-d8_512x1024_320k_cityscapes_20201224_223935-61565b34.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3s-d8_512x1024_320k_cityscapes/lraspp_m-v3s-d8_512x1024_320k_cityscapes-20201224_223935.log.json) | -| LRASPP | M-V3s-D8 (scratch) | 512x1024 | 320000 | 5.3 | 24.50 | 62.74 | 65.01 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mobilenet_v3/mobilenet-v3-d8-scratch-s_lraspp_4xb4-320k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3s-d8_scratch_512x1024_320k_cityscapes/lraspp_m-v3s-d8_scratch_512x1024_320k_cityscapes_20201224_223935-03daeabb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3s-d8_scratch_512x1024_320k_cityscapes/lraspp_m-v3s-d8_scratch_512x1024_320k_cityscapes-20201224_223935.log.json) | diff --git a/configs/mobilenet_v3/metafile.yaml b/configs/mobilenet_v3/metafile.yaml new file mode 100644 index 0000000000..0351d3b8e4 --- /dev/null +++ b/configs/mobilenet_v3/metafile.yaml @@ -0,0 +1,109 @@ +Collections: +- Name: LRASPP + License: Apache License 2.0 + Metadata: + Training Data: + - Cityscapes + Paper: + Title: Searching for MobileNetV3 + URL: https://arxiv.org/abs/1905.02244 + README: configs/mobilenet_v3/README.md + Frameworks: + - PyTorch +Models: +- Name: mobilenet-v3-d8_lraspp_4xb4-320k_cityscapes-512x1024 + In Collection: LRASPP + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 69.54 + mIoU(ms+flip): 70.89 + Config: configs/mobilenet_v3/mobilenet-v3-d8_lraspp_4xb4-320k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 16 + Architecture: + - M-V3-D8 + - LRASPP + Training Resources: 4x V100 GPUS + Memory (GB): 8.9 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3-d8_512x1024_320k_cityscapes/lraspp_m-v3-d8_512x1024_320k_cityscapes_20201224_220337-cfe8fb07.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3-d8_512x1024_320k_cityscapes/lraspp_m-v3-d8_512x1024_320k_cityscapes-20201224_220337.log.json + Paper: + Title: Searching for MobileNetV3 + URL: https://arxiv.org/abs/1905.02244 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/mobilenet_v3.py#L15 + Framework: PyTorch +- Name: mobilenet-v3-d8-scratch_lraspp_4xb4-320k_cityscapes-512x1024 + In Collection: LRASPP + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 67.87 + mIoU(ms+flip): 69.78 + Config: configs/mobilenet_v3/mobilenet-v3-d8-scratch_lraspp_4xb4-320k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 16 + Architecture: + - M-V3-D8 + - LRASPP + Training Resources: 4x V100 GPUS + Memory (GB): 8.9 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3-d8_scratch_512x1024_320k_cityscapes/lraspp_m-v3-d8_scratch_512x1024_320k_cityscapes_20201224_220337-9f29cd72.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3-d8_scratch_512x1024_320k_cityscapes/lraspp_m-v3-d8_scratch_512x1024_320k_cityscapes-20201224_220337.log.json + Paper: + Title: Searching for MobileNetV3 + URL: https://arxiv.org/abs/1905.02244 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/mobilenet_v3.py#L15 + Framework: PyTorch +- Name: mobilenet-v3-d8-s_lraspp_4xb4-320k_cityscapes-512x1024 + In Collection: LRASPP + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 64.11 + mIoU(ms+flip): 66.42 + Config: configs/mobilenet_v3/mobilenet-v3-d8-s_lraspp_4xb4-320k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 16 + Architecture: + - M-V3s-D8 + - LRASPP + Training Resources: 4x V100 GPUS + Memory (GB): 5.3 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3s-d8_512x1024_320k_cityscapes/lraspp_m-v3s-d8_512x1024_320k_cityscapes_20201224_223935-61565b34.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3s-d8_512x1024_320k_cityscapes/lraspp_m-v3s-d8_512x1024_320k_cityscapes-20201224_223935.log.json + Paper: + Title: Searching for MobileNetV3 + URL: https://arxiv.org/abs/1905.02244 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/mobilenet_v3.py#L15 + Framework: PyTorch +- Name: mobilenet-v3-d8-scratch-s_lraspp_4xb4-320k_cityscapes-512x1024 + In Collection: LRASPP + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 62.74 + mIoU(ms+flip): 65.01 + Config: configs/mobilenet_v3/mobilenet-v3-d8-scratch-s_lraspp_4xb4-320k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 16 + Architecture: + - M-V3s-D8 + - LRASPP + Training Resources: 4x V100 GPUS + Memory (GB): 5.3 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3s-d8_scratch_512x1024_320k_cityscapes/lraspp_m-v3s-d8_scratch_512x1024_320k_cityscapes_20201224_223935-03daeabb.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3s-d8_scratch_512x1024_320k_cityscapes/lraspp_m-v3s-d8_scratch_512x1024_320k_cityscapes-20201224_223935.log.json + Paper: + Title: Searching for MobileNetV3 + URL: https://arxiv.org/abs/1905.02244 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/mobilenet_v3.py#L15 + Framework: PyTorch diff --git a/configs/mobilenet_v3/mobilenet_v3.yml b/configs/mobilenet_v3/mobilenet_v3.yml deleted file mode 100644 index 067a150cea..0000000000 --- a/configs/mobilenet_v3/mobilenet_v3.yml +++ /dev/null @@ -1,103 +0,0 @@ -Collections: -- Name: LRASPP - Metadata: - Training Data: - - Cityscapes - Paper: - URL: https://arxiv.org/abs/1905.02244 - Title: Searching for MobileNetV3 - README: configs/mobilenet_v3/README.md - Code: - URL: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/mobilenet_v3.py#L15 - Version: v0.17.0 - Converted From: - Code: https://github.com/tensorflow/models/tree/master/research/deeplab -Models: -- Name: mobilenet-v3-d8_lraspp_4xb4-320k_cityscapes-512x1024 - In Collection: LRASPP - Metadata: - backbone: M-V3-D8 - crop size: (512,1024) - lr schd: 320000 - inference time (ms/im): - - value: 65.7 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 8.9 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 69.54 - mIoU(ms+flip): 70.89 - Config: configs/mobilenet_v3/mobilenet-v3-d8_lraspp_4xb4-320k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3-d8_512x1024_320k_cityscapes/lraspp_m-v3-d8_512x1024_320k_cityscapes_20201224_220337-cfe8fb07.pth -- Name: mobilenet-v3-d8-scratch_lraspp_4xb4-320k_cityscapes-512x1024 - In Collection: LRASPP - Metadata: - backbone: M-V3-D8 (scratch) - crop size: (512,1024) - lr schd: 320000 - inference time (ms/im): - - value: 67.7 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 8.9 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 67.87 - mIoU(ms+flip): 69.78 - Config: configs/mobilenet_v3/mobilenet-v3-d8-scratch_lraspp_4xb4-320k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3-d8_scratch_512x1024_320k_cityscapes/lraspp_m-v3-d8_scratch_512x1024_320k_cityscapes_20201224_220337-9f29cd72.pth -- Name: mobilenet-v3-d8-s_lraspp_4xb4-320k_cityscapes-512x1024 - In Collection: LRASPP - Metadata: - backbone: M-V3s-D8 - crop size: (512,1024) - lr schd: 320000 - inference time (ms/im): - - value: 42.3 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 5.3 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 64.11 - mIoU(ms+flip): 66.42 - Config: configs/mobilenet_v3/mobilenet-v3-d8-s_lraspp_4xb4-320k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3s-d8_512x1024_320k_cityscapes/lraspp_m-v3s-d8_512x1024_320k_cityscapes_20201224_223935-61565b34.pth -- Name: mobilenet-v3-d8-scratch-s_lraspp_4xb4-320k_cityscapes-512x1024 - In Collection: LRASPP - Metadata: - backbone: M-V3s-D8 (scratch) - crop size: (512,1024) - lr schd: 320000 - inference time (ms/im): - - value: 40.82 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 5.3 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 62.74 - mIoU(ms+flip): 65.01 - Config: configs/mobilenet_v3/mobilenet-v3-d8-scratch-s_lraspp_4xb4-320k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3s-d8_scratch_512x1024_320k_cityscapes/lraspp_m-v3s-d8_scratch_512x1024_320k_cityscapes_20201224_223935-03daeabb.pth diff --git a/configs/nonlocal_net/README.md b/configs/nonlocal_net/README.md index 80d45ab589..0a0fcf3725 100644 --- a/configs/nonlocal_net/README.md +++ b/configs/nonlocal_net/README.md @@ -1,6 +1,6 @@ # NonLocal Net -[Non-local Neural Networks](https://arxiv.org/abs/1711.07971) +> [Non-local Neural Networks](https://arxiv.org/abs/1711.07971) ## Introduction @@ -22,6 +22,39 @@ Both convolutional and recurrent operations are building blocks that process one +## Results and models + +### Cityscapes + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ----------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| NonLocalNet | R-50-D8 | 512x1024 | 40000 | 7.4 | 2.72 | V100 | 78.24 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x1024_40k_cityscapes/nonlocal_r50-d8_512x1024_40k_cityscapes_20200605_210748-c75e81e3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x1024_40k_cityscapes/nonlocal_r50-d8_512x1024_40k_cityscapes_20200605_210748.log.json) | +| NonLocalNet | R-101-D8 | 512x1024 | 40000 | 10.9 | 1.95 | V100 | 78.66 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x1024_40k_cityscapes/nonlocal_r101-d8_512x1024_40k_cityscapes_20200605_210748-d63729fa.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x1024_40k_cityscapes/nonlocal_r101-d8_512x1024_40k_cityscapes_20200605_210748.log.json) | +| NonLocalNet | R-50-D8 | 769x769 | 40000 | 8.9 | 1.52 | V100 | 78.33 | 79.92 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_769x769_40k_cityscapes/nonlocal_r50-d8_769x769_40k_cityscapes_20200530_045243-82ef6749.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_769x769_40k_cityscapes/nonlocal_r50-d8_769x769_40k_cityscapes_20200530_045243.log.json) | +| NonLocalNet | R-101-D8 | 769x769 | 40000 | 12.8 | 1.05 | V100 | 78.57 | 80.29 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_769x769_40k_cityscapes/nonlocal_r101-d8_769x769_40k_cityscapes_20200530_045348-8fe9a9dc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_769x769_40k_cityscapes/nonlocal_r101-d8_769x769_40k_cityscapes_20200530_045348.log.json) | +| NonLocalNet | R-50-D8 | 512x1024 | 80000 | - | - | V100 | 78.01 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x1024_80k_cityscapes/nonlocal_r50-d8_512x1024_80k_cityscapes_20200607_193518-d6839fae.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x1024_80k_cityscapes/nonlocal_r50-d8_512x1024_80k_cityscapes_20200607_193518.log.json) | +| NonLocalNet | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 78.93 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x1024_80k_cityscapes/nonlocal_r101-d8_512x1024_80k_cityscapes_20200607_183411-32700183.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x1024_80k_cityscapes/nonlocal_r101-d8_512x1024_80k_cityscapes_20200607_183411.log.json) | +| NonLocalNet | R-50-D8 | 769x769 | 80000 | - | - | V100 | 79.05 | 80.68 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_769x769_80k_cityscapes/nonlocal_r50-d8_769x769_80k_cityscapes_20200607_193506-1f9792f6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_769x769_80k_cityscapes/nonlocal_r50-d8_769x769_80k_cityscapes_20200607_193506.log.json) | +| NonLocalNet | R-101-D8 | 769x769 | 80000 | - | - | V100 | 79.40 | 80.85 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_769x769_80k_cityscapes/nonlocal_r101-d8_769x769_80k_cityscapes_20200607_183428-0e1fa4f9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_769x769_80k_cityscapes/nonlocal_r101-d8_769x769_80k_cityscapes_20200607_183428.log.json) | + +### ADE20K + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ----------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| NonLocalNet | R-50-D8 | 512x512 | 80000 | 9.1 | 21.37 | V100 | 40.75 | 42.05 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_80k_ade20k/nonlocal_r50-d8_512x512_80k_ade20k_20200615_015801-5ae0aa33.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_80k_ade20k/nonlocal_r50-d8_512x512_80k_ade20k_20200615_015801.log.json) | +| NonLocalNet | R-101-D8 | 512x512 | 80000 | 12.6 | 13.97 | V100 | 42.90 | 44.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_80k_ade20k/nonlocal_r101-d8_512x512_80k_ade20k_20200615_015758-24105919.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_80k_ade20k/nonlocal_r101-d8_512x512_80k_ade20k_20200615_015758.log.json) | +| NonLocalNet | R-50-D8 | 512x512 | 160000 | - | - | V100 | 42.03 | 43.04 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_160k_ade20k/nonlocal_r50-d8_512x512_160k_ade20k_20200616_005410-baef45e3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_160k_ade20k/nonlocal_r50-d8_512x512_160k_ade20k_20200616_005410.log.json) | +| NonLocalNet | R-101-D8 | 512x512 | 160000 | - | - | V100 | 44.63 | 45.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_160k_ade20k/nonlocal_r101-d8_512x512_160k_ade20k_20210827_221502-7881aa1a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_160k_ade20k/nonlocal_r101-d8_512x512_160k_ade20k_20210827_221502.log.json) | + +### Pascal VOC 2012 + Aug + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ----------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| NonLocalNet | R-50-D8 | 512x512 | 20000 | 6.4 | 21.21 | V100 | 76.20 | 77.12 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_20k_voc12aug/nonlocal_r50-d8_512x512_20k_voc12aug_20200617_222613-07f2a57c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_20k_voc12aug/nonlocal_r50-d8_512x512_20k_voc12aug_20200617_222613.log.json) | +| NonLocalNet | R-101-D8 | 512x512 | 20000 | 9.8 | 14.01 | V100 | 78.15 | 78.86 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_20k_voc12aug/nonlocal_r101-d8_512x512_20k_voc12aug_20200617_222615-948c68ab.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_20k_voc12aug/nonlocal_r101-d8_512x512_20k_voc12aug_20200617_222615.log.json) | +| NonLocalNet | R-50-D8 | 512x512 | 40000 | - | - | V100 | 76.65 | 77.47 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_40k_voc12aug/nonlocal_r50-d8_512x512_40k_voc12aug_20200614_000028-0139d4a9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_40k_voc12aug/nonlocal_r50-d8_512x512_40k_voc12aug_20200614_000028.log.json) | +| NonLocalNet | R-101-D8 | 512x512 | 40000 | - | - | V100 | 78.27 | 79.12 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_40k_voc12aug/nonlocal_r101-d8_512x512_40k_voc12aug_20200614_000028-7e5ff470.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_40k_voc12aug/nonlocal_r101-d8_512x512_40k_voc12aug_20200614_000028.log.json) | + ## Citation ```bibtex @@ -33,36 +66,3 @@ Both convolutional and recurrent operations are building blocks that process one year={2018} } ``` - -## Results and models - -### Cityscapes - -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ----------- | -------- | --------- | ------: | -------- | -------------- | ----: | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| NonLocalNet | R-50-D8 | 512x1024 | 40000 | 7.4 | 2.72 | 78.24 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x1024_40k_cityscapes/nonlocal_r50-d8_512x1024_40k_cityscapes_20200605_210748-c75e81e3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x1024_40k_cityscapes/nonlocal_r50-d8_512x1024_40k_cityscapes_20200605_210748.log.json) | -| NonLocalNet | R-101-D8 | 512x1024 | 40000 | 10.9 | 1.95 | 78.66 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x1024_40k_cityscapes/nonlocal_r101-d8_512x1024_40k_cityscapes_20200605_210748-d63729fa.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x1024_40k_cityscapes/nonlocal_r101-d8_512x1024_40k_cityscapes_20200605_210748.log.json) | -| NonLocalNet | R-50-D8 | 769x769 | 40000 | 8.9 | 1.52 | 78.33 | 79.92 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_769x769_40k_cityscapes/nonlocal_r50-d8_769x769_40k_cityscapes_20200530_045243-82ef6749.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_769x769_40k_cityscapes/nonlocal_r50-d8_769x769_40k_cityscapes_20200530_045243.log.json) | -| NonLocalNet | R-101-D8 | 769x769 | 40000 | 12.8 | 1.05 | 78.57 | 80.29 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_769x769_40k_cityscapes/nonlocal_r101-d8_769x769_40k_cityscapes_20200530_045348-8fe9a9dc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_769x769_40k_cityscapes/nonlocal_r101-d8_769x769_40k_cityscapes_20200530_045348.log.json) | -| NonLocalNet | R-50-D8 | 512x1024 | 80000 | - | - | 78.01 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x1024_80k_cityscapes/nonlocal_r50-d8_512x1024_80k_cityscapes_20200607_193518-d6839fae.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x1024_80k_cityscapes/nonlocal_r50-d8_512x1024_80k_cityscapes_20200607_193518.log.json) | -| NonLocalNet | R-101-D8 | 512x1024 | 80000 | - | - | 78.93 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x1024_80k_cityscapes/nonlocal_r101-d8_512x1024_80k_cityscapes_20200607_183411-32700183.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x1024_80k_cityscapes/nonlocal_r101-d8_512x1024_80k_cityscapes_20200607_183411.log.json) | -| NonLocalNet | R-50-D8 | 769x769 | 80000 | - | - | 79.05 | 80.68 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_769x769_80k_cityscapes/nonlocal_r50-d8_769x769_80k_cityscapes_20200607_193506-1f9792f6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_769x769_80k_cityscapes/nonlocal_r50-d8_769x769_80k_cityscapes_20200607_193506.log.json) | -| NonLocalNet | R-101-D8 | 769x769 | 80000 | - | - | 79.40 | 80.85 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_769x769_80k_cityscapes/nonlocal_r101-d8_769x769_80k_cityscapes_20200607_183428-0e1fa4f9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_769x769_80k_cityscapes/nonlocal_r101-d8_769x769_80k_cityscapes_20200607_183428.log.json) | - -### ADE20K - -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ----------- | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| NonLocalNet | R-50-D8 | 512x512 | 80000 | 9.1 | 21.37 | 40.75 | 42.05 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_80k_ade20k/nonlocal_r50-d8_512x512_80k_ade20k_20200615_015801-5ae0aa33.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_80k_ade20k/nonlocal_r50-d8_512x512_80k_ade20k_20200615_015801.log.json) | -| NonLocalNet | R-101-D8 | 512x512 | 80000 | 12.6 | 13.97 | 42.90 | 44.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_80k_ade20k/nonlocal_r101-d8_512x512_80k_ade20k_20200615_015758-24105919.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_80k_ade20k/nonlocal_r101-d8_512x512_80k_ade20k_20200615_015758.log.json) | -| NonLocalNet | R-50-D8 | 512x512 | 160000 | - | - | 42.03 | 43.04 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_160k_ade20k/nonlocal_r50-d8_512x512_160k_ade20k_20200616_005410-baef45e3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_160k_ade20k/nonlocal_r50-d8_512x512_160k_ade20k_20200616_005410.log.json) | -| NonLocalNet | R-101-D8 | 512x512 | 160000 | - | - | 44.63 | 45.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_160k_ade20k/nonlocal_r101-d8_512x512_160k_ade20k_20210827_221502-7881aa1a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_160k_ade20k/nonlocal_r101-d8_512x512_160k_ade20k_20210827_221502.log.json) | - -### Pascal VOC 2012 + Aug - -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ----------- | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| NonLocalNet | R-50-D8 | 512x512 | 20000 | 6.4 | 21.21 | 76.20 | 77.12 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_20k_voc12aug/nonlocal_r50-d8_512x512_20k_voc12aug_20200617_222613-07f2a57c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_20k_voc12aug/nonlocal_r50-d8_512x512_20k_voc12aug_20200617_222613.log.json) | -| NonLocalNet | R-101-D8 | 512x512 | 20000 | 9.8 | 14.01 | 78.15 | 78.86 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_20k_voc12aug/nonlocal_r101-d8_512x512_20k_voc12aug_20200617_222615-948c68ab.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_20k_voc12aug/nonlocal_r101-d8_512x512_20k_voc12aug_20200617_222615.log.json) | -| NonLocalNet | R-50-D8 | 512x512 | 40000 | - | - | 76.65 | 77.47 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_40k_voc12aug/nonlocal_r50-d8_512x512_40k_voc12aug_20200614_000028-0139d4a9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_40k_voc12aug/nonlocal_r50-d8_512x512_40k_voc12aug_20200614_000028.log.json) | -| NonLocalNet | R-101-D8 | 512x512 | 40000 | - | - | 78.27 | 79.12 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_40k_voc12aug/nonlocal_r101-d8_512x512_40k_voc12aug_20200614_000028-7e5ff470.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_40k_voc12aug/nonlocal_r101-d8_512x512_40k_voc12aug_20200614_000028.log.json) | diff --git a/configs/nonlocal_net/metafile.yaml b/configs/nonlocal_net/metafile.yaml new file mode 100644 index 0000000000..69bd72570b --- /dev/null +++ b/configs/nonlocal_net/metafile.yaml @@ -0,0 +1,387 @@ +Collections: +- Name: NonLocalNet + License: Apache License 2.0 + Metadata: + Training Data: + - Cityscapes + - ADE20K + - Pascal VOC 2012 + Aug + Paper: + Title: Non-local Neural Networks + URL: https://arxiv.org/abs/1711.07971 + README: configs/nonlocal_net/README.md + Frameworks: + - PyTorch +Models: +- Name: nonlocal_r50-d8_4xb2-40k_cityscapes-512x1024 + In Collection: NonLocalNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.24 + Config: configs/nonlocal_net/nonlocal_r50-d8_4xb2-40k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - NonLocalNet + Training Resources: 4x V100 GPUS + Memory (GB): 7.4 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x1024_40k_cityscapes/nonlocal_r50-d8_512x1024_40k_cityscapes_20200605_210748-c75e81e3.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x1024_40k_cityscapes/nonlocal_r50-d8_512x1024_40k_cityscapes_20200605_210748.log.json + Paper: + Title: Non-local Neural Networks + URL: https://arxiv.org/abs/1711.07971 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/nl_head.py#L10 + Framework: PyTorch +- Name: nonlocal_r101-d8_4xb2-40k_cityscapes-512x1024 + In Collection: NonLocalNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.66 + Config: configs/nonlocal_net/nonlocal_r101-d8_4xb2-40k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - NonLocalNet + Training Resources: 4x V100 GPUS + Memory (GB): 10.9 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x1024_40k_cityscapes/nonlocal_r101-d8_512x1024_40k_cityscapes_20200605_210748-d63729fa.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x1024_40k_cityscapes/nonlocal_r101-d8_512x1024_40k_cityscapes_20200605_210748.log.json + Paper: + Title: Non-local Neural Networks + URL: https://arxiv.org/abs/1711.07971 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/nl_head.py#L10 + Framework: PyTorch +- Name: nonlocal_r50-d8_4xb2-40k_cityscapes-769x769 + In Collection: NonLocalNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.33 + mIoU(ms+flip): 79.92 + Config: configs/nonlocal_net/nonlocal_r50-d8_4xb2-40k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - NonLocalNet + Training Resources: 4x V100 GPUS + Memory (GB): 8.9 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_769x769_40k_cityscapes/nonlocal_r50-d8_769x769_40k_cityscapes_20200530_045243-82ef6749.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_769x769_40k_cityscapes/nonlocal_r50-d8_769x769_40k_cityscapes_20200530_045243.log.json + Paper: + Title: Non-local Neural Networks + URL: https://arxiv.org/abs/1711.07971 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/nl_head.py#L10 + Framework: PyTorch +- Name: nonlocal_r101-d8_4xb2-40k_cityscapes-769x769 + In Collection: NonLocalNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.57 + mIoU(ms+flip): 80.29 + Config: configs/nonlocal_net/nonlocal_r101-d8_4xb2-40k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - NonLocalNet + Training Resources: 4x V100 GPUS + Memory (GB): 12.8 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_769x769_40k_cityscapes/nonlocal_r101-d8_769x769_40k_cityscapes_20200530_045348-8fe9a9dc.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_769x769_40k_cityscapes/nonlocal_r101-d8_769x769_40k_cityscapes_20200530_045348.log.json + Paper: + Title: Non-local Neural Networks + URL: https://arxiv.org/abs/1711.07971 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/nl_head.py#L10 + Framework: PyTorch +- Name: nonlocal_r50-d8_4xb2-80k_cityscapes-512x1024 + In Collection: NonLocalNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.01 + Config: configs/nonlocal_net/nonlocal_r50-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - NonLocalNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x1024_80k_cityscapes/nonlocal_r50-d8_512x1024_80k_cityscapes_20200607_193518-d6839fae.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x1024_80k_cityscapes/nonlocal_r50-d8_512x1024_80k_cityscapes_20200607_193518.log.json + Paper: + Title: Non-local Neural Networks + URL: https://arxiv.org/abs/1711.07971 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/nl_head.py#L10 + Framework: PyTorch +- Name: nonlocal_r101-d8_4xb2-80k_cityscapes-512x1024 + In Collection: NonLocalNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.93 + Config: configs/nonlocal_net/nonlocal_r101-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - NonLocalNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x1024_80k_cityscapes/nonlocal_r101-d8_512x1024_80k_cityscapes_20200607_183411-32700183.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x1024_80k_cityscapes/nonlocal_r101-d8_512x1024_80k_cityscapes_20200607_183411.log.json + Paper: + Title: Non-local Neural Networks + URL: https://arxiv.org/abs/1711.07971 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/nl_head.py#L10 + Framework: PyTorch +- Name: nonlocal_r50-d8_4xb2-80k_cityscapes-769x769 + In Collection: NonLocalNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.05 + mIoU(ms+flip): 80.68 + Config: configs/nonlocal_net/nonlocal_r50-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - NonLocalNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_769x769_80k_cityscapes/nonlocal_r50-d8_769x769_80k_cityscapes_20200607_193506-1f9792f6.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_769x769_80k_cityscapes/nonlocal_r50-d8_769x769_80k_cityscapes_20200607_193506.log.json + Paper: + Title: Non-local Neural Networks + URL: https://arxiv.org/abs/1711.07971 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/nl_head.py#L10 + Framework: PyTorch +- Name: nonlocal_r101-d8_4xb2-80k_cityscapes-769x769 + In Collection: NonLocalNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.4 + mIoU(ms+flip): 80.85 + Config: configs/nonlocal_net/nonlocal_r101-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - NonLocalNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_769x769_80k_cityscapes/nonlocal_r101-d8_769x769_80k_cityscapes_20200607_183428-0e1fa4f9.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_769x769_80k_cityscapes/nonlocal_r101-d8_769x769_80k_cityscapes_20200607_183428.log.json + Paper: + Title: Non-local Neural Networks + URL: https://arxiv.org/abs/1711.07971 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/nl_head.py#L10 + Framework: PyTorch +- Name: nonlocal_r50-d8_4xb4-80k_ade20k-512x512 + In Collection: NonLocalNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 40.75 + mIoU(ms+flip): 42.05 + Config: configs/nonlocal_net/nonlocal_r50-d8_4xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50-D8 + - NonLocalNet + Training Resources: 4x V100 GPUS + Memory (GB): 9.1 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_80k_ade20k/nonlocal_r50-d8_512x512_80k_ade20k_20200615_015801-5ae0aa33.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_80k_ade20k/nonlocal_r50-d8_512x512_80k_ade20k_20200615_015801.log.json + Paper: + Title: Non-local Neural Networks + URL: https://arxiv.org/abs/1711.07971 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/nl_head.py#L10 + Framework: PyTorch +- Name: nonlocal_r101-d8_4xb4-80k_ade20k-512x512 + In Collection: NonLocalNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 42.9 + mIoU(ms+flip): 44.27 + Config: configs/nonlocal_net/nonlocal_r101-d8_4xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-101-D8 + - NonLocalNet + Training Resources: 4x V100 GPUS + Memory (GB): 12.6 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_80k_ade20k/nonlocal_r101-d8_512x512_80k_ade20k_20200615_015758-24105919.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_80k_ade20k/nonlocal_r101-d8_512x512_80k_ade20k_20200615_015758.log.json + Paper: + Title: Non-local Neural Networks + URL: https://arxiv.org/abs/1711.07971 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/nl_head.py#L10 + Framework: PyTorch +- Name: nonlocal_r50-d8_4xb4-160k_ade20k-512x512 + In Collection: NonLocalNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 42.03 + mIoU(ms+flip): 43.04 + Config: configs/nonlocal_net/nonlocal_r50-d8_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50-D8 + - NonLocalNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_160k_ade20k/nonlocal_r50-d8_512x512_160k_ade20k_20200616_005410-baef45e3.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_160k_ade20k/nonlocal_r50-d8_512x512_160k_ade20k_20200616_005410.log.json + Paper: + Title: Non-local Neural Networks + URL: https://arxiv.org/abs/1711.07971 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/nl_head.py#L10 + Framework: PyTorch +- Name: nonlocal_r101-d8_4xb4-160k_ade20k-512x512 + In Collection: NonLocalNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 44.63 + mIoU(ms+flip): 45.79 + Config: configs/nonlocal_net/nonlocal_r101-d8_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-101-D8 + - NonLocalNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_160k_ade20k/nonlocal_r101-d8_512x512_160k_ade20k_20210827_221502-7881aa1a.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_160k_ade20k/nonlocal_r101-d8_512x512_160k_ade20k_20210827_221502.log.json + Paper: + Title: Non-local Neural Networks + URL: https://arxiv.org/abs/1711.07971 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/nl_head.py#L10 + Framework: PyTorch +- Name: nonlocal_r50-d8_4xb4-20k_voc12aug-512x512 + In Collection: NonLocalNet + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 76.2 + mIoU(ms+flip): 77.12 + Config: configs/nonlocal_net/nonlocal_r50-d8_4xb4-20k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - R-50-D8 + - NonLocalNet + Training Resources: 4x V100 GPUS + Memory (GB): 6.4 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_20k_voc12aug/nonlocal_r50-d8_512x512_20k_voc12aug_20200617_222613-07f2a57c.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_20k_voc12aug/nonlocal_r50-d8_512x512_20k_voc12aug_20200617_222613.log.json + Paper: + Title: Non-local Neural Networks + URL: https://arxiv.org/abs/1711.07971 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/nl_head.py#L10 + Framework: PyTorch +- Name: nonlocal_r101-d8_4xb4-20k_voc12aug-512x512 + In Collection: NonLocalNet + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 78.15 + mIoU(ms+flip): 78.86 + Config: configs/nonlocal_net/nonlocal_r101-d8_4xb4-20k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - R-101-D8 + - NonLocalNet + Training Resources: 4x V100 GPUS + Memory (GB): 9.8 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_20k_voc12aug/nonlocal_r101-d8_512x512_20k_voc12aug_20200617_222615-948c68ab.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_20k_voc12aug/nonlocal_r101-d8_512x512_20k_voc12aug_20200617_222615.log.json + Paper: + Title: Non-local Neural Networks + URL: https://arxiv.org/abs/1711.07971 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/nl_head.py#L10 + Framework: PyTorch +- Name: nonlocal_r50-d8_4xb4-40k_voc12aug-512x512 + In Collection: NonLocalNet + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 76.65 + mIoU(ms+flip): 77.47 + Config: configs/nonlocal_net/nonlocal_r50-d8_4xb4-40k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - R-50-D8 + - NonLocalNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_40k_voc12aug/nonlocal_r50-d8_512x512_40k_voc12aug_20200614_000028-0139d4a9.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_40k_voc12aug/nonlocal_r50-d8_512x512_40k_voc12aug_20200614_000028.log.json + Paper: + Title: Non-local Neural Networks + URL: https://arxiv.org/abs/1711.07971 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/nl_head.py#L10 + Framework: PyTorch +- Name: nonlocal_r101-d8_4xb4-40k_voc12aug-512x512 + In Collection: NonLocalNet + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 78.27 + mIoU(ms+flip): 79.12 + Config: configs/nonlocal_net/nonlocal_r101-d8_4xb4-40k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - R-101-D8 + - NonLocalNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_40k_voc12aug/nonlocal_r101-d8_512x512_40k_voc12aug_20200614_000028-7e5ff470.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_40k_voc12aug/nonlocal_r101-d8_512x512_40k_voc12aug_20200614_000028.log.json + Paper: + Title: Non-local Neural Networks + URL: https://arxiv.org/abs/1711.07971 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/nl_head.py#L10 + Framework: PyTorch diff --git a/configs/nonlocal_net/nonlocal_net.yml b/configs/nonlocal_net/nonlocal_net.yml deleted file mode 100644 index 22f32c5abb..0000000000 --- a/configs/nonlocal_net/nonlocal_net.yml +++ /dev/null @@ -1,301 +0,0 @@ -Collections: -- Name: NonLocalNet - Metadata: - Training Data: - - Cityscapes - - ADE20K - - Pascal VOC 2012 + Aug - Paper: - URL: https://arxiv.org/abs/1711.07971 - Title: Non-local Neural Networks - README: configs/nonlocal_net/README.md - Code: - URL: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/nl_head.py#L10 - Version: v0.17.0 - Converted From: - Code: https://github.com/facebookresearch/video-nonlocal-net -Models: -- Name: nonlocal_r50-d8_4xb2-40k_cityscapes-512x1024 - In Collection: NonLocalNet - Metadata: - backbone: R-50-D8 - crop size: (512,1024) - lr schd: 40000 - inference time (ms/im): - - value: 367.65 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 7.4 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.24 - Config: configs/nonlocal_net/nonlocal_r50-d8_4xb2-40k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x1024_40k_cityscapes/nonlocal_r50-d8_512x1024_40k_cityscapes_20200605_210748-c75e81e3.pth -- Name: nonlocal_r101-d8_4xb2-40k_cityscapes-512x1024 - In Collection: NonLocalNet - Metadata: - backbone: R-101-D8 - crop size: (512,1024) - lr schd: 40000 - inference time (ms/im): - - value: 512.82 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 10.9 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.66 - Config: configs/nonlocal_net/nonlocal_r101-d8_4xb2-40k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x1024_40k_cityscapes/nonlocal_r101-d8_512x1024_40k_cityscapes_20200605_210748-d63729fa.pth -- Name: nonlocal_r50-d8_4xb2-40k_cityscapes-769x769 - In Collection: NonLocalNet - Metadata: - backbone: R-50-D8 - crop size: (769,769) - lr schd: 40000 - inference time (ms/im): - - value: 657.89 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 8.9 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.33 - mIoU(ms+flip): 79.92 - Config: configs/nonlocal_net/nonlocal_r50-d8_4xb2-40k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_769x769_40k_cityscapes/nonlocal_r50-d8_769x769_40k_cityscapes_20200530_045243-82ef6749.pth -- Name: nonlocal_r101-d8_4xb2-40k_cityscapes-769x769 - In Collection: NonLocalNet - Metadata: - backbone: R-101-D8 - crop size: (769,769) - lr schd: 40000 - inference time (ms/im): - - value: 952.38 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 12.8 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.57 - mIoU(ms+flip): 80.29 - Config: configs/nonlocal_net/nonlocal_r101-d8_4xb2-40k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_769x769_40k_cityscapes/nonlocal_r101-d8_769x769_40k_cityscapes_20200530_045348-8fe9a9dc.pth -- Name: nonlocal_r50-d8_4xb2-80k_cityscapes-512x1024 - In Collection: NonLocalNet - Metadata: - backbone: R-50-D8 - crop size: (512,1024) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.01 - Config: configs/nonlocal_net/nonlocal_r50-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x1024_80k_cityscapes/nonlocal_r50-d8_512x1024_80k_cityscapes_20200607_193518-d6839fae.pth -- Name: nonlocal_r101-d8_4xb2-80k_cityscapes-512x1024 - In Collection: NonLocalNet - Metadata: - backbone: R-101-D8 - crop size: (512,1024) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.93 - Config: configs/nonlocal_net/nonlocal_r101-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x1024_80k_cityscapes/nonlocal_r101-d8_512x1024_80k_cityscapes_20200607_183411-32700183.pth -- Name: nonlocal_r50-d8_4xb2-80k_cityscapes-769x769 - In Collection: NonLocalNet - Metadata: - backbone: R-50-D8 - crop size: (769,769) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.05 - mIoU(ms+flip): 80.68 - Config: configs/nonlocal_net/nonlocal_r50-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_769x769_80k_cityscapes/nonlocal_r50-d8_769x769_80k_cityscapes_20200607_193506-1f9792f6.pth -- Name: nonlocal_r101-d8_4xb2-80k_cityscapes-769x769 - In Collection: NonLocalNet - Metadata: - backbone: R-101-D8 - crop size: (769,769) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.4 - mIoU(ms+flip): 80.85 - Config: configs/nonlocal_net/nonlocal_r101-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_769x769_80k_cityscapes/nonlocal_r101-d8_769x769_80k_cityscapes_20200607_183428-0e1fa4f9.pth -- Name: nonlocal_r50-d8_4xb4-80k_ade20k-512x512 - In Collection: NonLocalNet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 46.79 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 9.1 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 40.75 - mIoU(ms+flip): 42.05 - Config: configs/nonlocal_net/nonlocal_r50-d8_4xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_80k_ade20k/nonlocal_r50-d8_512x512_80k_ade20k_20200615_015801-5ae0aa33.pth -- Name: nonlocal_r101-d8_4xb4-80k_ade20k-512x512 - In Collection: NonLocalNet - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 71.58 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 12.6 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 42.9 - mIoU(ms+flip): 44.27 - Config: configs/nonlocal_net/nonlocal_r101-d8_4xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_80k_ade20k/nonlocal_r101-d8_512x512_80k_ade20k_20200615_015758-24105919.pth -- Name: nonlocal_r50-d8_4xb4-160k_ade20k-512x512 - In Collection: NonLocalNet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 42.03 - mIoU(ms+flip): 43.04 - Config: configs/nonlocal_net/nonlocal_r50-d8_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_160k_ade20k/nonlocal_r50-d8_512x512_160k_ade20k_20200616_005410-baef45e3.pth -- Name: nonlocal_r101-d8_4xb4-160k_ade20k-512x512 - In Collection: NonLocalNet - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 44.63 - mIoU(ms+flip): 45.79 - Config: configs/nonlocal_net/nonlocal_r101-d8_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_160k_ade20k/nonlocal_r101-d8_512x512_160k_ade20k_20210827_221502-7881aa1a.pth -- Name: nonlocal_r50-d8_4xb4-20k_voc12aug-512x512 - In Collection: NonLocalNet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 20000 - inference time (ms/im): - - value: 47.15 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 6.4 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 76.2 - mIoU(ms+flip): 77.12 - Config: configs/nonlocal_net/nonlocal_r50-d8_4xb4-20k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_20k_voc12aug/nonlocal_r50-d8_512x512_20k_voc12aug_20200617_222613-07f2a57c.pth -- Name: nonlocal_r101-d8_4xb4-20k_voc12aug-512x512 - In Collection: NonLocalNet - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 20000 - inference time (ms/im): - - value: 71.38 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 9.8 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 78.15 - mIoU(ms+flip): 78.86 - Config: configs/nonlocal_net/nonlocal_r101-d8_4xb4-20k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_20k_voc12aug/nonlocal_r101-d8_512x512_20k_voc12aug_20200617_222615-948c68ab.pth -- Name: nonlocal_r50-d8_4xb4-40k_voc12aug-512x512 - In Collection: NonLocalNet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 40000 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 76.65 - mIoU(ms+flip): 77.47 - Config: configs/nonlocal_net/nonlocal_r50-d8_4xb4-40k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_40k_voc12aug/nonlocal_r50-d8_512x512_40k_voc12aug_20200614_000028-0139d4a9.pth -- Name: nonlocal_r101-d8_4xb4-40k_voc12aug-512x512 - In Collection: NonLocalNet - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 40000 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 78.27 - mIoU(ms+flip): 79.12 - Config: configs/nonlocal_net/nonlocal_r101-d8_4xb4-40k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_40k_voc12aug/nonlocal_r101-d8_512x512_40k_voc12aug_20200614_000028-7e5ff470.pth diff --git a/configs/ocrnet/README.md b/configs/ocrnet/README.md index 4bd9c7d0b0..5b078f59c2 100644 --- a/configs/ocrnet/README.md +++ b/configs/ocrnet/README.md @@ -1,6 +1,6 @@ # OCRNet -[Object-Contextual Representations for Semantic Segmentation](https://arxiv.org/abs/1909.11065) +> [Object-Contextual Representations for Semantic Segmentation](https://arxiv.org/abs/1909.11065) ## Introduction @@ -22,6 +22,54 @@ In this paper, we address the problem of semantic segmentation and focus on the +## Results and models + +### Cityscapes + +#### HRNet backbone + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | ------------------ | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| OCRNet | HRNetV2p-W18-Small | 512x1024 | 40000 | 3.5 | 10.45 | A100 | 76.61 | 78.01 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18s_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_4xb2-40k_cityscapes-512x1024/ocrnet_hr18s_4xb2-40k_cityscapes-512x1024_20230227_145026-6c052a14.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_4xb2-40k_cityscapes-512x1024/ocrnet_hr18s_4xb2-40k_cityscapes-512x1024_20230227_145026.json) | +| OCRNet | HRNetV2p-W18 | 512x1024 | 40000 | 4.7 | 7.50 | V100 | 77.72 | 79.49 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_40k_cityscapes/ocrnet_hr18_512x1024_40k_cityscapes_20200601_033320-401c5bdd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_40k_cityscapes/ocrnet_hr18_512x1024_40k_cityscapes_20200601_033320.log.json) | +| OCRNet | HRNetV2p-W48 | 512x1024 | 40000 | 8 | 4.22 | V100 | 80.58 | 81.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr48_4xb2-40k_cityscapes-512x1024.pyy) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_40k_cityscapes/ocrnet_hr48_512x1024_40k_cityscapes_20200601_033336-55b32491.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_40k_cityscapes/ocrnet_hr48_512x1024_40k_cityscapes_20200601_033336.log.json) | +| OCRNet | HRNetV2p-W18-Small | 512x1024 | 80000 | - | - | V100 | 77.16 | 78.66 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18s_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x1024_80k_cityscapes/ocrnet_hr18s_512x1024_80k_cityscapes_20200601_222735-55979e63.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x1024_80k_cityscapes/ocrnet_hr18s_512x1024_80k_cityscapes_20200601_222735.log.json) | +| OCRNet | HRNetV2p-W18 | 512x1024 | 80000 | - | - | V100 | 78.57 | 80.46 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_80k_cityscapes/ocrnet_hr18_512x1024_80k_cityscapes_20200614_230521-c2e1dd4a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_80k_cityscapes/ocrnet_hr18_512x1024_80k_cityscapes_20200614_230521.log.json) | +| OCRNet | HRNetV2p-W48 | 512x1024 | 80000 | - | - | V100 | 80.70 | 81.87 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr48_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_80k_cityscapes/ocrnet_hr48_512x1024_80k_cityscapes_20200601_222752-9076bcdf.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_80k_cityscapes/ocrnet_hr48_512x1024_80k_cityscapes_20200601_222752.log.json) | +| OCRNet | HRNetV2p-W18-Small | 512x1024 | 160000 | - | - | V100 | 78.45 | 79.97 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18s_4xb2-160k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x1024_160k_cityscapes/ocrnet_hr18s_512x1024_160k_cityscapes_20200602_191005-f4a7af28.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x1024_160k_cityscapes/ocrnet_hr18s_512x1024_160k_cityscapes_20200602_191005.log.json) | +| OCRNet | HRNetV2p-W18 | 512x1024 | 160000 | - | - | V100 | 79.47 | 80.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18_4xb2-160k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_160k_cityscapes/ocrnet_hr18_512x1024_160k_cityscapes_20200602_191001-b9172d0c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_160k_cityscapes/ocrnet_hr18_512x1024_160k_cityscapes_20200602_191001.log.json) | +| OCRNet | HRNetV2p-W48 | 512x1024 | 160000 | - | - | V100 | 81.35 | 82.70 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr48_4xb2-160k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_160k_cityscapes/ocrnet_hr48_512x1024_160k_cityscapes_20200602_191037-dfbf1b0c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_160k_cityscapes/ocrnet_hr48_512x1024_160k_cityscapes_20200602_191037.log.json) | + +#### ResNet backbone + +| Method | Backbone | Crop Size | Batch Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ---------- | ------- | -------- | -------------- | ------ | ----- | ------------: | --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| OCRNet | R-101-D8 | 512x1024 | 8 | 40000 | - | - | V100 | 80.09 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_r101-d8_512x1024_40k_b8_cityscapes/ocrnet_r101-d8_512x1024_40k_b8_cityscapes_20200717_110721-02ac0f13.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_r101-d8_512x1024_40k_b8_cityscapes/ocrnet_r101-d8_512x1024_40k_b8_cityscapes_20200717_110721.log.json) | +| OCRNet | R-101-D8 | 512x1024 | 16 | 40000 | 8.8 | 3.02 | V100 | 80.30 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_r101-d8_8xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_r101-d8_512x1024_40k_b16_cityscapes/ocrnet_r101-d8_512x1024_40k_b16_cityscapes_20200723_193726-db500f80.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_r101-d8_512x1024_40k_b16_cityscapes/ocrnet_r101-d8_512x1024_40k_b16_cityscapes_20200723_193726.log.json) | +| OCRNet | R-101-D8 | 512x1024 | 16 | 80000 | 8.8 | 3.02 | V100 | 80.81 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_r101-d8_8xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_r101-d8_512x1024_80k_b16_cityscapes/ocrnet_r101-d8_512x1024_80k_b16_cityscapes_20200723_192421-78688424.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_r101-d8_512x1024_80k_b16_cityscapes/ocrnet_r101-d8_512x1024_80k_b16_cityscapes_20200723_192421.log.json) | + +### ADE20K + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | ------------------ | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| OCRNet | HRNetV2p-W18-Small | 512x512 | 80000 | 6.7 | 28.98 | V100 | 35.06 | 35.80 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18s_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_80k_ade20k/ocrnet_hr18s_512x512_80k_ade20k_20200615_055600-e80b62af.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_80k_ade20k/ocrnet_hr18s_512x512_80k_ade20k_20200615_055600.log.json) | +| OCRNet | HRNetV2p-W18 | 512x512 | 80000 | 7.9 | 18.93 | V100 | 37.79 | 39.16 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_80k_ade20k/ocrnet_hr18_512x512_80k_ade20k_20200615_053157-d173d83b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_80k_ade20k/ocrnet_hr18_512x512_80k_ade20k_20200615_053157.log.json) | +| OCRNet | HRNetV2p-W48 | 512x512 | 80000 | 11.2 | 16.99 | V100 | 43.00 | 44.30 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr48_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_80k_ade20k/ocrnet_hr48_512x512_80k_ade20k_20200615_021518-d168c2d1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_80k_ade20k/ocrnet_hr48_512x512_80k_ade20k_20200615_021518.log.json) | +| OCRNet | HRNetV2p-W18-Small | 512x512 | 160000 | - | - | V100 | 37.19 | 38.40 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18s_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_160k_ade20k/ocrnet_hr18s_512x512_160k_ade20k_20200615_184505-8e913058.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_160k_ade20k/ocrnet_hr18s_512x512_160k_ade20k_20200615_184505.log.json) | +| OCRNet | HRNetV2p-W18 | 512x512 | 160000 | - | - | V100 | 39.32 | 40.80 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_160k_ade20k/ocrnet_hr18_512x512_160k_ade20k_20200615_200940-d8fcd9d1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_160k_ade20k/ocrnet_hr18_512x512_160k_ade20k_20200615_200940.log.json) | +| OCRNet | HRNetV2p-W48 | 512x512 | 160000 | - | - | V100 | 43.25 | 44.88 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr48_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_160k_ade20k/ocrnet_hr48_512x512_160k_ade20k_20200615_184705-a073726d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_160k_ade20k/ocrnet_hr48_512x512_160k_ade20k_20200615_184705.log.json) | + +### Pascal VOC 2012 + Aug + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | ------------------ | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| OCRNet | HRNetV2p-W18-Small | 512x512 | 20000 | 3.5 | 31.55 | V100 | 71.70 | 73.84 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18s_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_20k_voc12aug/ocrnet_hr18s_512x512_20k_voc12aug_20200617_233913-02b04fcb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_20k_voc12aug/ocrnet_hr18s_512x512_20k_voc12aug_20200617_233913.log.json) | +| OCRNet | HRNetV2p-W18 | 512x512 | 20000 | 4.7 | 19.91 | V100 | 74.75 | 77.11 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_20k_voc12aug/ocrnet_hr18_512x512_20k_voc12aug_20200617_233932-8954cbb7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_20k_voc12aug/ocrnet_hr18_512x512_20k_voc12aug_20200617_233932.log.json) | +| OCRNet | HRNetV2p-W48 | 512x512 | 20000 | 8.1 | 17.83 | V100 | 77.72 | 79.87 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr48_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_20k_voc12aug/ocrnet_hr48_512x512_20k_voc12aug_20200617_233932-9e82080a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_20k_voc12aug/ocrnet_hr48_512x512_20k_voc12aug_20200617_233932.log.json) | +| OCRNet | HRNetV2p-W18-Small | 512x512 | 40000 | - | - | V100 | 72.76 | 74.60 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18s_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_40k_voc12aug/ocrnet_hr18s_512x512_40k_voc12aug_20200614_002025-42b587ac.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_40k_voc12aug/ocrnet_hr18s_512x512_40k_voc12aug_20200614_002025.log.json) | +| OCRNet | HRNetV2p-W18 | 512x512 | 40000 | - | - | V100 | 74.98 | 77.40 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_40k_voc12aug/ocrnet_hr18_512x512_40k_voc12aug_20200614_015958-714302be.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_40k_voc12aug/ocrnet_hr18_512x512_40k_voc12aug_20200614_015958.log.json) | +| OCRNet | HRNetV2p-W48 | 512x512 | 40000 | - | - | V100 | 77.14 | 79.71 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr48_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_40k_voc12aug/ocrnet_hr48_512x512_40k_voc12aug_20200614_015958-255bc5ce.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_40k_voc12aug/ocrnet_hr48_512x512_40k_voc12aug_20200614_015958.log.json) | + ## Citation ```bibtex @@ -39,51 +87,3 @@ In this paper, we address the problem of semantic segmentation and focus on the year={2020} } ``` - -## Results and models - -### Cityscapes - -#### HRNet backbone - -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | ------------------ | --------- | ------: | -------- | -------------- | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| OCRNet | HRNetV2p-W18-Small | 512x1024 | 40000 | 3.5 | 10.45 | 76.61 | 78.01 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18s_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_4xb2-40k_cityscapes-512x1024/ocrnet_hr18s_4xb2-40k_cityscapes-512x1024_20230227_145026-6c052a14.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_4xb2-40k_cityscapes-512x1024/ocrnet_hr18s_4xb2-40k_cityscapes-512x1024_20230227_145026.json) | -| OCRNet | HRNetV2p-W18 | 512x1024 | 40000 | 4.7 | 7.50 | 77.72 | 79.49 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_40k_cityscapes/ocrnet_hr18_512x1024_40k_cityscapes_20200601_033320-401c5bdd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_40k_cityscapes/ocrnet_hr18_512x1024_40k_cityscapes_20200601_033320.log.json) | -| OCRNet | HRNetV2p-W48 | 512x1024 | 40000 | 8 | 4.22 | 80.58 | 81.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr48_4xb2-40k_cityscapes-512x1024.pyy) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_40k_cityscapes/ocrnet_hr48_512x1024_40k_cityscapes_20200601_033336-55b32491.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_40k_cityscapes/ocrnet_hr48_512x1024_40k_cityscapes_20200601_033336.log.json) | -| OCRNet | HRNetV2p-W18-Small | 512x1024 | 80000 | - | - | 77.16 | 78.66 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18s_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x1024_80k_cityscapes/ocrnet_hr18s_512x1024_80k_cityscapes_20200601_222735-55979e63.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x1024_80k_cityscapes/ocrnet_hr18s_512x1024_80k_cityscapes_20200601_222735.log.json) | -| OCRNet | HRNetV2p-W18 | 512x1024 | 80000 | - | - | 78.57 | 80.46 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_80k_cityscapes/ocrnet_hr18_512x1024_80k_cityscapes_20200614_230521-c2e1dd4a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_80k_cityscapes/ocrnet_hr18_512x1024_80k_cityscapes_20200614_230521.log.json) | -| OCRNet | HRNetV2p-W48 | 512x1024 | 80000 | - | - | 80.70 | 81.87 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr48_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_80k_cityscapes/ocrnet_hr48_512x1024_80k_cityscapes_20200601_222752-9076bcdf.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_80k_cityscapes/ocrnet_hr48_512x1024_80k_cityscapes_20200601_222752.log.json) | -| OCRNet | HRNetV2p-W18-Small | 512x1024 | 160000 | - | - | 78.45 | 79.97 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18s_4xb2-160k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x1024_160k_cityscapes/ocrnet_hr18s_512x1024_160k_cityscapes_20200602_191005-f4a7af28.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x1024_160k_cityscapes/ocrnet_hr18s_512x1024_160k_cityscapes_20200602_191005.log.json) | -| OCRNet | HRNetV2p-W18 | 512x1024 | 160000 | - | - | 79.47 | 80.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18_4xb2-160k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_160k_cityscapes/ocrnet_hr18_512x1024_160k_cityscapes_20200602_191001-b9172d0c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_160k_cityscapes/ocrnet_hr18_512x1024_160k_cityscapes_20200602_191001.log.json) | -| OCRNet | HRNetV2p-W48 | 512x1024 | 160000 | - | - | 81.35 | 82.70 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr48_4xb2-160k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_160k_cityscapes/ocrnet_hr48_512x1024_160k_cityscapes_20200602_191037-dfbf1b0c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_160k_cityscapes/ocrnet_hr48_512x1024_160k_cityscapes_20200602_191037.log.json) | - -#### ResNet backbone - -| Method | Backbone | Crop Size | Batch Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ---------- | ------- | -------- | -------------- | ----- | ------------: | --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| OCRNet | R-101-D8 | 512x1024 | 8 | 40000 | - | - | 80.09 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_r101-d8_512x1024_40k_b8_cityscapes/ocrnet_r101-d8_512x1024_40k_b8_cityscapes_20200717_110721-02ac0f13.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_r101-d8_512x1024_40k_b8_cityscapes/ocrnet_r101-d8_512x1024_40k_b8_cityscapes_20200717_110721.log.json) | -| OCRNet | R-101-D8 | 512x1024 | 16 | 40000 | 8.8 | 3.02 | 80.30 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_r101-d8_8xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_r101-d8_512x1024_40k_b16_cityscapes/ocrnet_r101-d8_512x1024_40k_b16_cityscapes_20200723_193726-db500f80.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_r101-d8_512x1024_40k_b16_cityscapes/ocrnet_r101-d8_512x1024_40k_b16_cityscapes_20200723_193726.log.json) | -| OCRNet | R-101-D8 | 512x1024 | 16 | 80000 | 8.8 | 3.02 | 80.81 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_r101-d8_8xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_r101-d8_512x1024_80k_b16_cityscapes/ocrnet_r101-d8_512x1024_80k_b16_cityscapes_20200723_192421-78688424.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_r101-d8_512x1024_80k_b16_cityscapes/ocrnet_r101-d8_512x1024_80k_b16_cityscapes_20200723_192421.log.json) | - -### ADE20K - -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | ------------------ | --------- | ------: | -------- | -------------- | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| OCRNet | HRNetV2p-W18-Small | 512x512 | 80000 | 6.7 | 28.98 | 35.06 | 35.80 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18s_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_80k_ade20k/ocrnet_hr18s_512x512_80k_ade20k_20200615_055600-e80b62af.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_80k_ade20k/ocrnet_hr18s_512x512_80k_ade20k_20200615_055600.log.json) | -| OCRNet | HRNetV2p-W18 | 512x512 | 80000 | 7.9 | 18.93 | 37.79 | 39.16 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_80k_ade20k/ocrnet_hr18_512x512_80k_ade20k_20200615_053157-d173d83b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_80k_ade20k/ocrnet_hr18_512x512_80k_ade20k_20200615_053157.log.json) | -| OCRNet | HRNetV2p-W48 | 512x512 | 80000 | 11.2 | 16.99 | 43.00 | 44.30 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr48_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_80k_ade20k/ocrnet_hr48_512x512_80k_ade20k_20200615_021518-d168c2d1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_80k_ade20k/ocrnet_hr48_512x512_80k_ade20k_20200615_021518.log.json) | -| OCRNet | HRNetV2p-W18-Small | 512x512 | 160000 | - | - | 37.19 | 38.40 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18s_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_160k_ade20k/ocrnet_hr18s_512x512_160k_ade20k_20200615_184505-8e913058.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_160k_ade20k/ocrnet_hr18s_512x512_160k_ade20k_20200615_184505.log.json) | -| OCRNet | HRNetV2p-W18 | 512x512 | 160000 | - | - | 39.32 | 40.80 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_160k_ade20k/ocrnet_hr18_512x512_160k_ade20k_20200615_200940-d8fcd9d1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_160k_ade20k/ocrnet_hr18_512x512_160k_ade20k_20200615_200940.log.json) | -| OCRNet | HRNetV2p-W48 | 512x512 | 160000 | - | - | 43.25 | 44.88 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr48_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_160k_ade20k/ocrnet_hr48_512x512_160k_ade20k_20200615_184705-a073726d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_160k_ade20k/ocrnet_hr48_512x512_160k_ade20k_20200615_184705.log.json) | - -### Pascal VOC 2012 + Aug - -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | ------------------ | --------- | ------: | -------- | -------------- | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| OCRNet | HRNetV2p-W18-Small | 512x512 | 20000 | 3.5 | 31.55 | 71.70 | 73.84 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18s_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_20k_voc12aug/ocrnet_hr18s_512x512_20k_voc12aug_20200617_233913-02b04fcb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_20k_voc12aug/ocrnet_hr18s_512x512_20k_voc12aug_20200617_233913.log.json) | -| OCRNet | HRNetV2p-W18 | 512x512 | 20000 | 4.7 | 19.91 | 74.75 | 77.11 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_20k_voc12aug/ocrnet_hr18_512x512_20k_voc12aug_20200617_233932-8954cbb7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_20k_voc12aug/ocrnet_hr18_512x512_20k_voc12aug_20200617_233932.log.json) | -| OCRNet | HRNetV2p-W48 | 512x512 | 20000 | 8.1 | 17.83 | 77.72 | 79.87 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr48_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_20k_voc12aug/ocrnet_hr48_512x512_20k_voc12aug_20200617_233932-9e82080a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_20k_voc12aug/ocrnet_hr48_512x512_20k_voc12aug_20200617_233932.log.json) | -| OCRNet | HRNetV2p-W18-Small | 512x512 | 40000 | - | - | 72.76 | 74.60 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18s_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_40k_voc12aug/ocrnet_hr18s_512x512_40k_voc12aug_20200614_002025-42b587ac.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_40k_voc12aug/ocrnet_hr18s_512x512_40k_voc12aug_20200614_002025.log.json) | -| OCRNet | HRNetV2p-W18 | 512x512 | 40000 | - | - | 74.98 | 77.40 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_40k_voc12aug/ocrnet_hr18_512x512_40k_voc12aug_20200614_015958-714302be.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_40k_voc12aug/ocrnet_hr18_512x512_40k_voc12aug_20200614_015958.log.json) | -| OCRNet | HRNetV2p-W48 | 512x512 | 40000 | - | - | 77.14 | 79.71 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr48_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_40k_voc12aug/ocrnet_hr48_512x512_40k_voc12aug_20200614_015958-255bc5ce.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_40k_voc12aug/ocrnet_hr48_512x512_40k_voc12aug_20200614_015958.log.json) | diff --git a/configs/ocrnet/metafile.yaml b/configs/ocrnet/metafile.yaml new file mode 100644 index 0000000000..5467feb975 --- /dev/null +++ b/configs/ocrnet/metafile.yaml @@ -0,0 +1,577 @@ +Collections: +- Name: OCRNet + License: Apache License 2.0 + Metadata: + Training Data: + - Cityscapes + - '# HRNet backbone' + - '# ResNet backbone' + - ADE20K + - Pascal VOC 2012 + Aug + Paper: + Title: Object-Contextual Representations for Semantic Segmentation + URL: https://arxiv.org/abs/1909.11065 + README: configs/ocrnet/README.md + Frameworks: + - PyTorch +Models: +- Name: ocrnet_hr18s_4xb2-40k_cityscapes-512x1024 + In Collection: OCRNet + Results: + Task: Semantic Segmentation + Dataset: '# HRNet backbone' + Metrics: + mIoU: 76.61 + mIoU(ms+flip): 78.01 + Config: configs/ocrnet/ocrnet_hr18s_4xb2-40k_cityscapes-512x1024.py + Metadata: + Training Data: '# HRNet backbone' + Batch Size: 8 + Architecture: + - HRNetV2p-W18-Small + - OCRNet + Training Resources: 4x A100 GPUS + Memory (GB): 3.5 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_4xb2-40k_cityscapes-512x1024/ocrnet_hr18s_4xb2-40k_cityscapes-512x1024_20230227_145026-6c052a14.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_4xb2-40k_cityscapes-512x1024/ocrnet_hr18s_4xb2-40k_cityscapes-512x1024_20230227_145026.json + Paper: + Title: Object-Contextual Representations for Semantic Segmentation + URL: https://arxiv.org/abs/1909.11065 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/ocr_head.py#L86 + Framework: PyTorch +- Name: ocrnet_hr18_4xb2-40k_cityscapes-512x1024 + In Collection: OCRNet + Results: + Task: Semantic Segmentation + Dataset: '# HRNet backbone' + Metrics: + mIoU: 77.72 + mIoU(ms+flip): 79.49 + Config: configs/ocrnet/ocrnet_hr18_4xb2-40k_cityscapes-512x1024.py + Metadata: + Training Data: '# HRNet backbone' + Batch Size: 8 + Architecture: + - HRNetV2p-W18 + - OCRNet + Training Resources: 4x V100 GPUS + Memory (GB): 4.7 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_40k_cityscapes/ocrnet_hr18_512x1024_40k_cityscapes_20200601_033320-401c5bdd.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_40k_cityscapes/ocrnet_hr18_512x1024_40k_cityscapes_20200601_033320.log.json + Paper: + Title: Object-Contextual Representations for Semantic Segmentation + URL: https://arxiv.org/abs/1909.11065 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/ocr_head.py#L86 + Framework: PyTorch +- Name: ocrnet_hr48_4xb2-40k_cityscapes-512x1024 + In Collection: OCRNet + Results: + Task: Semantic Segmentation + Dataset: '# HRNet backbone' + Metrics: + mIoU: 80.58 + mIoU(ms+flip): 81.79 + Config: configs/ocrnet/ocrnet_hr48_4xb2-40k_cityscapes-512x1024.py + Metadata: + Training Data: '# HRNet backbone' + Batch Size: 8 + Architecture: + - HRNetV2p-W48 + - OCRNet + Training Resources: 4x V100 GPUS + Memory (GB): 8.0 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_40k_cityscapes/ocrnet_hr48_512x1024_40k_cityscapes_20200601_033336-55b32491.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_40k_cityscapes/ocrnet_hr48_512x1024_40k_cityscapes_20200601_033336.log.json + Paper: + Title: Object-Contextual Representations for Semantic Segmentation + URL: https://arxiv.org/abs/1909.11065 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/ocr_head.py#L86 + Framework: PyTorch +- Name: ocrnet_hr18s_4xb2-80k_cityscapes-512x1024 + In Collection: OCRNet + Results: + Task: Semantic Segmentation + Dataset: '# HRNet backbone' + Metrics: + mIoU: 77.16 + mIoU(ms+flip): 78.66 + Config: configs/ocrnet/ocrnet_hr18s_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: '# HRNet backbone' + Batch Size: 8 + Architecture: + - HRNetV2p-W18-Small + - OCRNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x1024_80k_cityscapes/ocrnet_hr18s_512x1024_80k_cityscapes_20200601_222735-55979e63.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x1024_80k_cityscapes/ocrnet_hr18s_512x1024_80k_cityscapes_20200601_222735.log.json + Paper: + Title: Object-Contextual Representations for Semantic Segmentation + URL: https://arxiv.org/abs/1909.11065 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/ocr_head.py#L86 + Framework: PyTorch +- Name: ocrnet_hr18_4xb2-80k_cityscapes-512x1024 + In Collection: OCRNet + Results: + Task: Semantic Segmentation + Dataset: '# HRNet backbone' + Metrics: + mIoU: 78.57 + mIoU(ms+flip): 80.46 + Config: configs/ocrnet/ocrnet_hr18_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: '# HRNet backbone' + Batch Size: 8 + Architecture: + - HRNetV2p-W18 + - OCRNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_80k_cityscapes/ocrnet_hr18_512x1024_80k_cityscapes_20200614_230521-c2e1dd4a.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_80k_cityscapes/ocrnet_hr18_512x1024_80k_cityscapes_20200614_230521.log.json + Paper: + Title: Object-Contextual Representations for Semantic Segmentation + URL: https://arxiv.org/abs/1909.11065 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/ocr_head.py#L86 + Framework: PyTorch +- Name: ocrnet_hr48_4xb2-80k_cityscapes-512x1024 + In Collection: OCRNet + Results: + Task: Semantic Segmentation + Dataset: '# HRNet backbone' + Metrics: + mIoU: 80.7 + mIoU(ms+flip): 81.87 + Config: configs/ocrnet/ocrnet_hr48_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: '# HRNet backbone' + Batch Size: 8 + Architecture: + - HRNetV2p-W48 + - OCRNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_80k_cityscapes/ocrnet_hr48_512x1024_80k_cityscapes_20200601_222752-9076bcdf.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_80k_cityscapes/ocrnet_hr48_512x1024_80k_cityscapes_20200601_222752.log.json + Paper: + Title: Object-Contextual Representations for Semantic Segmentation + URL: https://arxiv.org/abs/1909.11065 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/ocr_head.py#L86 + Framework: PyTorch +- Name: ocrnet_hr18s_4xb2-160k_cityscapes-512x1024 + In Collection: OCRNet + Results: + Task: Semantic Segmentation + Dataset: '# HRNet backbone' + Metrics: + mIoU: 78.45 + mIoU(ms+flip): 79.97 + Config: configs/ocrnet/ocrnet_hr18s_4xb2-160k_cityscapes-512x1024.py + Metadata: + Training Data: '# HRNet backbone' + Batch Size: 8 + Architecture: + - HRNetV2p-W18-Small + - OCRNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x1024_160k_cityscapes/ocrnet_hr18s_512x1024_160k_cityscapes_20200602_191005-f4a7af28.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x1024_160k_cityscapes/ocrnet_hr18s_512x1024_160k_cityscapes_20200602_191005.log.json + Paper: + Title: Object-Contextual Representations for Semantic Segmentation + URL: https://arxiv.org/abs/1909.11065 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/ocr_head.py#L86 + Framework: PyTorch +- Name: ocrnet_hr18_4xb2-160k_cityscapes-512x1024 + In Collection: OCRNet + Results: + Task: Semantic Segmentation + Dataset: '# HRNet backbone' + Metrics: + mIoU: 79.47 + mIoU(ms+flip): 80.91 + Config: configs/ocrnet/ocrnet_hr18_4xb2-160k_cityscapes-512x1024.py + Metadata: + Training Data: '# HRNet backbone' + Batch Size: 8 + Architecture: + - HRNetV2p-W18 + - OCRNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_160k_cityscapes/ocrnet_hr18_512x1024_160k_cityscapes_20200602_191001-b9172d0c.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_160k_cityscapes/ocrnet_hr18_512x1024_160k_cityscapes_20200602_191001.log.json + Paper: + Title: Object-Contextual Representations for Semantic Segmentation + URL: https://arxiv.org/abs/1909.11065 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/ocr_head.py#L86 + Framework: PyTorch +- Name: ocrnet_hr48_4xb2-160k_cityscapes-512x1024 + In Collection: OCRNet + Results: + Task: Semantic Segmentation + Dataset: '# HRNet backbone' + Metrics: + mIoU: 81.35 + mIoU(ms+flip): 82.7 + Config: configs/ocrnet/ocrnet_hr48_4xb2-160k_cityscapes-512x1024.py + Metadata: + Training Data: '# HRNet backbone' + Batch Size: 8 + Architecture: + - HRNetV2p-W48 + - OCRNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_160k_cityscapes/ocrnet_hr48_512x1024_160k_cityscapes_20200602_191037-dfbf1b0c.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_160k_cityscapes/ocrnet_hr48_512x1024_160k_cityscapes_20200602_191037.log.json + Paper: + Title: Object-Contextual Representations for Semantic Segmentation + URL: https://arxiv.org/abs/1909.11065 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/ocr_head.py#L86 + Framework: PyTorch +- Name: ocrnet_r101-d8_4xb2-40k_cityscapes-512x1024 + In Collection: OCRNet + Results: + Task: Semantic Segmentation + Dataset: '# ResNet backbone' + Metrics: + mIoU: 80.09 + Config: configs/ocrnet/ocrnet_r101-d8_4xb2-40k_cityscapes-512x1024.py + Metadata: + Training Data: '# ResNet backbone' + Batch Size: 8 + Architecture: + - R-101-D8 + - OCRNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_r101-d8_512x1024_40k_b8_cityscapes/ocrnet_r101-d8_512x1024_40k_b8_cityscapes_20200717_110721-02ac0f13.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_r101-d8_512x1024_40k_b8_cityscapes/ocrnet_r101-d8_512x1024_40k_b8_cityscapes_20200717_110721.log.json + Paper: + Title: Object-Contextual Representations for Semantic Segmentation + URL: https://arxiv.org/abs/1909.11065 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/ocr_head.py#L86 + Framework: PyTorch +- Name: ocrnet_r101-d8_8xb2-40k_cityscapes-512x1024 + In Collection: OCRNet + Results: + Task: Semantic Segmentation + Dataset: '# ResNet backbone' + Metrics: + mIoU: 80.3 + Config: configs/ocrnet/ocrnet_r101-d8_8xb2-40k_cityscapes-512x1024.py + Metadata: + Training Data: '# ResNet backbone' + Batch Size: 16 + Architecture: + - R-101-D8 + - OCRNet + Training Resources: 8x V100 GPUS + Memory (GB): 8.8 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_r101-d8_512x1024_40k_b16_cityscapes/ocrnet_r101-d8_512x1024_40k_b16_cityscapes_20200723_193726-db500f80.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_r101-d8_512x1024_40k_b16_cityscapes/ocrnet_r101-d8_512x1024_40k_b16_cityscapes_20200723_193726.log.json + Paper: + Title: Object-Contextual Representations for Semantic Segmentation + URL: https://arxiv.org/abs/1909.11065 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/ocr_head.py#L86 + Framework: PyTorch +- Name: ocrnet_r101-d8_8xb2-80k_cityscapes-512x1024 + In Collection: OCRNet + Results: + Task: Semantic Segmentation + Dataset: '# ResNet backbone' + Metrics: + mIoU: 80.81 + Config: configs/ocrnet/ocrnet_r101-d8_8xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: '# ResNet backbone' + Batch Size: 16 + Architecture: + - R-101-D8 + - OCRNet + Training Resources: 8x V100 GPUS + Memory (GB): 8.8 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_r101-d8_512x1024_80k_b16_cityscapes/ocrnet_r101-d8_512x1024_80k_b16_cityscapes_20200723_192421-78688424.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_r101-d8_512x1024_80k_b16_cityscapes/ocrnet_r101-d8_512x1024_80k_b16_cityscapes_20200723_192421.log.json + Paper: + Title: Object-Contextual Representations for Semantic Segmentation + URL: https://arxiv.org/abs/1909.11065 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/ocr_head.py#L86 + Framework: PyTorch +- Name: ocrnet_hr18s_4xb4-80k_ade20k-512x512 + In Collection: OCRNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 35.06 + mIoU(ms+flip): 35.8 + Config: configs/ocrnet/ocrnet_hr18s_4xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - HRNetV2p-W18-Small + - OCRNet + Training Resources: 4x V100 GPUS + Memory (GB): 6.7 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_80k_ade20k/ocrnet_hr18s_512x512_80k_ade20k_20200615_055600-e80b62af.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_80k_ade20k/ocrnet_hr18s_512x512_80k_ade20k_20200615_055600.log.json + Paper: + Title: Object-Contextual Representations for Semantic Segmentation + URL: https://arxiv.org/abs/1909.11065 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/ocr_head.py#L86 + Framework: PyTorch +- Name: ocrnet_hr18_4xb4-80k_ade20k-512x512 + In Collection: OCRNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 37.79 + mIoU(ms+flip): 39.16 + Config: configs/ocrnet/ocrnet_hr18_4xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - HRNetV2p-W18 + - OCRNet + Training Resources: 4x V100 GPUS + Memory (GB): 7.9 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_80k_ade20k/ocrnet_hr18_512x512_80k_ade20k_20200615_053157-d173d83b.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_80k_ade20k/ocrnet_hr18_512x512_80k_ade20k_20200615_053157.log.json + Paper: + Title: Object-Contextual Representations for Semantic Segmentation + URL: https://arxiv.org/abs/1909.11065 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/ocr_head.py#L86 + Framework: PyTorch +- Name: ocrnet_hr48_4xb4-80k_ade20k-512x512 + In Collection: OCRNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 43.0 + mIoU(ms+flip): 44.3 + Config: configs/ocrnet/ocrnet_hr48_4xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - HRNetV2p-W48 + - OCRNet + Training Resources: 4x V100 GPUS + Memory (GB): 11.2 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_80k_ade20k/ocrnet_hr48_512x512_80k_ade20k_20200615_021518-d168c2d1.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_80k_ade20k/ocrnet_hr48_512x512_80k_ade20k_20200615_021518.log.json + Paper: + Title: Object-Contextual Representations for Semantic Segmentation + URL: https://arxiv.org/abs/1909.11065 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/ocr_head.py#L86 + Framework: PyTorch +- Name: ocrnet_hr18s_4xb4-80k_ade20k-512x512 + In Collection: OCRNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 37.19 + mIoU(ms+flip): 38.4 + Config: configs/ocrnet/ocrnet_hr18s_4xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - HRNetV2p-W18-Small + - OCRNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_160k_ade20k/ocrnet_hr18s_512x512_160k_ade20k_20200615_184505-8e913058.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_160k_ade20k/ocrnet_hr18s_512x512_160k_ade20k_20200615_184505.log.json + Paper: + Title: Object-Contextual Representations for Semantic Segmentation + URL: https://arxiv.org/abs/1909.11065 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/ocr_head.py#L86 + Framework: PyTorch +- Name: ocrnet_hr18_4xb4-80k_ade20k-512x512 + In Collection: OCRNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 39.32 + mIoU(ms+flip): 40.8 + Config: configs/ocrnet/ocrnet_hr18_4xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - HRNetV2p-W18 + - OCRNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_160k_ade20k/ocrnet_hr18_512x512_160k_ade20k_20200615_200940-d8fcd9d1.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_160k_ade20k/ocrnet_hr18_512x512_160k_ade20k_20200615_200940.log.json + Paper: + Title: Object-Contextual Representations for Semantic Segmentation + URL: https://arxiv.org/abs/1909.11065 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/ocr_head.py#L86 + Framework: PyTorch +- Name: ocrnet_hr48_4xb4-160k_ade20k-512x512 + In Collection: OCRNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 43.25 + mIoU(ms+flip): 44.88 + Config: configs/ocrnet/ocrnet_hr48_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - HRNetV2p-W48 + - OCRNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_160k_ade20k/ocrnet_hr48_512x512_160k_ade20k_20200615_184705-a073726d.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_160k_ade20k/ocrnet_hr48_512x512_160k_ade20k_20200615_184705.log.json + Paper: + Title: Object-Contextual Representations for Semantic Segmentation + URL: https://arxiv.org/abs/1909.11065 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/ocr_head.py#L86 + Framework: PyTorch +- Name: ocrnet_hr18s_4xb4-20k_voc12aug-512x512 + In Collection: OCRNet + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 71.7 + mIoU(ms+flip): 73.84 + Config: configs/ocrnet/ocrnet_hr18s_4xb4-20k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - HRNetV2p-W18-Small + - OCRNet + Training Resources: 4x V100 GPUS + Memory (GB): 3.5 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_20k_voc12aug/ocrnet_hr18s_512x512_20k_voc12aug_20200617_233913-02b04fcb.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_20k_voc12aug/ocrnet_hr18s_512x512_20k_voc12aug_20200617_233913.log.json + Paper: + Title: Object-Contextual Representations for Semantic Segmentation + URL: https://arxiv.org/abs/1909.11065 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/ocr_head.py#L86 + Framework: PyTorch +- Name: ocrnet_hr18_4xb4-20k_voc12aug-512x512 + In Collection: OCRNet + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 74.75 + mIoU(ms+flip): 77.11 + Config: configs/ocrnet/ocrnet_hr18_4xb4-20k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - HRNetV2p-W18 + - OCRNet + Training Resources: 4x V100 GPUS + Memory (GB): 4.7 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_20k_voc12aug/ocrnet_hr18_512x512_20k_voc12aug_20200617_233932-8954cbb7.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_20k_voc12aug/ocrnet_hr18_512x512_20k_voc12aug_20200617_233932.log.json + Paper: + Title: Object-Contextual Representations for Semantic Segmentation + URL: https://arxiv.org/abs/1909.11065 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/ocr_head.py#L86 + Framework: PyTorch +- Name: ocrnet_hr48_4xb4-20k_voc12aug-512x512 + In Collection: OCRNet + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 77.72 + mIoU(ms+flip): 79.87 + Config: configs/ocrnet/ocrnet_hr48_4xb4-20k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - HRNetV2p-W48 + - OCRNet + Training Resources: 4x V100 GPUS + Memory (GB): 8.1 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_20k_voc12aug/ocrnet_hr48_512x512_20k_voc12aug_20200617_233932-9e82080a.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_20k_voc12aug/ocrnet_hr48_512x512_20k_voc12aug_20200617_233932.log.json + Paper: + Title: Object-Contextual Representations for Semantic Segmentation + URL: https://arxiv.org/abs/1909.11065 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/ocr_head.py#L86 + Framework: PyTorch +- Name: ocrnet_hr18s_4xb4-40k_voc12aug-512x512 + In Collection: OCRNet + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 72.76 + mIoU(ms+flip): 74.6 + Config: configs/ocrnet/ocrnet_hr18s_4xb4-40k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - HRNetV2p-W18-Small + - OCRNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_40k_voc12aug/ocrnet_hr18s_512x512_40k_voc12aug_20200614_002025-42b587ac.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_40k_voc12aug/ocrnet_hr18s_512x512_40k_voc12aug_20200614_002025.log.json + Paper: + Title: Object-Contextual Representations for Semantic Segmentation + URL: https://arxiv.org/abs/1909.11065 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/ocr_head.py#L86 + Framework: PyTorch +- Name: ocrnet_hr18_4xb4-40k_voc12aug-512x512 + In Collection: OCRNet + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 74.98 + mIoU(ms+flip): 77.4 + Config: configs/ocrnet/ocrnet_hr18_4xb4-40k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - HRNetV2p-W18 + - OCRNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_40k_voc12aug/ocrnet_hr18_512x512_40k_voc12aug_20200614_015958-714302be.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_40k_voc12aug/ocrnet_hr18_512x512_40k_voc12aug_20200614_015958.log.json + Paper: + Title: Object-Contextual Representations for Semantic Segmentation + URL: https://arxiv.org/abs/1909.11065 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/ocr_head.py#L86 + Framework: PyTorch +- Name: ocrnet_hr48_4xb4-40k_voc12aug-512x512 + In Collection: OCRNet + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 77.14 + mIoU(ms+flip): 79.71 + Config: configs/ocrnet/ocrnet_hr48_4xb4-40k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - HRNetV2p-W48 + - OCRNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_40k_voc12aug/ocrnet_hr48_512x512_40k_voc12aug_20200614_015958-255bc5ce.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_40k_voc12aug/ocrnet_hr48_512x512_40k_voc12aug_20200614_015958.log.json + Paper: + Title: Object-Contextual Representations for Semantic Segmentation + URL: https://arxiv.org/abs/1909.11065 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/ocr_head.py#L86 + Framework: PyTorch diff --git a/configs/ocrnet/ocrnet.yml b/configs/ocrnet/ocrnet.yml deleted file mode 100644 index 20002e8864..0000000000 --- a/configs/ocrnet/ocrnet.yml +++ /dev/null @@ -1,438 +0,0 @@ -Collections: -- Name: OCRNet - Metadata: - Training Data: - - Cityscapes - - ADE20K - - Pascal VOC 2012 + Aug - Paper: - URL: https://arxiv.org/abs/1909.11065 - Title: Object-Contextual Representations for Semantic Segmentation - README: configs/ocrnet/README.md - Code: - URL: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/ocr_head.py#L86 - Version: v0.17.0 - Converted From: - Code: https://github.com/openseg-group/OCNet.pytorch -Models: -- Name: ocrnet_hr18s_4xb2-40k_cityscapes-512x1024 - In Collection: OCRNet - Metadata: - backbone: HRNetV2p-W18-Small - crop size: (512,1024) - lr schd: 40000 - inference time (ms/im): - - value: 95.69 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 3.5 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 76.61 - mIoU(ms+flip): 78.01 - Config: configs/ocrnet/ocrnet_hr18s_4xb2-40k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_4xb2-40k_cityscapes-512x1024/ocrnet_hr18s_4xb2-40k_cityscapes-512x1024_20230227_145026-6c052a14.pth -- Name: ocrnet_hr18_4xb2-40k_cityscapes-512x1024 - In Collection: OCRNet - Metadata: - backbone: HRNetV2p-W18 - crop size: (512,1024) - lr schd: 40000 - inference time (ms/im): - - value: 133.33 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 4.7 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 77.72 - mIoU(ms+flip): 79.49 - Config: configs/ocrnet/ocrnet_hr18_4xb2-40k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_40k_cityscapes/ocrnet_hr18_512x1024_40k_cityscapes_20200601_033320-401c5bdd.pth -- Name: ocrnet_hr48_4xb2-40k_cityscapes-512x1024 - In Collection: OCRNet - Metadata: - backbone: HRNetV2p-W48 - crop size: (512,1024) - lr schd: 40000 - inference time (ms/im): - - value: 236.97 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 8.0 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 80.58 - mIoU(ms+flip): 81.79 - Config: configs/ocrnet/ocrnet_hr48_4xb2-40k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_40k_cityscapes/ocrnet_hr48_512x1024_40k_cityscapes_20200601_033336-55b32491.pth -- Name: ocrnet_hr18s_4xb2-80k_cityscapes-512x1024 - In Collection: OCRNet - Metadata: - backbone: HRNetV2p-W18-Small - crop size: (512,1024) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 77.16 - mIoU(ms+flip): 78.66 - Config: configs/ocrnet/ocrnet_hr18s_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x1024_80k_cityscapes/ocrnet_hr18s_512x1024_80k_cityscapes_20200601_222735-55979e63.pth -- Name: ocrnet_hr18_4xb2-80k_cityscapes-512x1024 - In Collection: OCRNet - Metadata: - backbone: HRNetV2p-W18 - crop size: (512,1024) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.57 - mIoU(ms+flip): 80.46 - Config: configs/ocrnet/ocrnet_hr18_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_80k_cityscapes/ocrnet_hr18_512x1024_80k_cityscapes_20200614_230521-c2e1dd4a.pth -- Name: ocrnet_hr48_4xb2-80k_cityscapes-512x1024 - In Collection: OCRNet - Metadata: - backbone: HRNetV2p-W48 - crop size: (512,1024) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 80.7 - mIoU(ms+flip): 81.87 - Config: configs/ocrnet/ocrnet_hr48_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_80k_cityscapes/ocrnet_hr48_512x1024_80k_cityscapes_20200601_222752-9076bcdf.pth -- Name: ocrnet_hr18s_4xb2-160k_cityscapes-512x1024 - In Collection: OCRNet - Metadata: - backbone: HRNetV2p-W18-Small - crop size: (512,1024) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.45 - mIoU(ms+flip): 79.97 - Config: configs/ocrnet/ocrnet_hr18s_4xb2-160k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x1024_160k_cityscapes/ocrnet_hr18s_512x1024_160k_cityscapes_20200602_191005-f4a7af28.pth -- Name: ocrnet_hr18_4xb2-160k_cityscapes-512x1024 - In Collection: OCRNet - Metadata: - backbone: HRNetV2p-W18 - crop size: (512,1024) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.47 - mIoU(ms+flip): 80.91 - Config: configs/ocrnet/ocrnet_hr18_4xb2-160k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_160k_cityscapes/ocrnet_hr18_512x1024_160k_cityscapes_20200602_191001-b9172d0c.pth -- Name: ocrnet_hr48_4xb2-160k_cityscapes-512x1024 - In Collection: OCRNet - Metadata: - backbone: HRNetV2p-W48 - crop size: (512,1024) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 81.35 - mIoU(ms+flip): 82.7 - Config: configs/ocrnet/ocrnet_hr48_4xb2-160k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_160k_cityscapes/ocrnet_hr48_512x1024_160k_cityscapes_20200602_191037-dfbf1b0c.pth -- Name: ocrnet_r101-d8_4xb2-40k_cityscapes-512x1024 - In Collection: OCRNet - Metadata: - backbone: R-101-D8 - crop size: (512,1024) - lr schd: 40000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 80.09 - Config: configs/ocrnet/ocrnet_r101-d8_4xb2-40k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_r101-d8_512x1024_40k_b8_cityscapes/ocrnet_r101-d8_512x1024_40k_b8_cityscapes_20200717_110721-02ac0f13.pth -- Name: ocrnet_r101-d8_8xb2-40k_cityscapes-512x1024 - In Collection: OCRNet - Metadata: - backbone: R-101-D8 - crop size: (512,1024) - lr schd: 40000 - inference time (ms/im): - - value: 331.13 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 8.8 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 80.3 - Config: configs/ocrnet/ocrnet_r101-d8_8xb2-40k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_r101-d8_512x1024_40k_b16_cityscapes/ocrnet_r101-d8_512x1024_40k_b16_cityscapes_20200723_193726-db500f80.pth -- Name: ocrnet_r101-d8_8xb2-80k_cityscapes-512x1024 - In Collection: OCRNet - Metadata: - backbone: R-101-D8 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 331.13 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 8.8 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 80.81 - Config: configs/ocrnet/ocrnet_r101-d8_8xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_r101-d8_512x1024_80k_b16_cityscapes/ocrnet_r101-d8_512x1024_80k_b16_cityscapes_20200723_192421-78688424.pth -- Name: ocrnet_hr18s_4xb4-80k_ade20k-512x512 - In Collection: OCRNet - Metadata: - backbone: HRNetV2p-W18-Small - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 34.51 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 6.7 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 35.06 - mIoU(ms+flip): 35.8 - Config: configs/ocrnet/ocrnet_hr18s_4xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_80k_ade20k/ocrnet_hr18s_512x512_80k_ade20k_20200615_055600-e80b62af.pth -- Name: ocrnet_hr18_4xb4-80k_ade20k-512x512 - In Collection: OCRNet - Metadata: - backbone: HRNetV2p-W18 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 52.83 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 7.9 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 37.79 - mIoU(ms+flip): 39.16 - Config: configs/ocrnet/ocrnet_hr18_4xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_80k_ade20k/ocrnet_hr18_512x512_80k_ade20k_20200615_053157-d173d83b.pth -- Name: ocrnet_hr48_4xb4-80k_ade20k-512x512 - In Collection: OCRNet - Metadata: - backbone: HRNetV2p-W48 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 58.86 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 11.2 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 43.0 - mIoU(ms+flip): 44.3 - Config: configs/ocrnet/ocrnet_hr48_4xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_80k_ade20k/ocrnet_hr48_512x512_80k_ade20k_20200615_021518-d168c2d1.pth -- Name: ocrnet_hr18s_4xb4-80k_ade20k-512x512 - In Collection: OCRNet - Metadata: - backbone: HRNetV2p-W18-Small - crop size: (512,512) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 37.19 - mIoU(ms+flip): 38.4 - Config: configs/ocrnet/ocrnet_hr18s_4xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_160k_ade20k/ocrnet_hr18s_512x512_160k_ade20k_20200615_184505-8e913058.pth -- Name: ocrnet_hr18_4xb4-80k_ade20k-512x512 - In Collection: OCRNet - Metadata: - backbone: HRNetV2p-W18 - crop size: (512,512) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 39.32 - mIoU(ms+flip): 40.8 - Config: configs/ocrnet/ocrnet_hr18_4xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_160k_ade20k/ocrnet_hr18_512x512_160k_ade20k_20200615_200940-d8fcd9d1.pth -- Name: ocrnet_hr48_4xb4-160k_ade20k-512x512 - In Collection: OCRNet - Metadata: - backbone: HRNetV2p-W48 - crop size: (512,512) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 43.25 - mIoU(ms+flip): 44.88 - Config: configs/ocrnet/ocrnet_hr48_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_160k_ade20k/ocrnet_hr48_512x512_160k_ade20k_20200615_184705-a073726d.pth -- Name: ocrnet_hr18s_4xb4-20k_voc12aug-512x512 - In Collection: OCRNet - Metadata: - backbone: HRNetV2p-W18-Small - crop size: (512,512) - lr schd: 20000 - inference time (ms/im): - - value: 31.7 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 3.5 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 71.7 - mIoU(ms+flip): 73.84 - Config: configs/ocrnet/ocrnet_hr18s_4xb4-20k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_20k_voc12aug/ocrnet_hr18s_512x512_20k_voc12aug_20200617_233913-02b04fcb.pth -- Name: ocrnet_hr18_4xb4-20k_voc12aug-512x512 - In Collection: OCRNet - Metadata: - backbone: HRNetV2p-W18 - crop size: (512,512) - lr schd: 20000 - inference time (ms/im): - - value: 50.23 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 4.7 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 74.75 - mIoU(ms+flip): 77.11 - Config: configs/ocrnet/ocrnet_hr18_4xb4-20k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_20k_voc12aug/ocrnet_hr18_512x512_20k_voc12aug_20200617_233932-8954cbb7.pth -- Name: ocrnet_hr48_4xb4-20k_voc12aug-512x512 - In Collection: OCRNet - Metadata: - backbone: HRNetV2p-W48 - crop size: (512,512) - lr schd: 20000 - inference time (ms/im): - - value: 56.09 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 8.1 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 77.72 - mIoU(ms+flip): 79.87 - Config: configs/ocrnet/ocrnet_hr48_4xb4-20k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_20k_voc12aug/ocrnet_hr48_512x512_20k_voc12aug_20200617_233932-9e82080a.pth -- Name: ocrnet_hr18s_4xb4-40k_voc12aug-512x512 - In Collection: OCRNet - Metadata: - backbone: HRNetV2p-W18-Small - crop size: (512,512) - lr schd: 40000 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 72.76 - mIoU(ms+flip): 74.6 - Config: configs/ocrnet/ocrnet_hr18s_4xb4-40k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_40k_voc12aug/ocrnet_hr18s_512x512_40k_voc12aug_20200614_002025-42b587ac.pth -- Name: ocrnet_hr18_4xb4-40k_voc12aug-512x512 - In Collection: OCRNet - Metadata: - backbone: HRNetV2p-W18 - crop size: (512,512) - lr schd: 40000 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 74.98 - mIoU(ms+flip): 77.4 - Config: configs/ocrnet/ocrnet_hr18_4xb4-40k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_40k_voc12aug/ocrnet_hr18_512x512_40k_voc12aug_20200614_015958-714302be.pth -- Name: ocrnet_hr48_4xb4-40k_voc12aug-512x512 - In Collection: OCRNet - Metadata: - backbone: HRNetV2p-W48 - crop size: (512,512) - lr schd: 40000 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 77.14 - mIoU(ms+flip): 79.71 - Config: configs/ocrnet/ocrnet_hr48_4xb4-40k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_40k_voc12aug/ocrnet_hr48_512x512_40k_voc12aug_20200614_015958-255bc5ce.pth diff --git a/configs/pidnet/README.md b/configs/pidnet/README.md index 545b76e8b0..c8c3f24799 100644 --- a/configs/pidnet/README.md +++ b/configs/pidnet/README.md @@ -26,11 +26,11 @@ Two-branch network architecture has shown its efficiency and effectiveness for r ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------- | -------- | -------------- | ----- | ------------- | ----------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| PIDNet | PIDNet-S | 1024x1024 | 120000 | 3.38 | 80.82 | 78.74 | 80.87 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pidnet/pidnet-s_2xb6-120k_1024x1024-cityscapes.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-s_2xb6-120k_1024x1024-cityscapes/pidnet-s_2xb6-120k_1024x1024-cityscapes_20230302_191700-bb8e3bcc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-s_2xb6-120k_1024x1024-cityscapes/pidnet-s_2xb6-120k_1024x1024-cityscapes_20230302_191700.json) | -| PIDNet | PIDNet-M | 1024x1024 | 120000 | 5.14 | 71.98 | 80.22 | 82.05 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pidnet/pidnet-m_2xb6-120k_1024x1024-cityscapes.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-m_2xb6-120k_1024x1024-cityscapes/pidnet-m_2xb6-120k_1024x1024-cityscapes_20230301_143452-f9bcdbf3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-m_2xb6-120k_1024x1024-cityscapes/pidnet-m_2xb6-120k_1024x1024-cityscapes_20230301_143452.json) | -| PIDNet | PIDNet-L | 1024x1024 | 120000 | 5.83 | 60.06 | 80.89 | 82.37 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pidnet/pidnet-l_2xb6-120k_1024x1024-cityscapes.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-l_2xb6-120k_1024x1024-cityscapes/pidnet-l_2xb6-120k_1024x1024-cityscapes_20230303_114514-0783ca6b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-l_2xb6-120k_1024x1024-cityscapes/pidnet-l_2xb6-120k_1024x1024-cityscapes_20230303_114514.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------- | -------- | -------------- | ------ | ----- | ------------- | ----------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| PIDNet | PIDNet-S | 1024x1024 | 120000 | 3.38 | 80.82 | A100 | 78.74 | 80.87 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pidnet/pidnet-s_2xb6-120k_1024x1024-cityscapes.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-s_2xb6-120k_1024x1024-cityscapes/pidnet-s_2xb6-120k_1024x1024-cityscapes_20230302_191700-bb8e3bcc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-s_2xb6-120k_1024x1024-cityscapes/pidnet-s_2xb6-120k_1024x1024-cityscapes_20230302_191700.json) | +| PIDNet | PIDNet-M | 1024x1024 | 120000 | 5.14 | 71.98 | A100 | 80.22 | 82.05 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pidnet/pidnet-m_2xb6-120k_1024x1024-cityscapes.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-m_2xb6-120k_1024x1024-cityscapes/pidnet-m_2xb6-120k_1024x1024-cityscapes_20230301_143452-f9bcdbf3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-m_2xb6-120k_1024x1024-cityscapes/pidnet-m_2xb6-120k_1024x1024-cityscapes_20230301_143452.json) | +| PIDNet | PIDNet-L | 1024x1024 | 120000 | 5.83 | 60.06 | A100 | 80.89 | 82.37 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pidnet/pidnet-l_2xb6-120k_1024x1024-cityscapes.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-l_2xb6-120k_1024x1024-cityscapes/pidnet-l_2xb6-120k_1024x1024-cityscapes_20230303_114514-0783ca6b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-l_2xb6-120k_1024x1024-cityscapes/pidnet-l_2xb6-120k_1024x1024-cityscapes_20230303_114514.json) | ## Notes diff --git a/configs/pidnet/metafile.yaml b/configs/pidnet/metafile.yaml new file mode 100644 index 0000000000..9102ec51c5 --- /dev/null +++ b/configs/pidnet/metafile.yaml @@ -0,0 +1,85 @@ +Collections: +- Name: PIDNet + License: Apache License 2.0 + Metadata: + Training Data: + - Cityscapes + Paper: + Title: 'PIDNet: A Real-time Semantic Segmentation Network Inspired from PID Controller' + URL: https://arxiv.org/pdf/2206.02066.pdf + README: configs/pidnet/README.md + Frameworks: + - PyTorch +Models: +- Name: pidnet-s_2xb6-120k_1024x1024-cityscapes + In Collection: PIDNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.74 + mIoU(ms+flip): 80.87 + Config: configs/pidnet/pidnet-s_2xb6-120k_1024x1024-cityscapes.py + Metadata: + Training Data: Cityscapes + Batch Size: 12 + Architecture: + - PIDNet-S + - PIDNet + Training Resources: 2x A100 GPUS + Memory (GB): 3.38 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-s_2xb6-120k_1024x1024-cityscapes/pidnet-s_2xb6-120k_1024x1024-cityscapes_20230302_191700-bb8e3bcc.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-s_2xb6-120k_1024x1024-cityscapes/pidnet-s_2xb6-120k_1024x1024-cityscapes_20230302_191700.json + Paper: + Title: 'PIDNet: A Real-time Semantic Segmentation Network Inspired from PID Controller' + URL: https://arxiv.org/pdf/2206.02066.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/models/backbones/pidnet.py + Framework: PyTorch +- Name: pidnet-m_2xb6-120k_1024x1024-cityscapes + In Collection: PIDNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 80.22 + mIoU(ms+flip): 82.05 + Config: configs/pidnet/pidnet-m_2xb6-120k_1024x1024-cityscapes.py + Metadata: + Training Data: Cityscapes + Batch Size: 12 + Architecture: + - PIDNet-M + - PIDNet + Training Resources: 2x A100 GPUS + Memory (GB): 5.14 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-m_2xb6-120k_1024x1024-cityscapes/pidnet-m_2xb6-120k_1024x1024-cityscapes_20230301_143452-f9bcdbf3.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-m_2xb6-120k_1024x1024-cityscapes/pidnet-m_2xb6-120k_1024x1024-cityscapes_20230301_143452.json + Paper: + Title: 'PIDNet: A Real-time Semantic Segmentation Network Inspired from PID Controller' + URL: https://arxiv.org/pdf/2206.02066.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/models/backbones/pidnet.py + Framework: PyTorch +- Name: pidnet-l_2xb6-120k_1024x1024-cityscapes + In Collection: PIDNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 80.89 + mIoU(ms+flip): 82.37 + Config: configs/pidnet/pidnet-l_2xb6-120k_1024x1024-cityscapes.py + Metadata: + Training Data: Cityscapes + Batch Size: 12 + Architecture: + - PIDNet-L + - PIDNet + Training Resources: 2x A100 GPUS + Memory (GB): 5.83 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-l_2xb6-120k_1024x1024-cityscapes/pidnet-l_2xb6-120k_1024x1024-cityscapes_20230303_114514-0783ca6b.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-l_2xb6-120k_1024x1024-cityscapes/pidnet-l_2xb6-120k_1024x1024-cityscapes_20230303_114514.json + Paper: + Title: 'PIDNet: A Real-time Semantic Segmentation Network Inspired from PID Controller' + URL: https://arxiv.org/pdf/2206.02066.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/models/backbones/pidnet.py + Framework: PyTorch diff --git a/configs/pidnet/pidnet.yml b/configs/pidnet/pidnet.yml deleted file mode 100644 index 7fe818ca7c..0000000000 --- a/configs/pidnet/pidnet.yml +++ /dev/null @@ -1,81 +0,0 @@ -Collections: -- Name: PIDNet - Metadata: - Training Data: - - Cityscapes - Paper: - URL: https://arxiv.org/pdf/2206.02066.pdf - Title: 'PIDNet: A Real-time Semantic Segmentation Network Inspired from PID Controller' - README: configs/pidnet/README.md - Code: - URL: https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/models/backbones/pidnet.py - Version: dev-1.x - Converted From: - Code: https://github.com/XuJiacong/PIDNet -Models: -- Name: pidnet-s_2xb6-120k_1024x1024-cityscapes - In Collection: PIDNet - Metadata: - backbone: PIDNet-S - crop size: (1024,1024) - lr schd: 120000 - inference time (ms/im): - - value: 12.37 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (1024,1024) - Training Memory (GB): 3.38 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.74 - mIoU(ms+flip): 80.87 - Config: configs/pidnet/pidnet-s_2xb6-120k_1024x1024-cityscapes.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-s_2xb6-120k_1024x1024-cityscapes/pidnet-s_2xb6-120k_1024x1024-cityscapes_20230302_191700-bb8e3bcc.pth -- Name: pidnet-m_2xb6-120k_1024x1024-cityscapes - In Collection: PIDNet - Metadata: - backbone: PIDNet-M - crop size: (1024,1024) - lr schd: 120000 - inference time (ms/im): - - value: 13.89 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (1024,1024) - Training Memory (GB): 5.14 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 80.22 - mIoU(ms+flip): 82.05 - Config: configs/pidnet/pidnet-m_2xb6-120k_1024x1024-cityscapes.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-m_2xb6-120k_1024x1024-cityscapes/pidnet-m_2xb6-120k_1024x1024-cityscapes_20230301_143452-f9bcdbf3.pth -- Name: pidnet-l_2xb6-120k_1024x1024-cityscapes - In Collection: PIDNet - Metadata: - backbone: PIDNet-L - crop size: (1024,1024) - lr schd: 120000 - inference time (ms/im): - - value: 16.65 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (1024,1024) - Training Memory (GB): 5.83 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 80.89 - mIoU(ms+flip): 82.37 - Config: configs/pidnet/pidnet-l_2xb6-120k_1024x1024-cityscapes.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-l_2xb6-120k_1024x1024-cityscapes/pidnet-l_2xb6-120k_1024x1024-cityscapes_20230303_114514-0783ca6b.pth diff --git a/configs/point_rend/README.md b/configs/point_rend/README.md index 2690e7b9e6..9aab8e03ee 100644 --- a/configs/point_rend/README.md +++ b/configs/point_rend/README.md @@ -1,6 +1,6 @@ # PointRend -[PointRend: Image Segmentation as Rendering](https://arxiv.org/abs/1912.08193) +> [PointRend: Image Segmentation as Rendering](https://arxiv.org/abs/1912.08193) ## Introduction @@ -22,6 +22,22 @@ We present a new method for efficient high-quality image segmentation of objects +## Results and models + +### Cityscapes + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| --------- | -------- | --------- | ------: | -------: | -------------- | ------ | ----: | ------------- | ------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| PointRend | R-50 | 512x1024 | 80000 | 3.1 | 8.48 | V100 | 76.47 | 78.13 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/point_rend/pointrend_r50_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r50_512x1024_80k_cityscapes/pointrend_r50_512x1024_80k_cityscapes_20200711_015821-bb1ff523.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r50_512x1024_80k_cityscapes/pointrend_r50_512x1024_80k_cityscapes-20200715_214714.log.json) | +| PointRend | R-101 | 512x1024 | 80000 | 4.2 | 7.00 | V100 | 78.30 | 79.97 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/point_rend/pointrend_r101_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r101_512x1024_80k_cityscapes/pointrend_r101_512x1024_80k_cityscapes_20200711_170850-d0ca84be.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r101_512x1024_80k_cityscapes/pointrend_r101_512x1024_80k_cityscapes-20200715_214824.log.json) | + +### ADE20K + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| --------- | -------- | --------- | ------: | -------: | -------------- | ------ | ----: | ------------- | --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| PointRend | R-50 | 512x512 | 160000 | 5.1 | 17.31 | V100 | 37.64 | 39.17 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/point_rend/pointrend_r50_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r50_512x512_160k_ade20k/pointrend_r50_512x512_160k_ade20k_20200807_232644-ac3febf2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r50_512x512_160k_ade20k/pointrend_r50_512x512_160k_ade20k-20200807_232644.log.json) | +| PointRend | R-101 | 512x512 | 160000 | 6.1 | 15.50 | V100 | 40.02 | 41.60 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/point_rend/pointrend_r101_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r101_512x512_160k_ade20k/pointrend_r101_512x512_160k_ade20k_20200808_030852-8834902a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r101_512x512_160k_ade20k/pointrend_r101_512x512_160k_ade20k-20200808_030852.log.json) | + ## Citation ```bibtex @@ -33,19 +49,3 @@ We present a new method for efficient high-quality image segmentation of objects year={2020} } ``` - -## Results and models - -### Cityscapes - -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| --------- | -------- | --------- | ------: | -------: | -------------- | ----: | ------------- | ------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| PointRend | R-50 | 512x1024 | 80000 | 3.1 | 8.48 | 76.47 | 78.13 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/point_rend/pointrend_r50_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r50_512x1024_80k_cityscapes/pointrend_r50_512x1024_80k_cityscapes_20200711_015821-bb1ff523.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r50_512x1024_80k_cityscapes/pointrend_r50_512x1024_80k_cityscapes-20200715_214714.log.json) | -| PointRend | R-101 | 512x1024 | 80000 | 4.2 | 7.00 | 78.30 | 79.97 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/point_rend/pointrend_r101_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r101_512x1024_80k_cityscapes/pointrend_r101_512x1024_80k_cityscapes_20200711_170850-d0ca84be.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r101_512x1024_80k_cityscapes/pointrend_r101_512x1024_80k_cityscapes-20200715_214824.log.json) | - -### ADE20K - -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| --------- | -------- | --------- | ------: | -------: | -------------- | ----: | ------------- | --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| PointRend | R-50 | 512x512 | 160000 | 5.1 | 17.31 | 37.64 | 39.17 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/point_rend/pointrend_r50_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r50_512x512_160k_ade20k/pointrend_r50_512x512_160k_ade20k_20200807_232644-ac3febf2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r50_512x512_160k_ade20k/pointrend_r50_512x512_160k_ade20k-20200807_232644.log.json) | -| PointRend | R-101 | 512x512 | 160000 | 6.1 | 15.50 | 40.02 | 41.60 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/point_rend/pointrend_r101_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r101_512x512_160k_ade20k/pointrend_r101_512x512_160k_ade20k_20200808_030852-8834902a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r101_512x512_160k_ade20k/pointrend_r101_512x512_160k_ade20k-20200808_030852.log.json) | diff --git a/configs/point_rend/metafile.yaml b/configs/point_rend/metafile.yaml new file mode 100644 index 0000000000..064717c9df --- /dev/null +++ b/configs/point_rend/metafile.yaml @@ -0,0 +1,110 @@ +Collections: +- Name: PointRend + License: Apache License 2.0 + Metadata: + Training Data: + - Cityscapes + - ADE20K + Paper: + Title: 'PointRend: Image Segmentation as Rendering' + URL: https://arxiv.org/abs/1912.08193 + README: configs/point_rend/README.md + Frameworks: + - PyTorch +Models: +- Name: pointrend_r50_4xb2-80k_cityscapes-512x1024 + In Collection: PointRend + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 76.47 + mIoU(ms+flip): 78.13 + Config: configs/point_rend/pointrend_r50_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50 + - PointRend + Training Resources: 4x V100 GPUS + Memory (GB): 3.1 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r50_512x1024_80k_cityscapes/pointrend_r50_512x1024_80k_cityscapes_20200711_015821-bb1ff523.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r50_512x1024_80k_cityscapes/pointrend_r50_512x1024_80k_cityscapes-20200715_214714.log.json + Paper: + Title: 'PointRend: Image Segmentation as Rendering' + URL: https://arxiv.org/abs/1912.08193 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/point_head.py#L36 + Framework: PyTorch +- Name: pointrend_r101_4xb2-80k_cityscapes-512x1024 + In Collection: PointRend + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.3 + mIoU(ms+flip): 79.97 + Config: configs/point_rend/pointrend_r101_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101 + - PointRend + Training Resources: 4x V100 GPUS + Memory (GB): 4.2 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r101_512x1024_80k_cityscapes/pointrend_r101_512x1024_80k_cityscapes_20200711_170850-d0ca84be.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r101_512x1024_80k_cityscapes/pointrend_r101_512x1024_80k_cityscapes-20200715_214824.log.json + Paper: + Title: 'PointRend: Image Segmentation as Rendering' + URL: https://arxiv.org/abs/1912.08193 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/point_head.py#L36 + Framework: PyTorch +- Name: pointrend_r50_4xb4-160k_ade20k-512x512 + In Collection: PointRend + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 37.64 + mIoU(ms+flip): 39.17 + Config: configs/point_rend/pointrend_r50_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50 + - PointRend + Training Resources: 4x V100 GPUS + Memory (GB): 5.1 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r50_512x512_160k_ade20k/pointrend_r50_512x512_160k_ade20k_20200807_232644-ac3febf2.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r50_512x512_160k_ade20k/pointrend_r50_512x512_160k_ade20k-20200807_232644.log.json + Paper: + Title: 'PointRend: Image Segmentation as Rendering' + URL: https://arxiv.org/abs/1912.08193 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/point_head.py#L36 + Framework: PyTorch +- Name: pointrend_r101_4xb4-160k_ade20k-512x512 + In Collection: PointRend + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 40.02 + mIoU(ms+flip): 41.6 + Config: configs/point_rend/pointrend_r101_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-101 + - PointRend + Training Resources: 4x V100 GPUS + Memory (GB): 6.1 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r101_512x512_160k_ade20k/pointrend_r101_512x512_160k_ade20k_20200808_030852-8834902a.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r101_512x512_160k_ade20k/pointrend_r101_512x512_160k_ade20k-20200808_030852.log.json + Paper: + Title: 'PointRend: Image Segmentation as Rendering' + URL: https://arxiv.org/abs/1912.08193 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/point_head.py#L36 + Framework: PyTorch diff --git a/configs/point_rend/point_rend.yml b/configs/point_rend/point_rend.yml deleted file mode 100644 index a4539081f3..0000000000 --- a/configs/point_rend/point_rend.yml +++ /dev/null @@ -1,104 +0,0 @@ -Collections: -- Name: PointRend - Metadata: - Training Data: - - Cityscapes - - ADE20K - Paper: - URL: https://arxiv.org/abs/1912.08193 - Title: 'PointRend: Image Segmentation as Rendering' - README: configs/point_rend/README.md - Code: - URL: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/point_head.py#L36 - Version: v0.17.0 - Converted From: - Code: https://github.com/facebookresearch/detectron2/tree/master/projects/PointRend -Models: -- Name: pointrend_r50_4xb2-80k_cityscapes-512x1024 - In Collection: PointRend - Metadata: - backbone: R-50 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 117.92 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 3.1 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 76.47 - mIoU(ms+flip): 78.13 - Config: configs/point_rend/pointrend_r50_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r50_512x1024_80k_cityscapes/pointrend_r50_512x1024_80k_cityscapes_20200711_015821-bb1ff523.pth -- Name: pointrend_r101_4xb2-80k_cityscapes-512x1024 - In Collection: PointRend - Metadata: - backbone: R-101 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 142.86 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 4.2 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.3 - mIoU(ms+flip): 79.97 - Config: configs/point_rend/pointrend_r101_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r101_512x1024_80k_cityscapes/pointrend_r101_512x1024_80k_cityscapes_20200711_170850-d0ca84be.pth -- Name: pointrend_r50_4xb4-160k_ade20k-512x512 - In Collection: PointRend - Metadata: - backbone: R-50 - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 57.77 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 5.1 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 37.64 - mIoU(ms+flip): 39.17 - Config: configs/point_rend/pointrend_r50_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r50_512x512_160k_ade20k/pointrend_r50_512x512_160k_ade20k_20200807_232644-ac3febf2.pth -- Name: pointrend_r101_4xb4-160k_ade20k-512x512 - In Collection: PointRend - Metadata: - backbone: R-101 - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 64.52 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 6.1 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 40.02 - mIoU(ms+flip): 41.6 - Config: configs/point_rend/pointrend_r101_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r101_512x512_160k_ade20k/pointrend_r101_512x512_160k_ade20k_20200808_030852-8834902a.pth diff --git a/configs/poolformer/README.md b/configs/poolformer/README.md index 3bdd2ba3f1..ba563a9928 100644 --- a/configs/poolformer/README.md +++ b/configs/poolformer/README.md @@ -1,6 +1,6 @@ # PoolFormer -[MetaFormer is Actually What You Need for Vision](https://arxiv.org/abs/2111.11418) +> [MetaFormer is Actually What You Need for Vision](https://arxiv.org/abs/2111.11418) ## Introduction @@ -48,13 +48,13 @@ pip install "mmcls>=1.0.0rc0" ### ADE20K -| Method | Backbone | Crop Size | pretrain | Batch Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | mIoU\* | mIoU\*(ms+flip) | config | download | -| ------ | -------------- | --------- | ----------- | ---------- | ------- | -------- | -------------- | ----- | ------------: | ------ | --------------: | ------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| FPN | PoolFormer-S12 | 512x512 | ImageNet-1K | 32 | 40000 | 4.17 | 23.48 | 36.68 | - | 37.07 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/poolformer/fpn_poolformer_s12_8xb4-40k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_s12_8x4_512x512_40k_ade20k/fpn_poolformer_s12_8x4_512x512_40k_ade20k_20220501_115154-b5aa2f49.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_s12_8x4_512x512_40k_ade20k/fpn_poolformer_s12_8x4_512x512_40k_ade20k_20220501_115154.log.json) | -| FPN | PoolFormer-S24 | 512x512 | ImageNet-1K | 32 | 40000 | 5.47 | 15.74 | 40.12 | - | 40.36 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/poolformer/fpn_poolformer_s24_8xb4-40k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_s24_8x4_512x512_40k_ade20k/fpn_poolformer_s24_8x4_512x512_40k_ade20k_20220503_222049-394a7cf7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_s24_8x4_512x512_40k_ade20k/fpn_poolformer_s24_8x4_512x512_40k_ade20k_20220503_222049.log.json) | -| FPN | PoolFormer-S36 | 512x512 | ImageNet-1K | 32 | 40000 | 6.77 | 11.34 | 41.61 | - | 41.81 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/poolformer/fpn_poolformer_s36_8xb4-40k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_s36_8x4_512x512_40k_ade20k/fpn_poolformer_s36_8x4_512x512_40k_ade20k_20220501_151122-b47e607d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_s36_8x4_512x512_40k_ade20k/fpn_poolformer_s36_8x4_512x512_40k_ade20k_20220501_151122.log.json) | -| FPN | PoolFormer-M36 | 512x512 | ImageNet-1K | 32 | 40000 | 8.59 | 8.97 | 41.95 | - | 42.35 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/poolformer/fpn_poolformer_m36_8xb4-40k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_m36_8x4_512x512_40k_ade20k/fpn_poolformer_m36_8x4_512x512_40k_ade20k_20220501_164230-3dc83921.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_m36_8x4_512x512_40k_ade20k/fpn_poolformer_m36_8x4_512x512_40k_ade20k_20220501_164230.log.json) | -| FPN | PoolFormer-M48 | 512x512 | ImageNet-1K | 32 | 40000 | 10.48 | 6.69 | 42.43 | - | 42.76 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/poolformer/fpn_poolformer_m48_8xb4-40k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_m48_8x4_512x512_40k_ade20k/fpn_poolformer_m48_8x4_512x512_40k_ade20k_20220504_003923-64168d3b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_m48_8x4_512x512_40k_ade20k/fpn_poolformer_m48_8x4_512x512_40k_ade20k_20220504_003923.log.json) | +| Method | Backbone | Crop Size | pretrain | Batch Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | mIoU\* | mIoU\*(ms+flip) | config | download | +| ------ | -------------- | --------- | ----------- | ---------- | ------- | -------- | -------------- | ------ | ----- | ------------: | ------ | --------------: | ------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| FPN | PoolFormer-S12 | 512x512 | ImageNet-1K | 32 | 40000 | 4.17 | 23.48 | V100 | 36.68 | - | 37.07 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/poolformer/fpn_poolformer_s12_8xb4-40k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_s12_8x4_512x512_40k_ade20k/fpn_poolformer_s12_8x4_512x512_40k_ade20k_20220501_115154-b5aa2f49.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_s12_8x4_512x512_40k_ade20k/fpn_poolformer_s12_8x4_512x512_40k_ade20k_20220501_115154.log.json) | +| FPN | PoolFormer-S24 | 512x512 | ImageNet-1K | 32 | 40000 | 5.47 | 15.74 | V100 | 40.12 | - | 40.36 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/poolformer/fpn_poolformer_s24_8xb4-40k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_s24_8x4_512x512_40k_ade20k/fpn_poolformer_s24_8x4_512x512_40k_ade20k_20220503_222049-394a7cf7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_s24_8x4_512x512_40k_ade20k/fpn_poolformer_s24_8x4_512x512_40k_ade20k_20220503_222049.log.json) | +| FPN | PoolFormer-S36 | 512x512 | ImageNet-1K | 32 | 40000 | 6.77 | 11.34 | V100 | 41.61 | - | 41.81 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/poolformer/fpn_poolformer_s36_8xb4-40k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_s36_8x4_512x512_40k_ade20k/fpn_poolformer_s36_8x4_512x512_40k_ade20k_20220501_151122-b47e607d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_s36_8x4_512x512_40k_ade20k/fpn_poolformer_s36_8x4_512x512_40k_ade20k_20220501_151122.log.json) | +| FPN | PoolFormer-M36 | 512x512 | ImageNet-1K | 32 | 40000 | 8.59 | 8.97 | V100 | 41.95 | - | 42.35 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/poolformer/fpn_poolformer_m36_8xb4-40k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_m36_8x4_512x512_40k_ade20k/fpn_poolformer_m36_8x4_512x512_40k_ade20k_20220501_164230-3dc83921.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_m36_8x4_512x512_40k_ade20k/fpn_poolformer_m36_8x4_512x512_40k_ade20k_20220501_164230.log.json) | +| FPN | PoolFormer-M48 | 512x512 | ImageNet-1K | 32 | 40000 | 10.48 | 6.69 | V100 | 42.43 | - | 42.76 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/poolformer/fpn_poolformer_m48_8xb4-40k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_m48_8x4_512x512_40k_ade20k/fpn_poolformer_m48_8x4_512x512_40k_ade20k_20220504_003923-64168d3b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_m48_8x4_512x512_40k_ade20k/fpn_poolformer_m48_8x4_512x512_40k_ade20k_20220504_003923.log.json) | Note: diff --git a/configs/poolformer/metafile.yaml b/configs/poolformer/metafile.yaml new file mode 100644 index 0000000000..12f402be65 --- /dev/null +++ b/configs/poolformer/metafile.yaml @@ -0,0 +1,116 @@ +Models: +- Name: fpn_poolformer_s12_8xb4-40k_ade20k-512x512 + In Collection: FPN + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 36.68 + Config: configs/poolformer/fpn_poolformer_s12_8xb4-40k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 32 + Architecture: + - PoolFormer-S12 + - FPN + Training Resources: 8x V100 GPUS + Memory (GB): 4.17 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_s12_8x4_512x512_40k_ade20k/fpn_poolformer_s12_8x4_512x512_40k_ade20k_20220501_115154-b5aa2f49.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_s12_8x4_512x512_40k_ade20k/fpn_poolformer_s12_8x4_512x512_40k_ade20k_20220501_115154.log.json + Paper: + Title: MetaFormer is Actually What You Need for Vision + URL: https://arxiv.org/abs/2111.11418 + Code: https://github.com/open-mmlab/mmclassification/blob/v0.23.0/mmcls/models/backbones/poolformer.py#L198 + Framework: PyTorch +- Name: fpn_poolformer_s24_8xb4-40k_ade20k-512x512 + In Collection: FPN + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 40.12 + Config: configs/poolformer/fpn_poolformer_s24_8xb4-40k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 32 + Architecture: + - PoolFormer-S24 + - FPN + Training Resources: 8x V100 GPUS + Memory (GB): 5.47 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_s24_8x4_512x512_40k_ade20k/fpn_poolformer_s24_8x4_512x512_40k_ade20k_20220503_222049-394a7cf7.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_s24_8x4_512x512_40k_ade20k/fpn_poolformer_s24_8x4_512x512_40k_ade20k_20220503_222049.log.json + Paper: + Title: MetaFormer is Actually What You Need for Vision + URL: https://arxiv.org/abs/2111.11418 + Code: https://github.com/open-mmlab/mmclassification/blob/v0.23.0/mmcls/models/backbones/poolformer.py#L198 + Framework: PyTorch +- Name: fpn_poolformer_s36_8xb4-40k_ade20k-512x512 + In Collection: FPN + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 41.61 + Config: configs/poolformer/fpn_poolformer_s36_8xb4-40k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 32 + Architecture: + - PoolFormer-S36 + - FPN + Training Resources: 8x V100 GPUS + Memory (GB): 6.77 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_s36_8x4_512x512_40k_ade20k/fpn_poolformer_s36_8x4_512x512_40k_ade20k_20220501_151122-b47e607d.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_s36_8x4_512x512_40k_ade20k/fpn_poolformer_s36_8x4_512x512_40k_ade20k_20220501_151122.log.json + Paper: + Title: MetaFormer is Actually What You Need for Vision + URL: https://arxiv.org/abs/2111.11418 + Code: https://github.com/open-mmlab/mmclassification/blob/v0.23.0/mmcls/models/backbones/poolformer.py#L198 + Framework: PyTorch +- Name: fpn_poolformer_m36_8xb4-40k_ade20k-512x512 + In Collection: FPN + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 41.95 + Config: configs/poolformer/fpn_poolformer_m36_8xb4-40k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 32 + Architecture: + - PoolFormer-M36 + - FPN + Training Resources: 8x V100 GPUS + Memory (GB): 8.59 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_m36_8x4_512x512_40k_ade20k/fpn_poolformer_m36_8x4_512x512_40k_ade20k_20220501_164230-3dc83921.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_m36_8x4_512x512_40k_ade20k/fpn_poolformer_m36_8x4_512x512_40k_ade20k_20220501_164230.log.json + Paper: + Title: MetaFormer is Actually What You Need for Vision + URL: https://arxiv.org/abs/2111.11418 + Code: https://github.com/open-mmlab/mmclassification/blob/v0.23.0/mmcls/models/backbones/poolformer.py#L198 + Framework: PyTorch +- Name: fpn_poolformer_m48_8xb4-40k_ade20k-512x512 + In Collection: FPN + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 42.43 + Config: configs/poolformer/fpn_poolformer_m48_8xb4-40k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 32 + Architecture: + - PoolFormer-M48 + - FPN + Training Resources: 8x V100 GPUS + Memory (GB): 10.48 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_m48_8x4_512x512_40k_ade20k/fpn_poolformer_m48_8x4_512x512_40k_ade20k_20220504_003923-64168d3b.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_m48_8x4_512x512_40k_ade20k/fpn_poolformer_m48_8x4_512x512_40k_ade20k_20220504_003923.log.json + Paper: + Title: MetaFormer is Actually What You Need for Vision + URL: https://arxiv.org/abs/2111.11418 + Code: https://github.com/open-mmlab/mmclassification/blob/v0.23.0/mmcls/models/backbones/poolformer.py#L198 + Framework: PyTorch diff --git a/configs/poolformer/poolformer.yml b/configs/poolformer/poolformer.yml deleted file mode 100644 index fa5fc30125..0000000000 --- a/configs/poolformer/poolformer.yml +++ /dev/null @@ -1,106 +0,0 @@ -Models: -- Name: fpn_poolformer_s12_8xb4-40k_ade20k-512x512 - In Collection: FPN - Metadata: - backbone: PoolFormer-S12 - crop size: (512,512) - lr schd: 40000 - inference time (ms/im): - - value: 42.59 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 4.17 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 36.68 - Config: configs/poolformer/fpn_poolformer_s12_8xb4-40k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_s12_8x4_512x512_40k_ade20k/fpn_poolformer_s12_8x4_512x512_40k_ade20k_20220501_115154-b5aa2f49.pth -- Name: fpn_poolformer_s24_8xb4-40k_ade20k-512x512 - In Collection: FPN - Metadata: - backbone: PoolFormer-S24 - crop size: (512,512) - lr schd: 40000 - inference time (ms/im): - - value: 63.53 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 5.47 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 40.12 - Config: configs/poolformer/fpn_poolformer_s24_8xb4-40k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_s24_8x4_512x512_40k_ade20k/fpn_poolformer_s24_8x4_512x512_40k_ade20k_20220503_222049-394a7cf7.pth -- Name: '' - In Collection: FPN - Metadata: - backbone: PoolFormer-S36 - crop size: (512,512) - lr schd: 40000 - inference time (ms/im): - - value: 88.18 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 6.77 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 41.61 - Config: '' - Weights: '' -- Name: fpn_poolformer_m36_8xb4-40k_ade20k-512x512 - In Collection: FPN - Metadata: - backbone: PoolFormer-M36 - crop size: (512,512) - lr schd: 40000 - inference time (ms/im): - - value: 111.48 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 8.59 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 41.95 - Config: configs/poolformer/fpn_poolformer_m36_8xb4-40k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_m36_8x4_512x512_40k_ade20k/fpn_poolformer_m36_8x4_512x512_40k_ade20k_20220501_164230-3dc83921.pth -- Name: fpn_poolformer_m48_8xb4-40k_ade20k-512x512 - In Collection: FPN - Metadata: - backbone: PoolFormer-M48 - crop size: (512,512) - lr schd: 40000 - inference time (ms/im): - - value: 149.48 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 10.48 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 42.43 - Config: configs/poolformer/fpn_poolformer_m48_8xb4-40k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_m48_8x4_512x512_40k_ade20k/fpn_poolformer_m48_8x4_512x512_40k_ade20k_20220504_003923-64168d3b.pth diff --git a/configs/psanet/README.md b/configs/psanet/README.md index 7182e500a1..d657326120 100644 --- a/configs/psanet/README.md +++ b/configs/psanet/README.md @@ -1,6 +1,6 @@ # PSANet -[PSANet: Point-wise Spatial Attention Network for Scene Parsing](https://openaccess.thecvf.com/content_ECCV_2018/papers/Hengshuang_Zhao_PSANet_Point-wise_Spatial_ECCV_2018_paper.pdf) +> [PSANet: Point-wise Spatial Attention Network for Scene Parsing](https://openaccess.thecvf.com/content_ECCV_2018/papers/Hengshuang_Zhao_PSANet_Point-wise_Spatial_ECCV_2018_paper.pdf) ## Introduction @@ -22,6 +22,39 @@ We notice information flow in convolutional neural networksis restricted insid +## Results and models + +### Cityscapes + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| PSANet | R-50-D8 | 512x1024 | 40000 | 7 | 3.17 | V100 | 77.63 | 79.04 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x1024_40k_cityscapes/psanet_r50-d8_512x1024_40k_cityscapes_20200606_103117-99fac37c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x1024_40k_cityscapes/psanet_r50-d8_512x1024_40k_cityscapes_20200606_103117.log.json) | +| PSANet | R-101-D8 | 512x1024 | 40000 | 10.5 | 2.20 | V100 | 79.14 | 80.19 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x1024_40k_cityscapes/psanet_r101-d8_512x1024_40k_cityscapes_20200606_001418-27b9cfa7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x1024_40k_cityscapes/psanet_r101-d8_512x1024_40k_cityscapes_20200606_001418.log.json) | +| PSANet | R-50-D8 | 769x769 | 40000 | 7.9 | 1.40 | V100 | 77.99 | 79.64 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_769x769_40k_cityscapes/psanet_r50-d8_769x769_40k_cityscapes_20200530_033717-d5365506.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_769x769_40k_cityscapes/psanet_r50-d8_769x769_40k_cityscapes_20200530_033717.log.json) | +| PSANet | R-101-D8 | 769x769 | 40000 | 11.9 | 0.98 | V100 | 78.43 | 80.26 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_769x769_40k_cityscapes/psanet_r101-d8_769x769_40k_cityscapes_20200530_035107-997da1e6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_769x769_40k_cityscapes/psanet_r101-d8_769x769_40k_cityscapes_20200530_035107.log.json) | +| PSANet | R-50-D8 | 512x1024 | 80000 | - | - | V100 | 77.24 | 78.69 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x1024_80k_cityscapes/psanet_r50-d8_512x1024_80k_cityscapes_20200606_161842-ab60a24f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x1024_80k_cityscapes/psanet_r50-d8_512x1024_80k_cityscapes_20200606_161842.log.json) | +| PSANet | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 79.31 | 80.53 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x1024_80k_cityscapes/psanet_r101-d8_512x1024_80k_cityscapes_20200606_161823-0f73a169.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x1024_80k_cityscapes/psanet_r101-d8_512x1024_80k_cityscapes_20200606_161823.log.json) | +| PSANet | R-50-D8 | 769x769 | 80000 | - | - | V100 | 79.31 | 80.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_769x769_80k_cityscapes/psanet_r50-d8_769x769_80k_cityscapes_20200606_225134-fe42f49e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_769x769_80k_cityscapes/psanet_r50-d8_769x769_80k_cityscapes_20200606_225134.log.json) | +| PSANet | R-101-D8 | 769x769 | 80000 | - | - | V100 | 79.69 | 80.89 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_769x769_80k_cityscapes/psanet_r101-d8_769x769_80k_cityscapes_20200606_214550-7665827b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_769x769_80k_cityscapes/psanet_r101-d8_769x769_80k_cityscapes_20200606_214550.log.json) | + +### ADE20K + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| PSANet | R-50-D8 | 512x512 | 80000 | 9 | 18.91 | V100 | 41.14 | 41.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_80k_ade20k/psanet_r50-d8_512x512_80k_ade20k_20200614_144141-835e4b97.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_80k_ade20k/psanet_r50-d8_512x512_80k_ade20k_20200614_144141.log.json) | +| PSANet | R-101-D8 | 512x512 | 80000 | 12.5 | 13.13 | V100 | 43.80 | 44.75 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_80k_ade20k/psanet_r101-d8_512x512_80k_ade20k_20200614_185117-1fab60d4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_80k_ade20k/psanet_r101-d8_512x512_80k_ade20k_20200614_185117.log.json) | +| PSANet | R-50-D8 | 512x512 | 160000 | - | - | V100 | 41.67 | 42.95 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_160k_ade20k/psanet_r50-d8_512x512_160k_ade20k_20200615_161258-148077dd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_160k_ade20k/psanet_r50-d8_512x512_160k_ade20k_20200615_161258.log.json) | +| PSANet | R-101-D8 | 512x512 | 160000 | - | - | V100 | 43.74 | 45.38 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_160k_ade20k/psanet_r101-d8_512x512_160k_ade20k_20200615_161537-dbfa564c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_160k_ade20k/psanet_r101-d8_512x512_160k_ade20k_20200615_161537.log.json) | + +### Pascal VOC 2012 + Aug + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| PSANet | R-50-D8 | 512x512 | 20000 | 6.9 | 18.24 | V100 | 76.39 | 77.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_20k_voc12aug/psanet_r50-d8_512x512_20k_voc12aug_20200617_102413-2f1bbaa1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_20k_voc12aug/psanet_r50-d8_512x512_20k_voc12aug_20200617_102413.log.json) | +| PSANet | R-101-D8 | 512x512 | 20000 | 10.4 | 12.63 | V100 | 77.91 | 79.30 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_20k_voc12aug/psanet_r101-d8_512x512_20k_voc12aug_20200617_110624-946fef11.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_20k_voc12aug/psanet_r101-d8_512x512_20k_voc12aug_20200617_110624.log.json) | +| PSANet | R-50-D8 | 512x512 | 40000 | - | - | V100 | 76.30 | 77.35 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_40k_voc12aug/psanet_r50-d8_512x512_40k_voc12aug_20200613_161946-f596afb5.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_40k_voc12aug/psanet_r50-d8_512x512_40k_voc12aug_20200613_161946.log.json) | +| PSANet | R-101-D8 | 512x512 | 40000 | - | - | V100 | 77.73 | 79.05 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_40k_voc12aug/psanet_r101-d8_512x512_40k_voc12aug_20200613_161946-1f560f9e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_40k_voc12aug/psanet_r101-d8_512x512_40k_voc12aug_20200613_161946.log.json) | + ## Citation ```bibtex @@ -33,36 +66,3 @@ We notice information flow in convolutional neural networksis restricted insid year={2018} } ``` - -## Results and models - -### Cityscapes - -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| PSANet | R-50-D8 | 512x1024 | 40000 | 7 | 3.17 | 77.63 | 79.04 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x1024_40k_cityscapes/psanet_r50-d8_512x1024_40k_cityscapes_20200606_103117-99fac37c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x1024_40k_cityscapes/psanet_r50-d8_512x1024_40k_cityscapes_20200606_103117.log.json) | -| PSANet | R-101-D8 | 512x1024 | 40000 | 10.5 | 2.20 | 79.14 | 80.19 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x1024_40k_cityscapes/psanet_r101-d8_512x1024_40k_cityscapes_20200606_001418-27b9cfa7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x1024_40k_cityscapes/psanet_r101-d8_512x1024_40k_cityscapes_20200606_001418.log.json) | -| PSANet | R-50-D8 | 769x769 | 40000 | 7.9 | 1.40 | 77.99 | 79.64 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_769x769_40k_cityscapes/psanet_r50-d8_769x769_40k_cityscapes_20200530_033717-d5365506.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_769x769_40k_cityscapes/psanet_r50-d8_769x769_40k_cityscapes_20200530_033717.log.json) | -| PSANet | R-101-D8 | 769x769 | 40000 | 11.9 | 0.98 | 78.43 | 80.26 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_769x769_40k_cityscapes/psanet_r101-d8_769x769_40k_cityscapes_20200530_035107-997da1e6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_769x769_40k_cityscapes/psanet_r101-d8_769x769_40k_cityscapes_20200530_035107.log.json) | -| PSANet | R-50-D8 | 512x1024 | 80000 | - | - | 77.24 | 78.69 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x1024_80k_cityscapes/psanet_r50-d8_512x1024_80k_cityscapes_20200606_161842-ab60a24f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x1024_80k_cityscapes/psanet_r50-d8_512x1024_80k_cityscapes_20200606_161842.log.json) | -| PSANet | R-101-D8 | 512x1024 | 80000 | - | - | 79.31 | 80.53 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x1024_80k_cityscapes/psanet_r101-d8_512x1024_80k_cityscapes_20200606_161823-0f73a169.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x1024_80k_cityscapes/psanet_r101-d8_512x1024_80k_cityscapes_20200606_161823.log.json) | -| PSANet | R-50-D8 | 769x769 | 80000 | - | - | 79.31 | 80.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_769x769_80k_cityscapes/psanet_r50-d8_769x769_80k_cityscapes_20200606_225134-fe42f49e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_769x769_80k_cityscapes/psanet_r50-d8_769x769_80k_cityscapes_20200606_225134.log.json) | -| PSANet | R-101-D8 | 769x769 | 80000 | - | - | 79.69 | 80.89 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_769x769_80k_cityscapes/psanet_r101-d8_769x769_80k_cityscapes_20200606_214550-7665827b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_769x769_80k_cityscapes/psanet_r101-d8_769x769_80k_cityscapes_20200606_214550.log.json) | - -### ADE20K - -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| PSANet | R-50-D8 | 512x512 | 80000 | 9 | 18.91 | 41.14 | 41.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_80k_ade20k/psanet_r50-d8_512x512_80k_ade20k_20200614_144141-835e4b97.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_80k_ade20k/psanet_r50-d8_512x512_80k_ade20k_20200614_144141.log.json) | -| PSANet | R-101-D8 | 512x512 | 80000 | 12.5 | 13.13 | 43.80 | 44.75 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_80k_ade20k/psanet_r101-d8_512x512_80k_ade20k_20200614_185117-1fab60d4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_80k_ade20k/psanet_r101-d8_512x512_80k_ade20k_20200614_185117.log.json) | -| PSANet | R-50-D8 | 512x512 | 160000 | - | - | 41.67 | 42.95 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_160k_ade20k/psanet_r50-d8_512x512_160k_ade20k_20200615_161258-148077dd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_160k_ade20k/psanet_r50-d8_512x512_160k_ade20k_20200615_161258.log.json) | -| PSANet | R-101-D8 | 512x512 | 160000 | - | - | 43.74 | 45.38 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_160k_ade20k/psanet_r101-d8_512x512_160k_ade20k_20200615_161537-dbfa564c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_160k_ade20k/psanet_r101-d8_512x512_160k_ade20k_20200615_161537.log.json) | - -### Pascal VOC 2012 + Aug - -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| PSANet | R-50-D8 | 512x512 | 20000 | 6.9 | 18.24 | 76.39 | 77.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_20k_voc12aug/psanet_r50-d8_512x512_20k_voc12aug_20200617_102413-2f1bbaa1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_20k_voc12aug/psanet_r50-d8_512x512_20k_voc12aug_20200617_102413.log.json) | -| PSANet | R-101-D8 | 512x512 | 20000 | 10.4 | 12.63 | 77.91 | 79.30 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_20k_voc12aug/psanet_r101-d8_512x512_20k_voc12aug_20200617_110624-946fef11.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_20k_voc12aug/psanet_r101-d8_512x512_20k_voc12aug_20200617_110624.log.json) | -| PSANet | R-50-D8 | 512x512 | 40000 | - | - | 76.30 | 77.35 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_40k_voc12aug/psanet_r50-d8_512x512_40k_voc12aug_20200613_161946-f596afb5.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_40k_voc12aug/psanet_r50-d8_512x512_40k_voc12aug_20200613_161946.log.json) | -| PSANet | R-101-D8 | 512x512 | 40000 | - | - | 77.73 | 79.05 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_40k_voc12aug/psanet_r101-d8_512x512_40k_voc12aug_20200613_161946-1f560f9e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_40k_voc12aug/psanet_r101-d8_512x512_40k_voc12aug_20200613_161946.log.json) | diff --git a/configs/psanet/metafile.yaml b/configs/psanet/metafile.yaml new file mode 100644 index 0000000000..3fbe6f6d3e --- /dev/null +++ b/configs/psanet/metafile.yaml @@ -0,0 +1,391 @@ +Collections: +- Name: PSANet + License: Apache License 2.0 + Metadata: + Training Data: + - Cityscapes + - ADE20K + - Pascal VOC 2012 + Aug + Paper: + Title: 'PSANet: Point-wise Spatial Attention Network for Scene Parsing' + URL: https://openaccess.thecvf.com/content_ECCV_2018/papers/Hengshuang_Zhao_PSANet_Point-wise_Spatial_ECCV_2018_paper.pdf + README: configs/psanet/README.md + Frameworks: + - PyTorch +Models: +- Name: psanet_r50-d8_4xb2-40k_cityscapes-512x1024 + In Collection: PSANet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 77.63 + mIoU(ms+flip): 79.04 + Config: configs/psanet/psanet_r50-d8_4xb2-40k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - PSANet + Training Resources: 4x V100 GPUS + Memory (GB): 7.0 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x1024_40k_cityscapes/psanet_r50-d8_512x1024_40k_cityscapes_20200606_103117-99fac37c.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x1024_40k_cityscapes/psanet_r50-d8_512x1024_40k_cityscapes_20200606_103117.log.json + Paper: + Title: 'PSANet: Point-wise Spatial Attention Network for Scene Parsing' + URL: https://openaccess.thecvf.com/content_ECCV_2018/papers/Hengshuang_Zhao_PSANet_Point-wise_Spatial_ECCV_2018_paper.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psa_head.py#L18 + Framework: PyTorch +- Name: psanet_r101-d8_4xb2-40k_cityscapes-512x1024 + In Collection: PSANet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.14 + mIoU(ms+flip): 80.19 + Config: configs/psanet/psanet_r101-d8_4xb2-40k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - PSANet + Training Resources: 4x V100 GPUS + Memory (GB): 10.5 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x1024_40k_cityscapes/psanet_r101-d8_512x1024_40k_cityscapes_20200606_001418-27b9cfa7.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x1024_40k_cityscapes/psanet_r101-d8_512x1024_40k_cityscapes_20200606_001418.log.json + Paper: + Title: 'PSANet: Point-wise Spatial Attention Network for Scene Parsing' + URL: https://openaccess.thecvf.com/content_ECCV_2018/papers/Hengshuang_Zhao_PSANet_Point-wise_Spatial_ECCV_2018_paper.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psa_head.py#L18 + Framework: PyTorch +- Name: psanet_r50-d8_4xb2-40k_cityscapes-769x769 + In Collection: PSANet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 77.99 + mIoU(ms+flip): 79.64 + Config: configs/psanet/psanet_r50-d8_4xb2-40k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - PSANet + Training Resources: 4x V100 GPUS + Memory (GB): 7.9 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_769x769_40k_cityscapes/psanet_r50-d8_769x769_40k_cityscapes_20200530_033717-d5365506.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_769x769_40k_cityscapes/psanet_r50-d8_769x769_40k_cityscapes_20200530_033717.log.json + Paper: + Title: 'PSANet: Point-wise Spatial Attention Network for Scene Parsing' + URL: https://openaccess.thecvf.com/content_ECCV_2018/papers/Hengshuang_Zhao_PSANet_Point-wise_Spatial_ECCV_2018_paper.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psa_head.py#L18 + Framework: PyTorch +- Name: psanet_r101-d8_4xb2-40k_cityscapes-769x769 + In Collection: PSANet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.43 + mIoU(ms+flip): 80.26 + Config: configs/psanet/psanet_r101-d8_4xb2-40k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - PSANet + Training Resources: 4x V100 GPUS + Memory (GB): 11.9 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_769x769_40k_cityscapes/psanet_r101-d8_769x769_40k_cityscapes_20200530_035107-997da1e6.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_769x769_40k_cityscapes/psanet_r101-d8_769x769_40k_cityscapes_20200530_035107.log.json + Paper: + Title: 'PSANet: Point-wise Spatial Attention Network for Scene Parsing' + URL: https://openaccess.thecvf.com/content_ECCV_2018/papers/Hengshuang_Zhao_PSANet_Point-wise_Spatial_ECCV_2018_paper.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psa_head.py#L18 + Framework: PyTorch +- Name: psanet_r50-d8_4xb2-80k_cityscapes-512x1024 + In Collection: PSANet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 77.24 + mIoU(ms+flip): 78.69 + Config: configs/psanet/psanet_r50-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - PSANet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x1024_80k_cityscapes/psanet_r50-d8_512x1024_80k_cityscapes_20200606_161842-ab60a24f.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x1024_80k_cityscapes/psanet_r50-d8_512x1024_80k_cityscapes_20200606_161842.log.json + Paper: + Title: 'PSANet: Point-wise Spatial Attention Network for Scene Parsing' + URL: https://openaccess.thecvf.com/content_ECCV_2018/papers/Hengshuang_Zhao_PSANet_Point-wise_Spatial_ECCV_2018_paper.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psa_head.py#L18 + Framework: PyTorch +- Name: psanet_r101-d8_4xb2-80k_cityscapes-512x1024 + In Collection: PSANet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.31 + mIoU(ms+flip): 80.53 + Config: configs/psanet/psanet_r101-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - PSANet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x1024_80k_cityscapes/psanet_r101-d8_512x1024_80k_cityscapes_20200606_161823-0f73a169.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x1024_80k_cityscapes/psanet_r101-d8_512x1024_80k_cityscapes_20200606_161823.log.json + Paper: + Title: 'PSANet: Point-wise Spatial Attention Network for Scene Parsing' + URL: https://openaccess.thecvf.com/content_ECCV_2018/papers/Hengshuang_Zhao_PSANet_Point-wise_Spatial_ECCV_2018_paper.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psa_head.py#L18 + Framework: PyTorch +- Name: psanet_r50-d8_4xb2-80k_cityscapes-769x769 + In Collection: PSANet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.31 + mIoU(ms+flip): 80.91 + Config: configs/psanet/psanet_r50-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - PSANet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_769x769_80k_cityscapes/psanet_r50-d8_769x769_80k_cityscapes_20200606_225134-fe42f49e.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_769x769_80k_cityscapes/psanet_r50-d8_769x769_80k_cityscapes_20200606_225134.log.json + Paper: + Title: 'PSANet: Point-wise Spatial Attention Network for Scene Parsing' + URL: https://openaccess.thecvf.com/content_ECCV_2018/papers/Hengshuang_Zhao_PSANet_Point-wise_Spatial_ECCV_2018_paper.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psa_head.py#L18 + Framework: PyTorch +- Name: psanet_r101-d8_4xb2-80k_cityscapes-769x769 + In Collection: PSANet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.69 + mIoU(ms+flip): 80.89 + Config: configs/psanet/psanet_r101-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - PSANet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_769x769_80k_cityscapes/psanet_r101-d8_769x769_80k_cityscapes_20200606_214550-7665827b.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_769x769_80k_cityscapes/psanet_r101-d8_769x769_80k_cityscapes_20200606_214550.log.json + Paper: + Title: 'PSANet: Point-wise Spatial Attention Network for Scene Parsing' + URL: https://openaccess.thecvf.com/content_ECCV_2018/papers/Hengshuang_Zhao_PSANet_Point-wise_Spatial_ECCV_2018_paper.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psa_head.py#L18 + Framework: PyTorch +- Name: psanet_r50-d8_4xb4-80k_ade20k-512x512 + In Collection: PSANet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 41.14 + mIoU(ms+flip): 41.91 + Config: configs/psanet/psanet_r50-d8_4xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50-D8 + - PSANet + Training Resources: 4x V100 GPUS + Memory (GB): 9.0 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_80k_ade20k/psanet_r50-d8_512x512_80k_ade20k_20200614_144141-835e4b97.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_80k_ade20k/psanet_r50-d8_512x512_80k_ade20k_20200614_144141.log.json + Paper: + Title: 'PSANet: Point-wise Spatial Attention Network for Scene Parsing' + URL: https://openaccess.thecvf.com/content_ECCV_2018/papers/Hengshuang_Zhao_PSANet_Point-wise_Spatial_ECCV_2018_paper.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psa_head.py#L18 + Framework: PyTorch +- Name: psanet_r101-d8_4xb4-80k_ade20k-512x512 + In Collection: PSANet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 43.8 + mIoU(ms+flip): 44.75 + Config: configs/psanet/psanet_r101-d8_4xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-101-D8 + - PSANet + Training Resources: 4x V100 GPUS + Memory (GB): 12.5 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_80k_ade20k/psanet_r101-d8_512x512_80k_ade20k_20200614_185117-1fab60d4.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_80k_ade20k/psanet_r101-d8_512x512_80k_ade20k_20200614_185117.log.json + Paper: + Title: 'PSANet: Point-wise Spatial Attention Network for Scene Parsing' + URL: https://openaccess.thecvf.com/content_ECCV_2018/papers/Hengshuang_Zhao_PSANet_Point-wise_Spatial_ECCV_2018_paper.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psa_head.py#L18 + Framework: PyTorch +- Name: psanet_r50-d8_4xb4-160k_ade20k-512x512 + In Collection: PSANet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 41.67 + mIoU(ms+flip): 42.95 + Config: configs/psanet/psanet_r50-d8_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50-D8 + - PSANet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_160k_ade20k/psanet_r50-d8_512x512_160k_ade20k_20200615_161258-148077dd.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_160k_ade20k/psanet_r50-d8_512x512_160k_ade20k_20200615_161258.log.json + Paper: + Title: 'PSANet: Point-wise Spatial Attention Network for Scene Parsing' + URL: https://openaccess.thecvf.com/content_ECCV_2018/papers/Hengshuang_Zhao_PSANet_Point-wise_Spatial_ECCV_2018_paper.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psa_head.py#L18 + Framework: PyTorch +- Name: psanet_r101-d8_4xb4-160k_ade20k-512x512 + In Collection: PSANet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 43.74 + mIoU(ms+flip): 45.38 + Config: configs/psanet/psanet_r101-d8_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-101-D8 + - PSANet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_160k_ade20k/psanet_r101-d8_512x512_160k_ade20k_20200615_161537-dbfa564c.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_160k_ade20k/psanet_r101-d8_512x512_160k_ade20k_20200615_161537.log.json + Paper: + Title: 'PSANet: Point-wise Spatial Attention Network for Scene Parsing' + URL: https://openaccess.thecvf.com/content_ECCV_2018/papers/Hengshuang_Zhao_PSANet_Point-wise_Spatial_ECCV_2018_paper.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psa_head.py#L18 + Framework: PyTorch +- Name: psanet_r50-d8_4xb4-20k_voc12aug-512x512 + In Collection: PSANet + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 76.39 + mIoU(ms+flip): 77.34 + Config: configs/psanet/psanet_r50-d8_4xb4-20k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - R-50-D8 + - PSANet + Training Resources: 4x V100 GPUS + Memory (GB): 6.9 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_20k_voc12aug/psanet_r50-d8_512x512_20k_voc12aug_20200617_102413-2f1bbaa1.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_20k_voc12aug/psanet_r50-d8_512x512_20k_voc12aug_20200617_102413.log.json + Paper: + Title: 'PSANet: Point-wise Spatial Attention Network for Scene Parsing' + URL: https://openaccess.thecvf.com/content_ECCV_2018/papers/Hengshuang_Zhao_PSANet_Point-wise_Spatial_ECCV_2018_paper.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psa_head.py#L18 + Framework: PyTorch +- Name: psanet_r101-d8_4xb4-20k_voc12aug-512x512 + In Collection: PSANet + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 77.91 + mIoU(ms+flip): 79.3 + Config: configs/psanet/psanet_r101-d8_4xb4-20k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - R-101-D8 + - PSANet + Training Resources: 4x V100 GPUS + Memory (GB): 10.4 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_20k_voc12aug/psanet_r101-d8_512x512_20k_voc12aug_20200617_110624-946fef11.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_20k_voc12aug/psanet_r101-d8_512x512_20k_voc12aug_20200617_110624.log.json + Paper: + Title: 'PSANet: Point-wise Spatial Attention Network for Scene Parsing' + URL: https://openaccess.thecvf.com/content_ECCV_2018/papers/Hengshuang_Zhao_PSANet_Point-wise_Spatial_ECCV_2018_paper.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psa_head.py#L18 + Framework: PyTorch +- Name: psanet_r50-d8_4xb4-40k_voc12aug-512x512 + In Collection: PSANet + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 76.3 + mIoU(ms+flip): 77.35 + Config: configs/psanet/psanet_r50-d8_4xb4-40k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - R-50-D8 + - PSANet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_40k_voc12aug/psanet_r50-d8_512x512_40k_voc12aug_20200613_161946-f596afb5.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_40k_voc12aug/psanet_r50-d8_512x512_40k_voc12aug_20200613_161946.log.json + Paper: + Title: 'PSANet: Point-wise Spatial Attention Network for Scene Parsing' + URL: https://openaccess.thecvf.com/content_ECCV_2018/papers/Hengshuang_Zhao_PSANet_Point-wise_Spatial_ECCV_2018_paper.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psa_head.py#L18 + Framework: PyTorch +- Name: psanet_r101-d8_4xb4-40k_voc12aug-512x512 + In Collection: PSANet + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 77.73 + mIoU(ms+flip): 79.05 + Config: configs/psanet/psanet_r101-d8_4xb4-40k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - R-101-D8 + - PSANet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_40k_voc12aug/psanet_r101-d8_512x512_40k_voc12aug_20200613_161946-1f560f9e.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_40k_voc12aug/psanet_r101-d8_512x512_40k_voc12aug_20200613_161946.log.json + Paper: + Title: 'PSANet: Point-wise Spatial Attention Network for Scene Parsing' + URL: https://openaccess.thecvf.com/content_ECCV_2018/papers/Hengshuang_Zhao_PSANet_Point-wise_Spatial_ECCV_2018_paper.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psa_head.py#L18 + Framework: PyTorch diff --git a/configs/psanet/psanet.yml b/configs/psanet/psanet.yml deleted file mode 100644 index fca1ac1b40..0000000000 --- a/configs/psanet/psanet.yml +++ /dev/null @@ -1,305 +0,0 @@ -Collections: -- Name: PSANet - Metadata: - Training Data: - - Cityscapes - - ADE20K - - Pascal VOC 2012 + Aug - Paper: - URL: https://openaccess.thecvf.com/content_ECCV_2018/papers/Hengshuang_Zhao_PSANet_Point-wise_Spatial_ECCV_2018_paper.pdf - Title: 'PSANet: Point-wise Spatial Attention Network for Scene Parsing' - README: configs/psanet/README.md - Code: - URL: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psa_head.py#L18 - Version: v0.17.0 - Converted From: - Code: https://github.com/hszhao/PSANet -Models: -- Name: psanet_r50-d8_4xb2-40k_cityscapes-512x1024 - In Collection: PSANet - Metadata: - backbone: R-50-D8 - crop size: (512,1024) - lr schd: 40000 - inference time (ms/im): - - value: 315.46 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 7.0 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 77.63 - mIoU(ms+flip): 79.04 - Config: configs/psanet/psanet_r50-d8_4xb2-40k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x1024_40k_cityscapes/psanet_r50-d8_512x1024_40k_cityscapes_20200606_103117-99fac37c.pth -- Name: psanet_r101-d8_4xb2-40k_cityscapes-512x1024 - In Collection: PSANet - Metadata: - backbone: R-101-D8 - crop size: (512,1024) - lr schd: 40000 - inference time (ms/im): - - value: 454.55 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 10.5 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.14 - mIoU(ms+flip): 80.19 - Config: configs/psanet/psanet_r101-d8_4xb2-40k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x1024_40k_cityscapes/psanet_r101-d8_512x1024_40k_cityscapes_20200606_001418-27b9cfa7.pth -- Name: psanet_r50-d8_4xb2-40k_cityscapes-769x769 - In Collection: PSANet - Metadata: - backbone: R-50-D8 - crop size: (769,769) - lr schd: 40000 - inference time (ms/im): - - value: 714.29 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 7.9 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 77.99 - mIoU(ms+flip): 79.64 - Config: configs/psanet/psanet_r50-d8_4xb2-40k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_769x769_40k_cityscapes/psanet_r50-d8_769x769_40k_cityscapes_20200530_033717-d5365506.pth -- Name: psanet_r101-d8_4xb2-40k_cityscapes-769x769 - In Collection: PSANet - Metadata: - backbone: R-101-D8 - crop size: (769,769) - lr schd: 40000 - inference time (ms/im): - - value: 1020.41 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 11.9 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.43 - mIoU(ms+flip): 80.26 - Config: configs/psanet/psanet_r101-d8_4xb2-40k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_769x769_40k_cityscapes/psanet_r101-d8_769x769_40k_cityscapes_20200530_035107-997da1e6.pth -- Name: psanet_r50-d8_4xb2-80k_cityscapes-512x1024 - In Collection: PSANet - Metadata: - backbone: R-50-D8 - crop size: (512,1024) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 77.24 - mIoU(ms+flip): 78.69 - Config: configs/psanet/psanet_r50-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x1024_80k_cityscapes/psanet_r50-d8_512x1024_80k_cityscapes_20200606_161842-ab60a24f.pth -- Name: psanet_r101-d8_4xb2-80k_cityscapes-512x1024 - In Collection: PSANet - Metadata: - backbone: R-101-D8 - crop size: (512,1024) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.31 - mIoU(ms+flip): 80.53 - Config: configs/psanet/psanet_r101-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x1024_80k_cityscapes/psanet_r101-d8_512x1024_80k_cityscapes_20200606_161823-0f73a169.pth -- Name: psanet_r50-d8_4xb2-80k_cityscapes-769x769 - In Collection: PSANet - Metadata: - backbone: R-50-D8 - crop size: (769,769) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.31 - mIoU(ms+flip): 80.91 - Config: configs/psanet/psanet_r50-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_769x769_80k_cityscapes/psanet_r50-d8_769x769_80k_cityscapes_20200606_225134-fe42f49e.pth -- Name: psanet_r101-d8_4xb2-80k_cityscapes-769x769 - In Collection: PSANet - Metadata: - backbone: R-101-D8 - crop size: (769,769) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.69 - mIoU(ms+flip): 80.89 - Config: configs/psanet/psanet_r101-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_769x769_80k_cityscapes/psanet_r101-d8_769x769_80k_cityscapes_20200606_214550-7665827b.pth -- Name: psanet_r50-d8_4xb4-80k_ade20k-512x512 - In Collection: PSANet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 52.88 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 9.0 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 41.14 - mIoU(ms+flip): 41.91 - Config: configs/psanet/psanet_r50-d8_4xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_80k_ade20k/psanet_r50-d8_512x512_80k_ade20k_20200614_144141-835e4b97.pth -- Name: psanet_r101-d8_4xb4-80k_ade20k-512x512 - In Collection: PSANet - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 76.16 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 12.5 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 43.8 - mIoU(ms+flip): 44.75 - Config: configs/psanet/psanet_r101-d8_4xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_80k_ade20k/psanet_r101-d8_512x512_80k_ade20k_20200614_185117-1fab60d4.pth -- Name: psanet_r50-d8_4xb4-160k_ade20k-512x512 - In Collection: PSANet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 41.67 - mIoU(ms+flip): 42.95 - Config: configs/psanet/psanet_r50-d8_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_160k_ade20k/psanet_r50-d8_512x512_160k_ade20k_20200615_161258-148077dd.pth -- Name: psanet_r101-d8_4xb4-160k_ade20k-512x512 - In Collection: PSANet - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 43.74 - mIoU(ms+flip): 45.38 - Config: configs/psanet/psanet_r101-d8_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_160k_ade20k/psanet_r101-d8_512x512_160k_ade20k_20200615_161537-dbfa564c.pth -- Name: psanet_r50-d8_4xb4-20k_voc12aug-512x512 - In Collection: PSANet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 20000 - inference time (ms/im): - - value: 54.82 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 6.9 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 76.39 - mIoU(ms+flip): 77.34 - Config: configs/psanet/psanet_r50-d8_4xb4-20k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_20k_voc12aug/psanet_r50-d8_512x512_20k_voc12aug_20200617_102413-2f1bbaa1.pth -- Name: psanet_r101-d8_4xb4-20k_voc12aug-512x512 - In Collection: PSANet - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 20000 - inference time (ms/im): - - value: 79.18 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 10.4 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 77.91 - mIoU(ms+flip): 79.3 - Config: configs/psanet/psanet_r101-d8_4xb4-20k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_20k_voc12aug/psanet_r101-d8_512x512_20k_voc12aug_20200617_110624-946fef11.pth -- Name: psanet_r50-d8_4xb4-40k_voc12aug-512x512 - In Collection: PSANet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 40000 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 76.3 - mIoU(ms+flip): 77.35 - Config: configs/psanet/psanet_r50-d8_4xb4-40k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_40k_voc12aug/psanet_r50-d8_512x512_40k_voc12aug_20200613_161946-f596afb5.pth -- Name: psanet_r101-d8_4xb4-40k_voc12aug-512x512 - In Collection: PSANet - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 40000 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 77.73 - mIoU(ms+flip): 79.05 - Config: configs/psanet/psanet_r101-d8_4xb4-40k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_40k_voc12aug/psanet_r101-d8_512x512_40k_voc12aug_20200613_161946-1f560f9e.pth diff --git a/configs/pspnet/README.md b/configs/pspnet/README.md index 9135091102..e1c2c112cb 100644 --- a/configs/pspnet/README.md +++ b/configs/pspnet/README.md @@ -1,6 +1,6 @@ # PSPNet -[Pyramid Scene Parsing Network](https://arxiv.org/abs/1612.01105) +> [Pyramid Scene Parsing Network](https://arxiv.org/abs/1612.01105) ## Introduction @@ -27,85 +27,65 @@ Scene parsing is challenging for unrestricted open vocabulary and diverse scenes PSPNet-R50 D8 model structure -## Citation - -```bibtex -@inproceedings{zhao2017pspnet, - title={Pyramid Scene Parsing Network}, - author={Zhao, Hengshuang and Shi, Jianping and Qi, Xiaojuan and Wang, Xiaogang and Jia, Jiaya}, - booktitle={CVPR}, - year={2017} -} -``` - -```bibtex -@article{wightman2021resnet, - title={Resnet strikes back: An improved training procedure in timm}, - author={Wightman, Ross and Touvron, Hugo and J{\'e}gou, Herv{\'e}}, - journal={arXiv preprint arXiv:2110.00476}, - year={2021} -} -``` - ## Results and models ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------------- | ------------- | --------- | ------: | -------- | -------------- | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| PSPNet | R-50-D8 | 512x1024 | 40000 | 6.1 | 4.07 | 77.85 | 79.18 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338.log.json) | -| PSPNet | R-101-D8 | 512x1024 | 40000 | 9.6 | 2.68 | 78.34 | 79.74 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_40k_cityscapes/pspnet_r101-d8_512x1024_40k_cityscapes_20200604_232751-467e7cf4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_40k_cityscapes/pspnet_r101-d8_512x1024_40k_cityscapes_20200604_232751.log.json) | -| PSPNet | R-50-D8 | 769x769 | 40000 | 6.9 | 1.76 | 78.26 | 79.88 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_769x769_40k_cityscapes/pspnet_r50-d8_769x769_40k_cityscapes_20200606_112725-86638686.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_769x769_40k_cityscapes/pspnet_r50-d8_769x769_40k_cityscapes_20200606_112725.log.json) | -| PSPNet | R-101-D8 | 769x769 | 40000 | 10.9 | 1.15 | 79.08 | 80.28 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_769x769_40k_cityscapes/pspnet_r101-d8_769x769_40k_cityscapes_20200606_112753-61c6f5be.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_769x769_40k_cityscapes/pspnet_r101-d8_769x769_40k_cityscapes_20200606_112753.log.json) | -| PSPNet | R-18-D8 | 512x1024 | 80000 | 1.7 | 15.71 | 74.87 | 76.04 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r18-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_512x1024_80k_cityscapes/pspnet_r18-d8_512x1024_80k_cityscapes_20201225_021458-09ffa746.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_512x1024_80k_cityscapes/pspnet_r18-d8_512x1024_80k_cityscapes-20201225_021458.log.json) | -| PSPNet | R-50-D8 | 512x1024 | 80000 | - | - | 78.55 | 79.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_80k_cityscapes/pspnet_r50-d8_512x1024_80k_cityscapes_20200606_112131-2376f12b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_80k_cityscapes/pspnet_r50-d8_512x1024_80k_cityscapes_20200606_112131.log.json) | -| PSPNet | R-50b-D8 rsb | 512x1024 | 80000 | 6.2 | 3.82 | 78.47 | 79.45 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8-rsb_4xb2-adamw-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_80k_cityscapes/pspnet_r50-d8_rsb-pretrain_512x1024_adamw_80k_cityscapes_20220315_123238-588c30be.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_80k_cityscapes/pspnet_r50-d8_rsb-pretrain_512x1024_adamw_80k_cityscapes_20220315_123238.log.json) | -| PSPNet | R-101-D8 | 512x1024 | 80000 | - | - | 79.76 | 81.01 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_80k_cityscapes/pspnet_r101-d8_512x1024_80k_cityscapes_20200606_112211-e1e1100f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_80k_cityscapes/pspnet_r101-d8_512x1024_80k_cityscapes_20200606_112211.log.json) | -| PSPNet (FP16) | R-101-D8 | 512x1024 | 80000 | 5.34 | 8.77 | 79.46 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb2-amp-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_fp16_512x1024_80k_cityscapes/pspnet_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230919-a0875e5c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_fp16_512x1024_80k_cityscapes/pspnet_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230919.log.json) | -| PSPNet | R-18-D8 | 769x769 | 80000 | 1.9 | 6.20 | 75.90 | 77.86 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r18-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_769x769_80k_cityscapes/pspnet_r18-d8_769x769_80k_cityscapes_20201225_021458-3deefc62.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_769x769_80k_cityscapes/pspnet_r18-d8_769x769_80k_cityscapes-20201225_021458.log.json) | -| PSPNet | R-50-D8 | 769x769 | 80000 | - | - | 79.59 | 80.69 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_769x769_80k_cityscapes/pspnet_r50-d8_769x769_80k_cityscapes_20200606_210121-5ccf03dd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_769x769_80k_cityscapes/pspnet_r50-d8_769x769_80k_cityscapes_20200606_210121.log.json) | -| PSPNet | R-101-D8 | 769x769 | 80000 | - | - | 79.77 | 81.06 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_769x769_80k_cityscapes/pspnet_r101-d8_769x769_80k_cityscapes_20200606_225055-dba412fa.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_769x769_80k_cityscapes/pspnet_r101-d8_769x769_80k_cityscapes_20200606_225055.log.json) | -| PSPNet | R-18b-D8 | 512x1024 | 80000 | 1.5 | 16.28 | 74.23 | 75.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r18b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18b-d8_512x1024_80k_cityscapes/pspnet_r18b-d8_512x1024_80k_cityscapes_20201226_063116-26928a60.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18b-d8_512x1024_80k_cityscapes/pspnet_r18b-d8_512x1024_80k_cityscapes-20201226_063116.log.json) | -| PSPNet | R-50b-D8 | 512x1024 | 80000 | 6.0 | 4.30 | 78.22 | 79.46 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50b-d8_512x1024_80k_cityscapes/pspnet_r50b-d8_512x1024_80k_cityscapes_20201225_094315-6344287a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50b-d8_512x1024_80k_cityscapes/pspnet_r50b-d8_512x1024_80k_cityscapes-20201225_094315.log.json) | -| PSPNet | R-101b-D8 | 512x1024 | 80000 | 9.5 | 2.76 | 79.69 | 80.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101b-d8_512x1024_80k_cityscapes/pspnet_r101b-d8_512x1024_80k_cityscapes_20201226_170012-3a4d38ab.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101b-d8_512x1024_80k_cityscapes/pspnet_r101b-d8_512x1024_80k_cityscapes-20201226_170012.log.json) | -| PSPNet | R-18b-D8 | 769x769 | 80000 | 1.7 | 6.41 | 74.92 | 76.90 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r18b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18b-d8_769x769_80k_cityscapes/pspnet_r18b-d8_769x769_80k_cityscapes_20201226_080942-bf98d186.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18b-d8_769x769_80k_cityscapes/pspnet_r18b-d8_769x769_80k_cityscapes-20201226_080942.log.json) | -| PSPNet | R-50b-D8 | 769x769 | 80000 | 6.8 | 1.88 | 78.50 | 79.96 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50b-d8_769x769_80k_cityscapes/pspnet_r50b-d8_769x769_80k_cityscapes_20201225_094316-4c643cf6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50b-d8_769x769_80k_cityscapes/pspnet_r50b-d8_769x769_80k_cityscapes-20201225_094316.log.json) | -| PSPNet | R-101b-D8 | 769x769 | 80000 | 10.8 | 1.17 | 78.87 | 80.04 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101b-d8_769x769_80k_cityscapes/pspnet_r101b-d8_769x769_80k_cityscapes_20201226_171823-f0e7c293.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101b-d8_769x769_80k_cityscapes/pspnet_r101b-d8_769x769_80k_cityscapes-20201226_171823.log.json) | -| PSPNet | R-50-D32 | 512x1024 | 80000 | 3.0 | 15.21 | 73.88 | 76.85 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50b-d32_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d32_512x1024_80k_cityscapes/pspnet_r50-d32_512x1024_80k_cityscapes_20220316_224840-9092b254.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d32_512x1024_80k_cityscapes/pspnet_r50-d32_512x1024_80k_cityscapes_20220316_224840.log.json) | -| PSPNet | R-50b-D32 rsb | 512x1024 | 80000 | 3.1 | 16.08 | 74.09 | 77.18 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d32_rsb_4xb2-adamw-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d32_rsb-pretrain_512x1024_adamw_80k_cityscapes/pspnet_r50-d32_rsb-pretrain_512x1024_adamw_80k_cityscapes_20220316_141229-dd9c9610.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d32_rsb-pretrain_512x1024_adamw_80k_cityscapes/pspnet_r50-d32_rsb-pretrain_512x1024_adamw_80k_cityscapes_20220316_141229.log.json) | -| PSPNet | R-50b-D32 | 512x1024 | 80000 | 2.9 | 15.41 | 72.61 | 75.51 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50b-d32_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50b-d32_512x1024_80k_cityscapes/pspnet_r50b-d32_512x1024_80k_cityscapes_20220311_152152-23bcaf8c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50b-d32_512x1024_80k_cityscapes/pspnet_r50b-d32_512x1024_80k_cityscapes_20220311_152152.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------------- | ------------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| PSPNet | R-50-D8 | 512x1024 | 40000 | 6.1 | 4.07 | V100 | 77.85 | 79.18 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338.log.json) | +| PSPNet | R-101-D8 | 512x1024 | 40000 | 9.6 | 2.68 | V100 | 78.34 | 79.74 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_40k_cityscapes/pspnet_r101-d8_512x1024_40k_cityscapes_20200604_232751-467e7cf4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_40k_cityscapes/pspnet_r101-d8_512x1024_40k_cityscapes_20200604_232751.log.json) | +| PSPNet | R-50-D8 | 769x769 | 40000 | 6.9 | 1.76 | V100 | 78.26 | 79.88 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_769x769_40k_cityscapes/pspnet_r50-d8_769x769_40k_cityscapes_20200606_112725-86638686.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_769x769_40k_cityscapes/pspnet_r50-d8_769x769_40k_cityscapes_20200606_112725.log.json) | +| PSPNet | R-101-D8 | 769x769 | 40000 | 10.9 | 1.15 | V100 | 79.08 | 80.28 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_769x769_40k_cityscapes/pspnet_r101-d8_769x769_40k_cityscapes_20200606_112753-61c6f5be.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_769x769_40k_cityscapes/pspnet_r101-d8_769x769_40k_cityscapes_20200606_112753.log.json) | +| PSPNet | R-18-D8 | 512x1024 | 80000 | 1.7 | 15.71 | V100 | 74.87 | 76.04 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r18-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_512x1024_80k_cityscapes/pspnet_r18-d8_512x1024_80k_cityscapes_20201225_021458-09ffa746.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_512x1024_80k_cityscapes/pspnet_r18-d8_512x1024_80k_cityscapes-20201225_021458.log.json) | +| PSPNet | R-50-D8 | 512x1024 | 80000 | - | - | V100 | 78.55 | 79.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_80k_cityscapes/pspnet_r50-d8_512x1024_80k_cityscapes_20200606_112131-2376f12b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_80k_cityscapes/pspnet_r50-d8_512x1024_80k_cityscapes_20200606_112131.log.json) | +| PSPNet | R-50b-D8 rsb | 512x1024 | 80000 | 6.2 | 3.82 | V100 | 78.47 | 79.45 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8-rsb_4xb2-adamw-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_80k_cityscapes/pspnet_r50-d8_rsb-pretrain_512x1024_adamw_80k_cityscapes_20220315_123238-588c30be.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_80k_cityscapes/pspnet_r50-d8_rsb-pretrain_512x1024_adamw_80k_cityscapes_20220315_123238.log.json) | +| PSPNet | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 79.76 | 81.01 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_80k_cityscapes/pspnet_r101-d8_512x1024_80k_cityscapes_20200606_112211-e1e1100f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_80k_cityscapes/pspnet_r101-d8_512x1024_80k_cityscapes_20200606_112211.log.json) | +| PSPNet (FP16) | R-101-D8 | 512x1024 | 80000 | 5.34 | 8.77 | V100 | 79.46 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb2-amp-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_fp16_512x1024_80k_cityscapes/pspnet_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230919-a0875e5c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_fp16_512x1024_80k_cityscapes/pspnet_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230919.log.json) | +| PSPNet | R-18-D8 | 769x769 | 80000 | 1.9 | 6.20 | V100 | 75.90 | 77.86 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r18-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_769x769_80k_cityscapes/pspnet_r18-d8_769x769_80k_cityscapes_20201225_021458-3deefc62.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_769x769_80k_cityscapes/pspnet_r18-d8_769x769_80k_cityscapes-20201225_021458.log.json) | +| PSPNet | R-50-D8 | 769x769 | 80000 | - | - | V100 | 79.59 | 80.69 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_769x769_80k_cityscapes/pspnet_r50-d8_769x769_80k_cityscapes_20200606_210121-5ccf03dd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_769x769_80k_cityscapes/pspnet_r50-d8_769x769_80k_cityscapes_20200606_210121.log.json) | +| PSPNet | R-101-D8 | 769x769 | 80000 | - | - | V100 | 79.77 | 81.06 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.oz1z1penmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_769x769_80k_cityscapes/pspnet_r101-d8_769x769_80k_cityscapes_20200606_225055-dba412fa.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_769x769_80k_cityscapes/pspnet_r101-d8_769x769_80k_cityscapes_20200606_225055.log.json) | +| PSPNet | R-18b-D8 | 512x1024 | 80000 | 1.5 | 16.28 | V100 | 74.23 | 75.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r18b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18b-d8_512x1024_80k_cityscapes/pspnet_r18b-d8_512x1024_80k_cityscapes_20201226_063116-26928a60.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18b-d8_512x1024_80k_cityscapes/pspnet_r18b-d8_512x1024_80k_cityscapes-20201226_063116.log.json) | +| PSPNet | R-50b-D8 | 512x1024 | 80000 | 6.0 | 4.30 | V100 | 78.22 | 79.46 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50b-d8_512x1024_80k_cityscapes/pspnet_r50b-d8_512x1024_80k_cityscapes_20201225_094315-6344287a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50b-d8_512x1024_80k_cityscapes/pspnet_r50b-d8_512x1024_80k_cityscapes-20201225_094315.log.json) | +| PSPNet | R-101b-D8 | 512x1024 | 80000 | 9.5 | 2.76 | V100 | 79.69 | 80.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101b-d8_512x1024_80k_cityscapes/pspnet_r101b-d8_512x1024_80k_cityscapes_20201226_170012-3a4d38ab.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101b-d8_512x1024_80k_cityscapes/pspnet_r101b-d8_512x1024_80k_cityscapes-20201226_170012.log.json) | +| PSPNet | R-18b-D8 | 769x769 | 80000 | 1.7 | 6.41 | V100 | 74.92 | 76.90 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r18b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18b-d8_769x769_80k_cityscapes/pspnet_r18b-d8_769x769_80k_cityscapes_20201226_080942-bf98d186.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18b-d8_769x769_80k_cityscapes/pspnet_r18b-d8_769x769_80k_cityscapes-20201226_080942.log.json) | +| PSPNet | R-50b-D8 | 769x769 | 80000 | 6.8 | 1.88 | V100 | 78.50 | 79.96 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50b-d8_769x769_80k_cityscapes/pspnet_r50b-d8_769x769_80k_cityscapes_20201225_094316-4c643cf6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50b-d8_769x769_80k_cityscapes/pspnet_r50b-d8_769x769_80k_cityscapes-20201225_094316.log.json) | +| PSPNet | R-101b-D8 | 769x769 | 80000 | 10.8 | 1.17 | V100 | 78.87 | 80.04 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101b-d8_769x769_80k_cityscapes/pspnet_r101b-d8_769x769_80k_cityscapes_20201226_171823-f0e7c293.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101b-d8_769x769_80k_cityscapes/pspnet_r101b-d8_769x769_80k_cityscapes-20201226_171823.log.json) | +| PSPNet | R-50-D32 | 512x1024 | 80000 | 3.0 | 15.21 | V100 | 73.88 | 76.85 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50b-d32_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d32_512x1024_80k_cityscapes/pspnet_r50-d32_512x1024_80k_cityscapes_20220316_224840-9092b254.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d32_512x1024_80k_cityscapes/pspnet_r50-d32_512x1024_80k_cityscapes_20220316_224840.log.json) | +| PSPNet | R-50b-D32 rsb | 512x1024 | 80000 | 3.1 | 16.08 | V100 | 74.09 | 77.18 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d32_rsb_4xb2-adamw-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d32_rsb-pretrain_512x1024_adamw_80k_cityscapes/pspnet_r50-d32_rsb-pretrain_512x1024_adamw_80k_cityscapes_20220316_141229-dd9c9610.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d32_rsb-pretrain_512x1024_adamw_80k_cityscapes/pspnet_r50-d32_rsb-pretrain_512x1024_adamw_80k_cityscapes_20220316_141229.log.json) | +| PSPNet | R-50b-D32 | 512x1024 | 80000 | 2.9 | 15.41 | V100 | 72.61 | 75.51 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50b-d32_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50b-d32_512x1024_80k_cityscapes/pspnet_r50b-d32_512x1024_80k_cityscapes_20220311_152152-23bcaf8c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50b-d32_512x1024_80k_cityscapes/pspnet_r50b-d32_512x1024_80k_cityscapes_20220311_152152.log.json) | ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| PSPNet | R-50-D8 | 512x512 | 80000 | 8.5 | 23.53 | 41.13 | 41.94 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_80k_ade20k/pspnet_r50-d8_512x512_80k_ade20k_20200615_014128-15a8b914.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_80k_ade20k/pspnet_r50-d8_512x512_80k_ade20k_20200615_014128.log.json) | -| PSPNet | R-101-D8 | 512x512 | 80000 | 12 | 15.30 | 43.57 | 44.35 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_80k_ade20k/pspnet_r101-d8_512x512_80k_ade20k_20200614_031423-b6e782f0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_80k_ade20k/pspnet_r101-d8_512x512_80k_ade20k_20200614_031423.log.json) | -| PSPNet | R-50-D8 | 512x512 | 160000 | - | - | 42.48 | 43.44 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_160k_ade20k/pspnet_r50-d8_512x512_160k_ade20k_20200615_184358-1890b0bd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_160k_ade20k/pspnet_r50-d8_512x512_160k_ade20k_20200615_184358.log.json) | -| PSPNet | R-101-D8 | 512x512 | 160000 | - | - | 44.39 | 45.35 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_160k_ade20k/pspnet_r101-d8_512x512_160k_ade20k_20200615_100650-967c316f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_160k_ade20k/pspnet_r101-d8_512x512_160k_ade20k_20200615_100650.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| PSPNet | R-50-D8 | 512x512 | 80000 | 8.5 | 23.53 | V100 | 41.13 | 41.94 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_80k_ade20k/pspnet_r50-d8_512x512_80k_ade20k_20200615_014128-15a8b914.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_80k_ade20k/pspnet_r50-d8_512x512_80k_ade20k_20200615_014128.log.json) | +| PSPNet | R-101-D8 | 512x512 | 80000 | 12 | 15.30 | V100 | 43.57 | 44.35 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_80k_ade20k/pspnet_r101-d8_512x512_80k_ade20k_20200614_031423-b6e782f0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_80k_ade20k/pspnet_r101-d8_512x512_80k_ade20k_20200614_031423.log.json) | +| PSPNet | R-50-D8 | 512x512 | 160000 | - | - | V100 | 42.48 | 43.44 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_160k_ade20k/pspnet_r50-d8_512x512_160k_ade20k_20200615_184358-1890b0bd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_160k_ade20k/pspnet_r50-d8_512x512_160k_ade20k_20200615_184358.log.json) | +| PSPNet | R-101-D8 | 512x512 | 160000 | - | - | V100 | 44.39 | 45.35 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_160k_ade20k/pspnet_r101-d8_512x512_160k_ade20k_20200615_100650-967c316f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_160k_ade20k/pspnet_r101-d8_512x512_160k_ade20k_20200615_100650.log.json) | ### Pascal VOC 2012 + Aug -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| PSPNet | R-50-D8 | 512x512 | 20000 | 6.1 | 23.59 | 76.78 | 77.61 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_20k_voc12aug/pspnet_r50-d8_512x512_20k_voc12aug_20200617_101958-ed5dfbd9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_20k_voc12aug/pspnet_r50-d8_512x512_20k_voc12aug_20200617_101958.log.json) | -| PSPNet | R-101-D8 | 512x512 | 20000 | 9.6 | 15.02 | 78.47 | 79.25 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_20k_voc12aug/pspnet_r101-d8_512x512_20k_voc12aug_20200617_102003-4aef3c9a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_20k_voc12aug/pspnet_r101-d8_512x512_20k_voc12aug_20200617_102003.log.json) | -| PSPNet | R-50-D8 | 512x512 | 40000 | - | - | 77.29 | 78.48 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_40k_voc12aug/pspnet_r50-d8_512x512_40k_voc12aug_20200613_161222-ae9c1b8c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_40k_voc12aug/pspnet_r50-d8_512x512_40k_voc12aug_20200613_161222.log.json) | -| PSPNet | R-101-D8 | 512x512 | 40000 | - | - | 78.52 | 79.57 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_40k_voc12aug/pspnet_r101-d8_512x512_40k_voc12aug_20200613_161222-bc933b18.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_40k_voc12aug/pspnet_r101-d8_512x512_40k_voc12aug_20200613_161222.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| PSPNet | R-50-D8 | 512x512 | 20000 | 6.1 | 23.59 | V100 | 76.78 | 77.61 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_20k_voc12aug/pspnet_r50-d8_512x512_20k_voc12aug_20200617_101958-ed5dfbd9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_20k_voc12aug/pspnet_r50-d8_512x512_20k_voc12aug_20200617_101958.log.json) | +| PSPNet | R-101-D8 | 512x512 | 20000 | 9.6 | 15.02 | V100 | 78.47 | 79.25 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_20k_voc12aug/pspnet_r101-d8_512x512_20k_voc12aug_20200617_102003-4aef3c9a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_20k_voc12aug/pspnet_r101-d8_512x512_20k_voc12aug_20200617_102003.log.json) | +| PSPNet | R-50-D8 | 512x512 | 40000 | - | - | V100 | 77.29 | 78.48 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_40k_voc12aug/pspnet_r50-d8_512x512_40k_voc12aug_20200613_161222-ae9c1b8c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_40k_voc12aug/pspnet_r50-d8_512x512_40k_voc12aug_20200613_161222.log.json) | +| PSPNet | R-101-D8 | 512x512 | 40000 | - | - | V100 | 78.52 | 79.57 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_40k_voc12aug/pspnet_r101-d8_512x512_40k_voc12aug_20200613_161222-bc933b18.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_40k_voc12aug/pspnet_r101-d8_512x512_40k_voc12aug_20200613_161222.log.json) | ### Pascal Context -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| PSPNet | R-101-D8 | 480x480 | 40000 | 8.8 | 9.68 | 46.60 | 47.78 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-40k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_40k_pascal_context/pspnet_r101-d8_480x480_40k_pascal_context_20200911_211210-bf0f5d7c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_40k_pascal_context/pspnet_r101-d8_480x480_40k_pascal_context-20200911_211210.log.json) | -| PSPNet | R-101-D8 | 480x480 | 80000 | - | - | 46.03 | 47.15 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-80k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_80k_pascal_context/pspnet_r101-d8_480x480_80k_pascal_context_20200911_190530-c86d6233.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_80k_pascal_context/pspnet_r101-d8_480x480_80k_pascal_context-20200911_190530.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| PSPNet | R-101-D8 | 480x480 | 40000 | 8.8 | 9.68 | V100 | 46.60 | 47.78 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-40k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_40k_pascal_context/pspnet_r101-d8_480x480_40k_pascal_context_20200911_211210-bf0f5d7c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_40k_pascal_context/pspnet_r101-d8_480x480_40k_pascal_context-20200911_211210.log.json) | +| PSPNet | R-101-D8 | 480x480 | 80000 | - | - | V100 | 46.03 | 47.15 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-80k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_80k_pascal_context/pspnet_r101-d8_480x480_80k_pascal_context_20200911_190530-c86d6233.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_80k_pascal_context/pspnet_r101-d8_480x480_80k_pascal_context-20200911_190530.log.json) | ### Pascal Context 59 -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| PSPNet | R-101-D8 | 480x480 | 40000 | - | - | 52.02 | 53.54 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-40k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_40k_pascal_context_59/pspnet_r101-d8_480x480_40k_pascal_context_59_20210416_114524-86d44cd4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_40k_pascal_context_59/pspnet_r101-d8_480x480_40k_pascal_context_59-20210416_114524.log.json) | -| PSPNet | R-101-D8 | 480x480 | 80000 | - | - | 52.47 | 53.99 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-80k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_80k_pascal_context_59/pspnet_r101-d8_480x480_80k_pascal_context_59_20210416_114418-fa6caaa2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_80k_pascal_context_59/pspnet_r101-d8_480x480_80k_pascal_context_59-20210416_114418.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| PSPNet | R-101-D8 | 480x480 | 40000 | - | - | V100 | 52.02 | 53.54 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-40k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_40k_pascal_context_59/pspnet_r101-d8_480x480_40k_pascal_context_59_20210416_114524-86d44cd4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_40k_pascal_context_59/pspnet_r101-d8_480x480_40k_pascal_context_59-20210416_114524.log.json) | +| PSPNet | R-101-D8 | 480x480 | 80000 | - | - | V100 | 52.47 | 53.99 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-80k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_80k_pascal_context_59/pspnet_r101-d8_480x480_80k_pascal_context_59_20210416_114418-fa6caaa2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_80k_pascal_context_59/pspnet_r101-d8_480x480_80k_pascal_context_59-20210416_114418.log.json) | ### Dark Zurich and Nighttime Driving @@ -125,54 +105,54 @@ We support evaluation results on these two datasets using models above trained o ### COCO-Stuff 10k -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| PSPNet | R-50-D8 | 512x512 | 20000 | 9.6 | 20.5 | 35.69 | 36.62 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-20k_coco-stuff10k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_20k_coco-stuff10k/pspnet_r50-d8_512x512_4x4_20k_coco-stuff10k_20210820_203258-b88df27f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_20k_coco-stuff10k/pspnet_r50-d8_512x512_4x4_20k_coco-stuff10k_20210820_203258.log.json) | -| PSPNet | R-101-D8 | 512x512 | 20000 | 13.2 | 11.1 | 37.26 | 38.52 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-20k_coco-stuff10k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_20k_coco-stuff10k/pspnet_r101-d8_512x512_4x4_20k_coco-stuff10k_20210820_232135-76aae482.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_20k_coco-stuff10k/pspnet_r101-d8_512x512_4x4_20k_coco-stuff10k_20210820_232135.log.json) | -| PSPNet | R-50-D8 | 512x512 | 40000 | - | - | 36.33 | 37.24 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-40k_coco-stuff10k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_40k_coco-stuff10k/pspnet_r50-d8_512x512_4x4_40k_coco-stuff10k_20210821_030857-92e2902b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_40k_coco-stuff10k/pspnet_r50-d8_512x512_4x4_40k_coco-stuff10k_20210821_030857.log.json) | -| PSPNet | R-101-D8 | 512x512 | 40000 | - | - | 37.76 | 38.86 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-40k_coco-stuff10k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_40k_coco-stuff10k/pspnet_r101-d8_512x512_4x4_40k_coco-stuff10k_20210821_014022-831aec95.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_40k_coco-stuff10k/pspnet_r101-d8_512x512_4x4_40k_coco-stuff10k_20210821_014022.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| PSPNet | R-50-D8 | 512x512 | 20000 | 9.6 | 20.5 | V100 | 35.69 | 36.62 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-20k_coco-stuff10k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_20k_coco-stuff10k/pspnet_r50-d8_512x512_4x4_20k_coco-stuff10k_20210820_203258-b88df27f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_20k_coco-stuff10k/pspnet_r50-d8_512x512_4x4_20k_coco-stuff10k_20210820_203258.log.json) | +| PSPNet | R-101-D8 | 512x512 | 20000 | 13.2 | 11.1 | V100 | 37.26 | 38.52 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-20k_coco-stuff10k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_20k_coco-stuff10k/pspnet_r101-d8_512x512_4x4_20k_coco-stuff10k_20210820_232135-76aae482.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_20k_coco-stuff10k/pspnet_r101-d8_512x512_4x4_20k_coco-stuff10k_20210820_232135.log.json) | +| PSPNet | R-50-D8 | 512x512 | 40000 | - | - | V100 | 36.33 | 37.24 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-40k_coco-stuff10k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_40k_coco-stuff10k/pspnet_r50-d8_512x512_4x4_40k_coco-stuff10k_20210821_030857-92e2902b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_40k_coco-stuff10k/pspnet_r50-d8_512x512_4x4_40k_coco-stuff10k_20210821_030857.log.json) | +| PSPNet | R-101-D8 | 512x512 | 40000 | - | - | V100 | 37.76 | 38.86 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-40k_coco-stuff10k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_40k_coco-stuff10k/pspnet_r101-d8_512x512_4x4_40k_coco-stuff10k_20210821_014022-831aec95.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_40k_coco-stuff10k/pspnet_r101-d8_512x512_4x4_40k_coco-stuff10k_20210821_014022.log.json) | ### COCO-Stuff 164k -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| PSPNet | R-50-D8 | 512x512 | 80000 | 9.6 | 20.5 | 38.80 | 39.19 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-80k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_80k_coco-stuff164k/pspnet_r50-d8_512x512_4x4_80k_coco-stuff164k_20210707_152034-0e41b2db.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_80k_coco-stuff164k/pspnet_r50-d8_512x512_4x4_80k_coco-stuff164k_20210707_152034.log.json) | -| PSPNet | R-101-D8 | 512x512 | 80000 | 13.2 | 11.1 | 40.34 | 40.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-80k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_80k_coco-stuff164k/pspnet_r101-d8_512x512_4x4_80k_coco-stuff164k_20210707_152034-7eb41789.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_80k_coco-stuff164k/pspnet_r101-d8_512x512_4x4_80k_coco-stuff164k_20210707_152034.log.json) | -| PSPNet | R-50-D8 | 512x512 | 160000 | - | - | 39.64 | 39.97 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-160k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_160k_coco-stuff164k/pspnet_r50-d8_512x512_4x4_160k_coco-stuff164k_20210707_152004-51276a57.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_160k_coco-stuff164k/pspnet_r50-d8_512x512_4x4_160k_coco-stuff164k_20210707_152004.log.json) | -| PSPNet | R-101-D8 | 512x512 | 160000 | - | - | 41.28 | 41.66 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-160k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_160k_coco-stuff164k/pspnet_r101-d8_512x512_4x4_160k_coco-stuff164k_20210707_152004-4af9621b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_160k_coco-stuff164k/pspnet_r101-d8_512x512_4x4_160k_coco-stuff164k_20210707_152004.log.json) | -| PSPNet | R-50-D8 | 512x512 | 320000 | - | - | 40.53 | 40.75 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-320k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_320k_coco-stuff164k/pspnet_r50-d8_512x512_4x4_320k_coco-stuff164k_20210707_152004-be9610cc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_320k_coco-stuff164k/pspnet_r50-d8_512x512_4x4_320k_coco-stuff164k_20210707_152004.log.json) | -| PSPNet | R-101-D8 | 512x512 | 320000 | - | - | 41.95 | 42.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-320k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_320k_coco-stuff164k/pspnet_r101-d8_512x512_4x4_320k_coco-stuff164k_20210707_152004-72220c60.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_320k_coco-stuff164k/pspnet_r101-d8_512x512_4x4_320k_coco-stuff164k_20210707_152004.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| PSPNet | R-50-D8 | 512x512 | 80000 | 9.6 | 20.5 | V100 | 38.80 | 39.19 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-80k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_80k_coco-stuff164k/pspnet_r50-d8_512x512_4x4_80k_coco-stuff164k_20210707_152034-0e41b2db.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_80k_coco-stuff164k/pspnet_r50-d8_512x512_4x4_80k_coco-stuff164k_20210707_152034.log.json) | +| PSPNet | R-101-D8 | 512x512 | 80000 | 13.2 | 11.1 | V100 | 40.34 | 40.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-80k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_80k_coco-stuff164k/pspnet_r101-d8_512x512_4x4_80k_coco-stuff164k_20210707_152034-7eb41789.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_80k_coco-stuff164k/pspnet_r101-d8_512x512_4x4_80k_coco-stuff164k_20210707_152034.log.json) | +| PSPNet | R-50-D8 | 512x512 | 160000 | - | - | V100 | 39.64 | 39.97 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-160k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_160k_coco-stuff164k/pspnet_r50-d8_512x512_4x4_160k_coco-stuff164k_20210707_152004-51276a57.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_160k_coco-stuff164k/pspnet_r50-d8_512x512_4x4_160k_coco-stuff164k_20210707_152004.log.json) | +| PSPNet | R-101-D8 | 512x512 | 160000 | - | - | V100 | 41.28 | 41.66 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-160k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_160k_coco-stuff164k/pspnet_r101-d8_512x512_4x4_160k_coco-stuff164k_20210707_152004-4af9621b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_160k_coco-stuff164k/pspnet_r101-d8_512x512_4x4_160k_coco-stuff164k_20210707_152004.log.json) | +| PSPNet | R-50-D8 | 512x512 | 320000 | - | - | V100 | 40.53 | 40.75 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-320k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_320k_coco-stuff164k/pspnet_r50-d8_512x512_4x4_320k_coco-stuff164k_20210707_152004-be9610cc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_320k_coco-stuff164k/pspnet_r50-d8_512x512_4x4_320k_coco-stuff164k_20210707_152004.log.json) | +| PSPNet | R-101-D8 | 512x512 | 320000 | - | - | V100 | 41.95 | 42.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-320k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_320k_coco-stuff164k/pspnet_r101-d8_512x512_4x4_320k_coco-stuff164k_20210707_152004-72220c60.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_320k_coco-stuff164k/pspnet_r101-d8_512x512_4x4_320k_coco-stuff164k_20210707_152004.log.json) | ### LoveDA -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| PSPNet | R-18-D8 | 512x512 | 80000 | 1.45 | 26.87 | 48.62 | 47.57 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r18-d8_4xb4-80k_loveda-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_512x512_80k_loveda/pspnet_r18-d8_512x512_80k_loveda_20211105_052100-b97697f1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_512x512_80k_loveda/pspnet_r18-d8_512x512_80k_loveda_20211105_052100.log.json) | -| PSPNet | R-50-D8 | 512x512 | 80000 | 6.14 | 6.60 | 50.46 | 50.19 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-80k_loveda-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_80k_loveda/pspnet_r50-d8_512x512_80k_loveda_20211104_155728-88610f9f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_80k_loveda/pspnet_r50-d8_512x512_80k_loveda_20211104_155728.log.json) | -| PSPNet | R-101-D8 | 512x512 | 80000 | 9.61 | 4.58 | 51.86 | 51.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-80k_loveda-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_80k_loveda/pspnet_r101-d8_512x512_80k_loveda_20211104_153212-1c06c6a8.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_80k_loveda/pspnet_r101-d8_512x512_80k_loveda_20211104_153212.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| PSPNet | R-18-D8 | 512x512 | 80000 | 1.45 | 26.87 | V100 | 48.62 | 47.57 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r18-d8_4xb4-80k_loveda-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_512x512_80k_loveda/pspnet_r18-d8_512x512_80k_loveda_20211105_052100-b97697f1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_512x512_80k_loveda/pspnet_r18-d8_512x512_80k_loveda_20211105_052100.log.json) | +| PSPNet | R-50-D8 | 512x512 | 80000 | 6.14 | 6.60 | V100 | 50.46 | 50.19 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-80k_loveda-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_80k_loveda/pspnet_r50-d8_512x512_80k_loveda_20211104_155728-88610f9f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_80k_loveda/pspnet_r50-d8_512x512_80k_loveda_20211104_155728.log.json) | +| PSPNet | R-101-D8 | 512x512 | 80000 | 9.61 | 4.58 | V100 | 51.86 | 51.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-80k_loveda-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_80k_loveda/pspnet_r101-d8_512x512_80k_loveda_20211104_153212-1c06c6a8.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_80k_loveda/pspnet_r101-d8_512x512_80k_loveda_20211104_153212.log.json) | ### Potsdam -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| PSPNet | R-18-D8 | 512x512 | 80000 | 1.50 | 85.12 | 77.09 | 78.30 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r18-d8_4xb4-80k_potsdam-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_4x4_512x512_80k_potsdam/pspnet_r18-d8_4x4_512x512_80k_potsdam_20211220_125612-7cd046e1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_4x4_512x512_80k_potsdam/pspnet_r18-d8_4x4_512x512_80k_potsdam_20211220_125612.log.json) | -| PSPNet | R-50-D8 | 512x512 | 80000 | 6.14 | 30.21 | 78.12 | 78.98 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-80k_potsdam-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_4x4_512x512_80k_potsdam/pspnet_r50-d8_4x4_512x512_80k_potsdam_20211219_043541-2dd5fe67.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_4x4_512x512_80k_potsdam/pspnet_r50-d8_4x4_512x512_80k_potsdam_20211219_043541.log.json) | -| PSPNet | R-101-D8 | 512x512 | 80000 | 9.61 | 19.40 | 78.62 | 79.47 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-80k_potsdam-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_4x4_512x512_80k_potsdam/pspnet_r101-d8_4x4_512x512_80k_potsdam_20211220_125612-aed036c4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_4x4_512x512_80k_potsdam/pspnet_r101-d8_4x4_512x512_80k_potsdam_20211220_125612.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| PSPNet | R-18-D8 | 512x512 | 80000 | 1.50 | 85.12 | V100 | 77.09 | 78.30 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r18-d8_4xb4-80k_potsdam-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_4x4_512x512_80k_potsdam/pspnet_r18-d8_4x4_512x512_80k_potsdam_20211220_125612-7cd046e1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_4x4_512x512_80k_potsdam/pspnet_r18-d8_4x4_512x512_80k_potsdam_20211220_125612.log.json) | +| PSPNet | R-50-D8 | 512x512 | 80000 | 6.14 | 30.21 | V100 | 78.12 | 78.98 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-80k_potsdam-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_4x4_512x512_80k_potsdam/pspnet_r50-d8_4x4_512x512_80k_potsdam_20211219_043541-2dd5fe67.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_4x4_512x512_80k_potsdam/pspnet_r50-d8_4x4_512x512_80k_potsdam_20211219_043541.log.json) | +| PSPNet | R-101-D8 | 512x512 | 80000 | 9.61 | 19.40 | V100 | 78.62 | 79.47 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-80k_potsdam-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_4x4_512x512_80k_potsdam/pspnet_r101-d8_4x4_512x512_80k_potsdam_20211220_125612-aed036c4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_4x4_512x512_80k_potsdam/pspnet_r101-d8_4x4_512x512_80k_potsdam_20211220_125612.log.json) | ### Vaihingen -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| PSPNet | R-18-D8 | 512x512 | 80000 | 1.45 | 85.06 | 71.46 | 73.36 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r18-d8_4xb4-80k_vaihingen-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_4x4_512x512_80k_vaihingen/pspnet_r18-d8_4x4_512x512_80k_vaihingen_20211228_160355-52a8a6f6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_4x4_512x512_80k_vaihingen/pspnet_r18-d8_4x4_512x512_80k_vaihingen_20211228_160355.log.json) | -| PSPNet | R-50-D8 | 512x512 | 80000 | 6.14 | 30.29 | 72.36 | 73.75 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-80k_vaihingen-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_4x4_512x512_80k_vaihingen/pspnet_r50-d8_4x4_512x512_80k_vaihingen_20211228_160355-382f8f5b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_4x4_512x512_80k_vaihingen/pspnet_r50-d8_4x4_512x512_80k_vaihingen_20211228_160355.log.json) | -| PSPNet | R-101-D8 | 512x512 | 80000 | 9.61 | 19.97 | 72.61 | 74.18 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-80k_vaihingen-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_4x4_512x512_80k_vaihingen/pspnet_r101-d8_4x4_512x512_80k_vaihingen_20211231_230806-8eba0a09.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_4x4_512x512_80k_vaihingen/pspnet_r101-d8_4x4_512x512_80k_vaihingen_20211231_230806.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| PSPNet | R-18-D8 | 512x512 | 80000 | 1.45 | 85.06 | V100 | 71.46 | 73.36 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r18-d8_4xb4-80k_vaihingen-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_4x4_512x512_80k_vaihingen/pspnet_r18-d8_4x4_512x512_80k_vaihingen_20211228_160355-52a8a6f6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_4x4_512x512_80k_vaihingen/pspnet_r18-d8_4x4_512x512_80k_vaihingen_20211228_160355.log.json) | +| PSPNet | R-50-D8 | 512x512 | 80000 | 6.14 | 30.29 | V100 | 72.36 | 73.75 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-80k_vaihingen-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_4x4_512x512_80k_vaihingen/pspnet_r50-d8_4x4_512x512_80k_vaihingen_20211228_160355-382f8f5b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_4x4_512x512_80k_vaihingen/pspnet_r50-d8_4x4_512x512_80k_vaihingen_20211228_160355.log.json) | +| PSPNet | R-101-D8 | 512x512 | 80000 | 9.61 | 19.97 | V100 | 72.61 | 74.18 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-80k_vaihingen-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_4x4_512x512_80k_vaihingen/pspnet_r101-d8_4x4_512x512_80k_vaihingen_20211231_230806-8eba0a09.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_4x4_512x512_80k_vaihingen/pspnet_r101-d8_4x4_512x512_80k_vaihingen_20211231_230806.log.json) | ### iSAID -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| PSPNet | R-18-D8 | 896x896 | 80000 | 4.52 | 26.91 | 60.22 | 61.25 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r18-d8_4xb4-80k_isaid-896x896.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_4x4_896x896_80k_isaid/pspnet_r18-d8_4x4_896x896_80k_isaid_20220110_180526-e84c0b6a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_4x4_896x896_80k_isaid/pspnet_r18-d8_4x4_896x896_80k_isaid_20220110_180526.log.json) | -| PSPNet | R-50-D8 | 896x896 | 80000 | 16.58 | 8.88 | 65.36 | 66.48 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-80k_isaid-896x896.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_4x4_896x896_80k_isaid/pspnet_r50-d8_4x4_896x896_80k_isaid_20220110_180629-1f21dc32.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_4x4_896x896_80k_isaid/pspnet_r50-d8_4x4_896x896_80k_isaid_20220110_180629.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| PSPNet | R-18-D8 | 896x896 | 80000 | 4.52 | 26.91 | V100 | 60.22 | 61.25 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r18-d8_4xb4-80k_isaid-896x896.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_4x4_896x896_80k_isaid/pspnet_r18-d8_4x4_896x896_80k_isaid_20220110_180526-e84c0b6a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_4x4_896x896_80k_isaid/pspnet_r18-d8_4x4_896x896_80k_isaid_20220110_180526.log.json) | +| PSPNet | R-50-D8 | 896x896 | 80000 | 16.58 | 8.88 | V100 | 65.36 | 66.48 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-80k_isaid-896x896.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_4x4_896x896_80k_isaid/pspnet_r50-d8_4x4_896x896_80k_isaid_20220110_180629-1f21dc32.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_4x4_896x896_80k_isaid/pspnet_r50-d8_4x4_896x896_80k_isaid_20220110_180629.log.json) | Note: @@ -180,3 +160,23 @@ Note: - `896x896` is the Crop Size of iSAID dataset, which is followed by the implementation of [PointFlow: Flowing Semantics Through Points for Aerial Image Segmentation](https://arxiv.org/pdf/2103.06564.pdf) - `rsb` is short for 'Resnet strikes back'. - The `b` in `R-50b` means ResNetV1b, which is a standard ResNet backbone. In MMSegmentation, default backbone is ResNetV1c, which usually performs better in semantic segmentation task. + +## Citation + +```bibtex +@inproceedings{zhao2017pspnet, + title={Pyramid Scene Parsing Network}, + author={Zhao, Hengshuang and Shi, Jianping and Qi, Xiaojuan and Wang, Xiaogang and Jia, Jiaya}, + booktitle={CVPR}, + year={2017} +} +``` + +```bibtex +@article{wightman2021resnet, + title={Resnet strikes back: An improved training procedure in timm}, + author={Wightman, Ross and Touvron, Hugo and J{\'e}gou, Herv{\'e}}, + journal={arXiv preprint arXiv:2110.00476}, + year={2021} +} +``` diff --git a/configs/pspnet/metafile.yaml b/configs/pspnet/metafile.yaml new file mode 100644 index 0000000000..d00b89d5cf --- /dev/null +++ b/configs/pspnet/metafile.yaml @@ -0,0 +1,1303 @@ +Collections: +- Name: PSPNet + License: Apache License 2.0 + Metadata: + Training Data: + - Cityscapes + - ADE20K + - Pascal VOC 2012 + Aug + - Pascal Context + - Pascal Context 59 + - Dark Zurich and Nighttime Driving + - COCO-Stuff 10k + - COCO-Stuff 164k + - LoveDA + - Potsdam + - Vaihingen + - iSAID + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + README: configs/pspnet/README.md + Frameworks: + - PyTorch +Models: +- Name: pspnet_r50-d8_4xb2-40k_cityscapes-512x1024 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 77.85 + mIoU(ms+flip): 79.18 + Config: configs/pspnet/pspnet_r50-d8_4xb2-40k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 6.1 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r101-d8_4xb2-40k_cityscapes-512x1024 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.34 + mIoU(ms+flip): 79.74 + Config: configs/pspnet/pspnet_r101-d8_4xb2-40k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 9.6 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_40k_cityscapes/pspnet_r101-d8_512x1024_40k_cityscapes_20200604_232751-467e7cf4.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_40k_cityscapes/pspnet_r101-d8_512x1024_40k_cityscapes_20200604_232751.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r50-d8_4xb2-40k_cityscapes-769x769 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.26 + mIoU(ms+flip): 79.88 + Config: configs/pspnet/pspnet_r50-d8_4xb2-40k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 6.9 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_769x769_40k_cityscapes/pspnet_r50-d8_769x769_40k_cityscapes_20200606_112725-86638686.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_769x769_40k_cityscapes/pspnet_r50-d8_769x769_40k_cityscapes_20200606_112725.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r101-d8_4xb2-40k_cityscapes-769x769 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.08 + mIoU(ms+flip): 80.28 + Config: configs/pspnet/pspnet_r101-d8_4xb2-40k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 10.9 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_769x769_40k_cityscapes/pspnet_r101-d8_769x769_40k_cityscapes_20200606_112753-61c6f5be.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_769x769_40k_cityscapes/pspnet_r101-d8_769x769_40k_cityscapes_20200606_112753.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r18-d8_4xb2-80k_cityscapes-512x1024 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 74.87 + mIoU(ms+flip): 76.04 + Config: configs/pspnet/pspnet_r18-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-18-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 1.7 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_512x1024_80k_cityscapes/pspnet_r18-d8_512x1024_80k_cityscapes_20201225_021458-09ffa746.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_512x1024_80k_cityscapes/pspnet_r18-d8_512x1024_80k_cityscapes-20201225_021458.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r50-d8_4xb2-80k_cityscapes-512x1024 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.55 + mIoU(ms+flip): 79.79 + Config: configs/pspnet/pspnet_r50-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_80k_cityscapes/pspnet_r50-d8_512x1024_80k_cityscapes_20200606_112131-2376f12b.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_80k_cityscapes/pspnet_r50-d8_512x1024_80k_cityscapes_20200606_112131.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r50-d8-rsb_4xb2-adamw-80k_cityscapes-512x1024 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.47 + mIoU(ms+flip): 79.45 + Config: configs/pspnet/pspnet_r50-d8-rsb_4xb2-adamw-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50b-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 6.2 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_80k_cityscapes/pspnet_r50-d8_rsb-pretrain_512x1024_adamw_80k_cityscapes_20220315_123238-588c30be.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_80k_cityscapes/pspnet_r50-d8_rsb-pretrain_512x1024_adamw_80k_cityscapes_20220315_123238.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r101-d8_4xb2-80k_cityscapes-512x1024 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.76 + mIoU(ms+flip): 81.01 + Config: configs/pspnet/pspnet_r101-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_80k_cityscapes/pspnet_r101-d8_512x1024_80k_cityscapes_20200606_112211-e1e1100f.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_80k_cityscapes/pspnet_r101-d8_512x1024_80k_cityscapes_20200606_112211.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r101-d8_4xb2-amp-80k_cityscapes-512x1024 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.46 + Config: configs/pspnet/pspnet_r101-d8_4xb2-amp-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - PSPNet + - (FP16) + Training Resources: 4x V100 GPUS + Memory (GB): 5.34 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_fp16_512x1024_80k_cityscapes/pspnet_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230919-a0875e5c.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_fp16_512x1024_80k_cityscapes/pspnet_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230919.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r18-d8_4xb2-80k_cityscapes-769x769 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 75.9 + mIoU(ms+flip): 77.86 + Config: configs/pspnet/pspnet_r18-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-18-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 1.9 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_769x769_80k_cityscapes/pspnet_r18-d8_769x769_80k_cityscapes_20201225_021458-3deefc62.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_769x769_80k_cityscapes/pspnet_r18-d8_769x769_80k_cityscapes-20201225_021458.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r50-d8_4xb2-80k_cityscapes-769x769 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.59 + mIoU(ms+flip): 80.69 + Config: configs/pspnet/pspnet_r50-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_769x769_80k_cityscapes/pspnet_r50-d8_769x769_80k_cityscapes_20200606_210121-5ccf03dd.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_769x769_80k_cityscapes/pspnet_r50-d8_769x769_80k_cityscapes_20200606_210121.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r101-d8_4xb2-80k_cityscapes-769x769 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.77 + mIoU(ms+flip): 81.06 + Config: configs/pspnet/pspnet_r101-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Weights: https://download.oz1z1penmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_769x769_80k_cityscapes/pspnet_r101-d8_769x769_80k_cityscapes_20200606_225055-dba412fa.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_769x769_80k_cityscapes/pspnet_r101-d8_769x769_80k_cityscapes_20200606_225055.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r18b-d8_4xb2-80k_cityscapes-512x1024 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 74.23 + mIoU(ms+flip): 75.79 + Config: configs/pspnet/pspnet_r18b-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-18b-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 1.5 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18b-d8_512x1024_80k_cityscapes/pspnet_r18b-d8_512x1024_80k_cityscapes_20201226_063116-26928a60.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18b-d8_512x1024_80k_cityscapes/pspnet_r18b-d8_512x1024_80k_cityscapes-20201226_063116.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r50b-d8_4xb2-80k_cityscapes-512x1024 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.22 + mIoU(ms+flip): 79.46 + Config: configs/pspnet/pspnet_r50b-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50b-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 6.0 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50b-d8_512x1024_80k_cityscapes/pspnet_r50b-d8_512x1024_80k_cityscapes_20201225_094315-6344287a.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50b-d8_512x1024_80k_cityscapes/pspnet_r50b-d8_512x1024_80k_cityscapes-20201225_094315.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r101b-d8_4xb2-80k_cityscapes-512x1024 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.69 + mIoU(ms+flip): 80.79 + Config: configs/pspnet/pspnet_r101b-d8_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101b-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 9.5 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101b-d8_512x1024_80k_cityscapes/pspnet_r101b-d8_512x1024_80k_cityscapes_20201226_170012-3a4d38ab.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101b-d8_512x1024_80k_cityscapes/pspnet_r101b-d8_512x1024_80k_cityscapes-20201226_170012.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r18b-d8_4xb2-80k_cityscapes-769x769 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 74.92 + mIoU(ms+flip): 76.9 + Config: configs/pspnet/pspnet_r18b-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-18b-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 1.7 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18b-d8_769x769_80k_cityscapes/pspnet_r18b-d8_769x769_80k_cityscapes_20201226_080942-bf98d186.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18b-d8_769x769_80k_cityscapes/pspnet_r18b-d8_769x769_80k_cityscapes-20201226_080942.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r50b-d8_4xb2-80k_cityscapes-769x769 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.5 + mIoU(ms+flip): 79.96 + Config: configs/pspnet/pspnet_r50b-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50b-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 6.8 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50b-d8_769x769_80k_cityscapes/pspnet_r50b-d8_769x769_80k_cityscapes_20201225_094316-4c643cf6.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50b-d8_769x769_80k_cityscapes/pspnet_r50b-d8_769x769_80k_cityscapes-20201225_094316.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r101b-d8_4xb2-80k_cityscapes-769x769 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.87 + mIoU(ms+flip): 80.04 + Config: configs/pspnet/pspnet_r101b-d8_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101b-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 10.8 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101b-d8_769x769_80k_cityscapes/pspnet_r101b-d8_769x769_80k_cityscapes_20201226_171823-f0e7c293.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101b-d8_769x769_80k_cityscapes/pspnet_r101b-d8_769x769_80k_cityscapes-20201226_171823.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r50b-d32_4xb2-80k_cityscapes-512x1024 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 73.88 + mIoU(ms+flip): 76.85 + Config: configs/pspnet/pspnet_r50b-d32_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50-D32 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 3.0 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d32_512x1024_80k_cityscapes/pspnet_r50-d32_512x1024_80k_cityscapes_20220316_224840-9092b254.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d32_512x1024_80k_cityscapes/pspnet_r50-d32_512x1024_80k_cityscapes_20220316_224840.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r50-d32_rsb_4xb2-adamw-80k_cityscapes-512x1024 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 74.09 + mIoU(ms+flip): 77.18 + Config: configs/pspnet/pspnet_r50-d32_rsb_4xb2-adamw-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50b-D32 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 3.1 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d32_rsb-pretrain_512x1024_adamw_80k_cityscapes/pspnet_r50-d32_rsb-pretrain_512x1024_adamw_80k_cityscapes_20220316_141229-dd9c9610.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d32_rsb-pretrain_512x1024_adamw_80k_cityscapes/pspnet_r50-d32_rsb-pretrain_512x1024_adamw_80k_cityscapes_20220316_141229.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r50b-d32_4xb2-80k_cityscapes-512x1024 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 72.61 + mIoU(ms+flip): 75.51 + Config: configs/pspnet/pspnet_r50b-d32_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50b-D32 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 2.9 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50b-d32_512x1024_80k_cityscapes/pspnet_r50b-d32_512x1024_80k_cityscapes_20220311_152152-23bcaf8c.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50b-d32_512x1024_80k_cityscapes/pspnet_r50b-d32_512x1024_80k_cityscapes_20220311_152152.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r50-d8_4xb4-80k_ade20k-512x512 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 41.13 + mIoU(ms+flip): 41.94 + Config: configs/pspnet/pspnet_r50-d8_4xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 8.5 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_80k_ade20k/pspnet_r50-d8_512x512_80k_ade20k_20200615_014128-15a8b914.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_80k_ade20k/pspnet_r50-d8_512x512_80k_ade20k_20200615_014128.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r101-d8_4xb4-80k_ade20k-512x512 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 43.57 + mIoU(ms+flip): 44.35 + Config: configs/pspnet/pspnet_r101-d8_4xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-101-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 12.0 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_80k_ade20k/pspnet_r101-d8_512x512_80k_ade20k_20200614_031423-b6e782f0.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_80k_ade20k/pspnet_r101-d8_512x512_80k_ade20k_20200614_031423.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r50-d8_4xb4-160k_ade20k-512x512 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 42.48 + mIoU(ms+flip): 43.44 + Config: configs/pspnet/pspnet_r50-d8_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_160k_ade20k/pspnet_r50-d8_512x512_160k_ade20k_20200615_184358-1890b0bd.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_160k_ade20k/pspnet_r50-d8_512x512_160k_ade20k_20200615_184358.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r101-d8_4xb4-160k_ade20k-512x512 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 44.39 + mIoU(ms+flip): 45.35 + Config: configs/pspnet/pspnet_r101-d8_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-101-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_160k_ade20k/pspnet_r101-d8_512x512_160k_ade20k_20200615_100650-967c316f.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_160k_ade20k/pspnet_r101-d8_512x512_160k_ade20k_20200615_100650.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r50-d8_4xb4-20k_voc12aug-512x512 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 76.78 + mIoU(ms+flip): 77.61 + Config: configs/pspnet/pspnet_r50-d8_4xb4-20k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - R-50-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 6.1 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_20k_voc12aug/pspnet_r50-d8_512x512_20k_voc12aug_20200617_101958-ed5dfbd9.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_20k_voc12aug/pspnet_r50-d8_512x512_20k_voc12aug_20200617_101958.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r101-d8_4xb4-20k_voc12aug-512x512 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 78.47 + mIoU(ms+flip): 79.25 + Config: configs/pspnet/pspnet_r101-d8_4xb4-20k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - R-101-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 9.6 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_20k_voc12aug/pspnet_r101-d8_512x512_20k_voc12aug_20200617_102003-4aef3c9a.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_20k_voc12aug/pspnet_r101-d8_512x512_20k_voc12aug_20200617_102003.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r50-d8_4xb4-40k_voc12aug-512x512 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 77.29 + mIoU(ms+flip): 78.48 + Config: configs/pspnet/pspnet_r50-d8_4xb4-40k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - R-50-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_40k_voc12aug/pspnet_r50-d8_512x512_40k_voc12aug_20200613_161222-ae9c1b8c.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_40k_voc12aug/pspnet_r50-d8_512x512_40k_voc12aug_20200613_161222.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r101-d8_4xb4-40k_voc12aug-512x512 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 78.52 + mIoU(ms+flip): 79.57 + Config: configs/pspnet/pspnet_r101-d8_4xb4-40k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - R-101-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_40k_voc12aug/pspnet_r101-d8_512x512_40k_voc12aug_20200613_161222-bc933b18.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_40k_voc12aug/pspnet_r101-d8_512x512_40k_voc12aug_20200613_161222.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r101-d8_4xb4-40k_pascal-context-480x480 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: Pascal Context + Metrics: + mIoU: 46.6 + mIoU(ms+flip): 47.78 + Config: configs/pspnet/pspnet_r101-d8_4xb4-40k_pascal-context-480x480.py + Metadata: + Training Data: Pascal Context + Batch Size: 16 + Architecture: + - R-101-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 8.8 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_40k_pascal_context/pspnet_r101-d8_480x480_40k_pascal_context_20200911_211210-bf0f5d7c.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_40k_pascal_context/pspnet_r101-d8_480x480_40k_pascal_context-20200911_211210.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r101-d8_4xb4-80k_pascal-context-480x480 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: Pascal Context + Metrics: + mIoU: 46.03 + mIoU(ms+flip): 47.15 + Config: configs/pspnet/pspnet_r101-d8_4xb4-80k_pascal-context-480x480.py + Metadata: + Training Data: Pascal Context + Batch Size: 16 + Architecture: + - R-101-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_80k_pascal_context/pspnet_r101-d8_480x480_80k_pascal_context_20200911_190530-c86d6233.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_80k_pascal_context/pspnet_r101-d8_480x480_80k_pascal_context-20200911_190530.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r101-d8_4xb4-40k_pascal-context-59-480x480 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: Pascal Context 59 + Metrics: + mIoU: 52.02 + mIoU(ms+flip): 53.54 + Config: configs/pspnet/pspnet_r101-d8_4xb4-40k_pascal-context-59-480x480.py + Metadata: + Training Data: Pascal Context 59 + Batch Size: 16 + Architecture: + - R-101-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_40k_pascal_context_59/pspnet_r101-d8_480x480_40k_pascal_context_59_20210416_114524-86d44cd4.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_40k_pascal_context_59/pspnet_r101-d8_480x480_40k_pascal_context_59-20210416_114524.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r101-d8_4xb4-80k_pascal-context-59-480x480 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: Pascal Context 59 + Metrics: + mIoU: 52.47 + mIoU(ms+flip): 53.99 + Config: configs/pspnet/pspnet_r101-d8_4xb4-80k_pascal-context-59-480x480.py + Metadata: + Training Data: Pascal Context 59 + Batch Size: 16 + Architecture: + - R-101-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_80k_pascal_context_59/pspnet_r101-d8_480x480_80k_pascal_context_59_20210416_114418-fa6caaa2.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_80k_pascal_context_59/pspnet_r101-d8_480x480_80k_pascal_context_59-20210416_114418.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r50-d8_4xb4-20k_coco-stuff10k-512x512 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: COCO-Stuff 10k + Metrics: + mIoU: 35.69 + mIoU(ms+flip): 36.62 + Config: configs/pspnet/pspnet_r50-d8_4xb4-20k_coco-stuff10k-512x512.py + Metadata: + Training Data: COCO-Stuff 10k + Batch Size: 16 + Architecture: + - R-50-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 9.6 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_20k_coco-stuff10k/pspnet_r50-d8_512x512_4x4_20k_coco-stuff10k_20210820_203258-b88df27f.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_20k_coco-stuff10k/pspnet_r50-d8_512x512_4x4_20k_coco-stuff10k_20210820_203258.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r101-d8_4xb4-20k_coco-stuff10k-512x512 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: COCO-Stuff 10k + Metrics: + mIoU: 37.26 + mIoU(ms+flip): 38.52 + Config: configs/pspnet/pspnet_r101-d8_4xb4-20k_coco-stuff10k-512x512.py + Metadata: + Training Data: COCO-Stuff 10k + Batch Size: 16 + Architecture: + - R-101-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 13.2 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_20k_coco-stuff10k/pspnet_r101-d8_512x512_4x4_20k_coco-stuff10k_20210820_232135-76aae482.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_20k_coco-stuff10k/pspnet_r101-d8_512x512_4x4_20k_coco-stuff10k_20210820_232135.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r50-d8_4xb4-40k_coco-stuff10k-512x512 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: COCO-Stuff 10k + Metrics: + mIoU: 36.33 + mIoU(ms+flip): 37.24 + Config: configs/pspnet/pspnet_r50-d8_4xb4-40k_coco-stuff10k-512x512.py + Metadata: + Training Data: COCO-Stuff 10k + Batch Size: 16 + Architecture: + - R-50-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_40k_coco-stuff10k/pspnet_r50-d8_512x512_4x4_40k_coco-stuff10k_20210821_030857-92e2902b.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_40k_coco-stuff10k/pspnet_r50-d8_512x512_4x4_40k_coco-stuff10k_20210821_030857.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r101-d8_4xb4-40k_coco-stuff10k-512x512 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: COCO-Stuff 10k + Metrics: + mIoU: 37.76 + mIoU(ms+flip): 38.86 + Config: configs/pspnet/pspnet_r101-d8_4xb4-40k_coco-stuff10k-512x512.py + Metadata: + Training Data: COCO-Stuff 10k + Batch Size: 16 + Architecture: + - R-101-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_40k_coco-stuff10k/pspnet_r101-d8_512x512_4x4_40k_coco-stuff10k_20210821_014022-831aec95.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_40k_coco-stuff10k/pspnet_r101-d8_512x512_4x4_40k_coco-stuff10k_20210821_014022.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r50-d8_4xb4-80k_coco-stuff164k-512x512 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: COCO-Stuff 164k + Metrics: + mIoU: 38.8 + mIoU(ms+flip): 39.19 + Config: configs/pspnet/pspnet_r50-d8_4xb4-80k_coco-stuff164k-512x512.py + Metadata: + Training Data: COCO-Stuff 164k + Batch Size: 16 + Architecture: + - R-50-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 9.6 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_80k_coco-stuff164k/pspnet_r50-d8_512x512_4x4_80k_coco-stuff164k_20210707_152034-0e41b2db.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_80k_coco-stuff164k/pspnet_r50-d8_512x512_4x4_80k_coco-stuff164k_20210707_152034.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r101-d8_4xb4-80k_coco-stuff164k-512x512 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: COCO-Stuff 164k + Metrics: + mIoU: 40.34 + mIoU(ms+flip): 40.79 + Config: configs/pspnet/pspnet_r101-d8_4xb4-80k_coco-stuff164k-512x512.py + Metadata: + Training Data: COCO-Stuff 164k + Batch Size: 16 + Architecture: + - R-101-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 13.2 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_80k_coco-stuff164k/pspnet_r101-d8_512x512_4x4_80k_coco-stuff164k_20210707_152034-7eb41789.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_80k_coco-stuff164k/pspnet_r101-d8_512x512_4x4_80k_coco-stuff164k_20210707_152034.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r50-d8_4xb4-160k_coco-stuff164k-512x512 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: COCO-Stuff 164k + Metrics: + mIoU: 39.64 + mIoU(ms+flip): 39.97 + Config: configs/pspnet/pspnet_r50-d8_4xb4-160k_coco-stuff164k-512x512.py + Metadata: + Training Data: COCO-Stuff 164k + Batch Size: 16 + Architecture: + - R-50-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_160k_coco-stuff164k/pspnet_r50-d8_512x512_4x4_160k_coco-stuff164k_20210707_152004-51276a57.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_160k_coco-stuff164k/pspnet_r50-d8_512x512_4x4_160k_coco-stuff164k_20210707_152004.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r101-d8_4xb4-160k_coco-stuff164k-512x512 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: COCO-Stuff 164k + Metrics: + mIoU: 41.28 + mIoU(ms+flip): 41.66 + Config: configs/pspnet/pspnet_r101-d8_4xb4-160k_coco-stuff164k-512x512.py + Metadata: + Training Data: COCO-Stuff 164k + Batch Size: 16 + Architecture: + - R-101-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_160k_coco-stuff164k/pspnet_r101-d8_512x512_4x4_160k_coco-stuff164k_20210707_152004-4af9621b.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_160k_coco-stuff164k/pspnet_r101-d8_512x512_4x4_160k_coco-stuff164k_20210707_152004.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r50-d8_4xb4-320k_coco-stuff164k-512x512 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: COCO-Stuff 164k + Metrics: + mIoU: 40.53 + mIoU(ms+flip): 40.75 + Config: configs/pspnet/pspnet_r50-d8_4xb4-320k_coco-stuff164k-512x512.py + Metadata: + Training Data: COCO-Stuff 164k + Batch Size: 16 + Architecture: + - R-50-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_320k_coco-stuff164k/pspnet_r50-d8_512x512_4x4_320k_coco-stuff164k_20210707_152004-be9610cc.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_320k_coco-stuff164k/pspnet_r50-d8_512x512_4x4_320k_coco-stuff164k_20210707_152004.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r101-d8_4xb4-320k_coco-stuff164k-512x512 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: COCO-Stuff 164k + Metrics: + mIoU: 41.95 + mIoU(ms+flip): 42.42 + Config: configs/pspnet/pspnet_r101-d8_4xb4-320k_coco-stuff164k-512x512.py + Metadata: + Training Data: COCO-Stuff 164k + Batch Size: 16 + Architecture: + - R-101-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_320k_coco-stuff164k/pspnet_r101-d8_512x512_4x4_320k_coco-stuff164k_20210707_152004-72220c60.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_320k_coco-stuff164k/pspnet_r101-d8_512x512_4x4_320k_coco-stuff164k_20210707_152004.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r18-d8_4xb4-80k_loveda-512x512 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: LoveDA + Metrics: + mIoU: 48.62 + mIoU(ms+flip): 47.57 + Config: configs/pspnet/pspnet_r18-d8_4xb4-80k_loveda-512x512.py + Metadata: + Training Data: LoveDA + Batch Size: 16 + Architecture: + - R-18-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 1.45 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_512x512_80k_loveda/pspnet_r18-d8_512x512_80k_loveda_20211105_052100-b97697f1.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_512x512_80k_loveda/pspnet_r18-d8_512x512_80k_loveda_20211105_052100.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r50-d8_4xb4-80k_loveda-512x512 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: LoveDA + Metrics: + mIoU: 50.46 + mIoU(ms+flip): 50.19 + Config: configs/pspnet/pspnet_r50-d8_4xb4-80k_loveda-512x512.py + Metadata: + Training Data: LoveDA + Batch Size: 16 + Architecture: + - R-50-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 6.14 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_80k_loveda/pspnet_r50-d8_512x512_80k_loveda_20211104_155728-88610f9f.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_80k_loveda/pspnet_r50-d8_512x512_80k_loveda_20211104_155728.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r101-d8_4xb4-80k_loveda-512x512 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: LoveDA + Metrics: + mIoU: 51.86 + mIoU(ms+flip): 51.34 + Config: configs/pspnet/pspnet_r101-d8_4xb4-80k_loveda-512x512.py + Metadata: + Training Data: LoveDA + Batch Size: 16 + Architecture: + - R-101-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 9.61 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_80k_loveda/pspnet_r101-d8_512x512_80k_loveda_20211104_153212-1c06c6a8.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_80k_loveda/pspnet_r101-d8_512x512_80k_loveda_20211104_153212.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r18-d8_4xb4-80k_potsdam-512x512 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: Potsdam + Metrics: + mIoU: 77.09 + mIoU(ms+flip): 78.3 + Config: configs/pspnet/pspnet_r18-d8_4xb4-80k_potsdam-512x512.py + Metadata: + Training Data: Potsdam + Batch Size: 16 + Architecture: + - R-18-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 1.5 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_4x4_512x512_80k_potsdam/pspnet_r18-d8_4x4_512x512_80k_potsdam_20211220_125612-7cd046e1.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_4x4_512x512_80k_potsdam/pspnet_r18-d8_4x4_512x512_80k_potsdam_20211220_125612.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r50-d8_4xb4-80k_potsdam-512x512 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: Potsdam + Metrics: + mIoU: 78.12 + mIoU(ms+flip): 78.98 + Config: configs/pspnet/pspnet_r50-d8_4xb4-80k_potsdam-512x512.py + Metadata: + Training Data: Potsdam + Batch Size: 16 + Architecture: + - R-50-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 6.14 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_4x4_512x512_80k_potsdam/pspnet_r50-d8_4x4_512x512_80k_potsdam_20211219_043541-2dd5fe67.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_4x4_512x512_80k_potsdam/pspnet_r50-d8_4x4_512x512_80k_potsdam_20211219_043541.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r101-d8_4xb4-80k_potsdam-512x512 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: Potsdam + Metrics: + mIoU: 78.62 + mIoU(ms+flip): 79.47 + Config: configs/pspnet/pspnet_r101-d8_4xb4-80k_potsdam-512x512.py + Metadata: + Training Data: Potsdam + Batch Size: 16 + Architecture: + - R-101-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 9.61 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_4x4_512x512_80k_potsdam/pspnet_r101-d8_4x4_512x512_80k_potsdam_20211220_125612-aed036c4.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_4x4_512x512_80k_potsdam/pspnet_r101-d8_4x4_512x512_80k_potsdam_20211220_125612.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r18-d8_4xb4-80k_vaihingen-512x512 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: Vaihingen + Metrics: + mIoU: 71.46 + mIoU(ms+flip): 73.36 + Config: configs/pspnet/pspnet_r18-d8_4xb4-80k_vaihingen-512x512.py + Metadata: + Training Data: Vaihingen + Batch Size: 16 + Architecture: + - R-18-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 1.45 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_4x4_512x512_80k_vaihingen/pspnet_r18-d8_4x4_512x512_80k_vaihingen_20211228_160355-52a8a6f6.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_4x4_512x512_80k_vaihingen/pspnet_r18-d8_4x4_512x512_80k_vaihingen_20211228_160355.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r50-d8_4xb4-80k_vaihingen-512x512 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: Vaihingen + Metrics: + mIoU: 72.36 + mIoU(ms+flip): 73.75 + Config: configs/pspnet/pspnet_r50-d8_4xb4-80k_vaihingen-512x512.py + Metadata: + Training Data: Vaihingen + Batch Size: 16 + Architecture: + - R-50-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 6.14 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_4x4_512x512_80k_vaihingen/pspnet_r50-d8_4x4_512x512_80k_vaihingen_20211228_160355-382f8f5b.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_4x4_512x512_80k_vaihingen/pspnet_r50-d8_4x4_512x512_80k_vaihingen_20211228_160355.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r101-d8_4xb4-80k_vaihingen-512x512 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: Vaihingen + Metrics: + mIoU: 72.61 + mIoU(ms+flip): 74.18 + Config: configs/pspnet/pspnet_r101-d8_4xb4-80k_vaihingen-512x512.py + Metadata: + Training Data: Vaihingen + Batch Size: 16 + Architecture: + - R-101-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 9.61 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_4x4_512x512_80k_vaihingen/pspnet_r101-d8_4x4_512x512_80k_vaihingen_20211231_230806-8eba0a09.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_4x4_512x512_80k_vaihingen/pspnet_r101-d8_4x4_512x512_80k_vaihingen_20211231_230806.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r18-d8_4xb4-80k_isaid-896x896 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: iSAID + Metrics: + mIoU: 60.22 + mIoU(ms+flip): 61.25 + Config: configs/pspnet/pspnet_r18-d8_4xb4-80k_isaid-896x896.py + Metadata: + Training Data: iSAID + Batch Size: 16 + Architecture: + - R-18-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 4.52 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_4x4_896x896_80k_isaid/pspnet_r18-d8_4x4_896x896_80k_isaid_20220110_180526-e84c0b6a.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_4x4_896x896_80k_isaid/pspnet_r18-d8_4x4_896x896_80k_isaid_20220110_180526.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch +- Name: pspnet_r50-d8_4xb4-80k_isaid-896x896 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: iSAID + Metrics: + mIoU: 65.36 + mIoU(ms+flip): 66.48 + Config: configs/pspnet/pspnet_r50-d8_4xb4-80k_isaid-896x896.py + Metadata: + Training Data: iSAID + Batch Size: 16 + Architecture: + - R-50-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 16.58 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_4x4_896x896_80k_isaid/pspnet_r50-d8_4x4_896x896_80k_isaid_20220110_180629-1f21dc32.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_4x4_896x896_80k_isaid/pspnet_r50-d8_4x4_896x896_80k_isaid_20220110_180629.log.json + Paper: + Title: Pyramid Scene Parsing Network + URL: https://arxiv.org/abs/1612.01105 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 + Framework: PyTorch diff --git a/configs/pspnet/pspnet.yml b/configs/pspnet/pspnet.yml deleted file mode 100644 index 7f811efd0f..0000000000 --- a/configs/pspnet/pspnet.yml +++ /dev/null @@ -1,1077 +0,0 @@ -Collections: -- Name: PSPNet - Metadata: - Training Data: - - Cityscapes - - ADE20K - - Pascal VOC 2012 + Aug - - Pascal Context - - Pascal Context 59 - - Dark Zurich and Nighttime Driving - - COCO-Stuff 10k - - COCO-Stuff 164k - - LoveDA - - Potsdam - - Vaihingen - - iSAID - Paper: - URL: https://arxiv.org/abs/1612.01105 - Title: Pyramid Scene Parsing Network - README: configs/pspnet/README.md - Code: - URL: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/psp_head.py#L63 - Version: v0.17.0 - Converted From: - Code: https://github.com/hszhao/PSPNet -Models: -- Name: pspnet_r50-d8_4xb2-40k_cityscapes-512x1024 - In Collection: PSPNet - Metadata: - backbone: R-50-D8 - crop size: (512,1024) - lr schd: 40000 - inference time (ms/im): - - value: 245.7 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 6.1 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 77.85 - mIoU(ms+flip): 79.18 - Config: configs/pspnet/pspnet_r50-d8_4xb2-40k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth -- Name: pspnet_r101-d8_4xb2-40k_cityscapes-512x1024 - In Collection: PSPNet - Metadata: - backbone: R-101-D8 - crop size: (512,1024) - lr schd: 40000 - inference time (ms/im): - - value: 373.13 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 9.6 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.34 - mIoU(ms+flip): 79.74 - Config: configs/pspnet/pspnet_r101-d8_4xb2-40k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_40k_cityscapes/pspnet_r101-d8_512x1024_40k_cityscapes_20200604_232751-467e7cf4.pth -- Name: pspnet_r50-d8_4xb2-40k_cityscapes-769x769 - In Collection: PSPNet - Metadata: - backbone: R-50-D8 - crop size: (769,769) - lr schd: 40000 - inference time (ms/im): - - value: 568.18 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 6.9 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.26 - mIoU(ms+flip): 79.88 - Config: configs/pspnet/pspnet_r50-d8_4xb2-40k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_769x769_40k_cityscapes/pspnet_r50-d8_769x769_40k_cityscapes_20200606_112725-86638686.pth -- Name: pspnet_r101-d8_4xb2-40k_cityscapes-769x769 - In Collection: PSPNet - Metadata: - backbone: R-101-D8 - crop size: (769,769) - lr schd: 40000 - inference time (ms/im): - - value: 869.57 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 10.9 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.08 - mIoU(ms+flip): 80.28 - Config: configs/pspnet/pspnet_r101-d8_4xb2-40k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_769x769_40k_cityscapes/pspnet_r101-d8_769x769_40k_cityscapes_20200606_112753-61c6f5be.pth -- Name: pspnet_r18-d8_4xb2-80k_cityscapes-512x1024 - In Collection: PSPNet - Metadata: - backbone: R-18-D8 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 63.65 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 1.7 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 74.87 - mIoU(ms+flip): 76.04 - Config: configs/pspnet/pspnet_r18-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_512x1024_80k_cityscapes/pspnet_r18-d8_512x1024_80k_cityscapes_20201225_021458-09ffa746.pth -- Name: pspnet_r50-d8_4xb2-80k_cityscapes-512x1024 - In Collection: PSPNet - Metadata: - backbone: R-50-D8 - crop size: (512,1024) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.55 - mIoU(ms+flip): 79.79 - Config: configs/pspnet/pspnet_r50-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_80k_cityscapes/pspnet_r50-d8_512x1024_80k_cityscapes_20200606_112131-2376f12b.pth -- Name: pspnet_r50-d8-rsb_4xb2-adamw-80k_cityscapes-512x1024 - In Collection: PSPNet - Metadata: - backbone: R-50b-D8 rsb - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 261.78 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 6.2 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.47 - mIoU(ms+flip): 79.45 - Config: configs/pspnet/pspnet_r50-d8-rsb_4xb2-adamw-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_80k_cityscapes/pspnet_r50-d8_rsb-pretrain_512x1024_adamw_80k_cityscapes_20220315_123238-588c30be.pth -- Name: pspnet_r101-d8_4xb2-80k_cityscapes-512x1024 - In Collection: PSPNet - Metadata: - backbone: R-101-D8 - crop size: (512,1024) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.76 - mIoU(ms+flip): 81.01 - Config: configs/pspnet/pspnet_r101-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_80k_cityscapes/pspnet_r101-d8_512x1024_80k_cityscapes_20200606_112211-e1e1100f.pth -- Name: pspnet_r101-d8_4xb2-amp-80k_cityscapes-512x1024 - In Collection: PSPNet - Metadata: - backbone: R-101-D8 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 114.03 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: AMP - resolution: (512,1024) - Training Memory (GB): 5.34 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.46 - Config: configs/pspnet/pspnet_r101-d8_4xb2-amp-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_fp16_512x1024_80k_cityscapes/pspnet_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230919-a0875e5c.pth -- Name: pspnet_r18-d8_4xb2-80k_cityscapes-769x769 - In Collection: PSPNet - Metadata: - backbone: R-18-D8 - crop size: (769,769) - lr schd: 80000 - inference time (ms/im): - - value: 161.29 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 1.9 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 75.9 - mIoU(ms+flip): 77.86 - Config: configs/pspnet/pspnet_r18-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_769x769_80k_cityscapes/pspnet_r18-d8_769x769_80k_cityscapes_20201225_021458-3deefc62.pth -- Name: pspnet_r50-d8_4xb2-80k_cityscapes-769x769 - In Collection: PSPNet - Metadata: - backbone: R-50-D8 - crop size: (769,769) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.59 - mIoU(ms+flip): 80.69 - Config: configs/pspnet/pspnet_r50-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_769x769_80k_cityscapes/pspnet_r50-d8_769x769_80k_cityscapes_20200606_210121-5ccf03dd.pth -- Name: pspnet_r101-d8_4xb2-80k_cityscapes-769x769 - In Collection: PSPNet - Metadata: - backbone: R-101-D8 - crop size: (769,769) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.77 - mIoU(ms+flip): 81.06 - Config: configs/pspnet/pspnet_r101-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_769x769_80k_cityscapes/pspnet_r101-d8_769x769_80k_cityscapes_20200606_225055-dba412fa.pth -- Name: pspnet_r18b-d8_4xb2-80k_cityscapes-512x1024 - In Collection: PSPNet - Metadata: - backbone: R-18b-D8 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 61.43 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 1.5 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 74.23 - mIoU(ms+flip): 75.79 - Config: configs/pspnet/pspnet_r18b-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18b-d8_512x1024_80k_cityscapes/pspnet_r18b-d8_512x1024_80k_cityscapes_20201226_063116-26928a60.pth -- Name: pspnet_r50b-d8_4xb2-80k_cityscapes-512x1024 - In Collection: PSPNet - Metadata: - backbone: R-50b-D8 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 232.56 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 6.0 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.22 - mIoU(ms+flip): 79.46 - Config: configs/pspnet/pspnet_r50b-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50b-d8_512x1024_80k_cityscapes/pspnet_r50b-d8_512x1024_80k_cityscapes_20201225_094315-6344287a.pth -- Name: pspnet_r101b-d8_4xb2-80k_cityscapes-512x1024 - In Collection: PSPNet - Metadata: - backbone: R-101b-D8 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 362.32 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 9.5 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.69 - mIoU(ms+flip): 80.79 - Config: configs/pspnet/pspnet_r101b-d8_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101b-d8_512x1024_80k_cityscapes/pspnet_r101b-d8_512x1024_80k_cityscapes_20201226_170012-3a4d38ab.pth -- Name: pspnet_r18b-d8_4xb2-80k_cityscapes-769x769 - In Collection: PSPNet - Metadata: - backbone: R-18b-D8 - crop size: (769,769) - lr schd: 80000 - inference time (ms/im): - - value: 156.01 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 1.7 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 74.92 - mIoU(ms+flip): 76.9 - Config: configs/pspnet/pspnet_r18b-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18b-d8_769x769_80k_cityscapes/pspnet_r18b-d8_769x769_80k_cityscapes_20201226_080942-bf98d186.pth -- Name: pspnet_r50b-d8_4xb2-80k_cityscapes-769x769 - In Collection: PSPNet - Metadata: - backbone: R-50b-D8 - crop size: (769,769) - lr schd: 80000 - inference time (ms/im): - - value: 531.91 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 6.8 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.5 - mIoU(ms+flip): 79.96 - Config: configs/pspnet/pspnet_r50b-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50b-d8_769x769_80k_cityscapes/pspnet_r50b-d8_769x769_80k_cityscapes_20201225_094316-4c643cf6.pth -- Name: pspnet_r101b-d8_4xb2-80k_cityscapes-769x769 - In Collection: PSPNet - Metadata: - backbone: R-101b-D8 - crop size: (769,769) - lr schd: 80000 - inference time (ms/im): - - value: 854.7 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 10.8 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.87 - mIoU(ms+flip): 80.04 - Config: configs/pspnet/pspnet_r101b-d8_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101b-d8_769x769_80k_cityscapes/pspnet_r101b-d8_769x769_80k_cityscapes_20201226_171823-f0e7c293.pth -- Name: pspnet_r50b-d32_4xb2-80k_cityscapes-512x1024 - In Collection: PSPNet - Metadata: - backbone: R-50-D32 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 65.75 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 3.0 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 73.88 - mIoU(ms+flip): 76.85 - Config: configs/pspnet/pspnet_r50b-d32_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d32_512x1024_80k_cityscapes/pspnet_r50-d32_512x1024_80k_cityscapes_20220316_224840-9092b254.pth -- Name: pspnet_r50-d32_rsb_4xb2-adamw-80k_cityscapes-512x1024 - In Collection: PSPNet - Metadata: - backbone: R-50b-D32 rsb - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 62.19 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 3.1 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 74.09 - mIoU(ms+flip): 77.18 - Config: configs/pspnet/pspnet_r50-d32_rsb_4xb2-adamw-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d32_rsb-pretrain_512x1024_adamw_80k_cityscapes/pspnet_r50-d32_rsb-pretrain_512x1024_adamw_80k_cityscapes_20220316_141229-dd9c9610.pth -- Name: pspnet_r50b-d32_4xb2-80k_cityscapes-512x1024 - In Collection: PSPNet - Metadata: - backbone: R-50b-D32 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 64.89 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 2.9 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 72.61 - mIoU(ms+flip): 75.51 - Config: configs/pspnet/pspnet_r50b-d32_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50b-d32_512x1024_80k_cityscapes/pspnet_r50b-d32_512x1024_80k_cityscapes_20220311_152152-23bcaf8c.pth -- Name: pspnet_r50-d8_4xb4-80k_ade20k-512x512 - In Collection: PSPNet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 42.5 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 8.5 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 41.13 - mIoU(ms+flip): 41.94 - Config: configs/pspnet/pspnet_r50-d8_4xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_80k_ade20k/pspnet_r50-d8_512x512_80k_ade20k_20200615_014128-15a8b914.pth -- Name: pspnet_r101-d8_4xb4-80k_ade20k-512x512 - In Collection: PSPNet - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 65.36 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 12.0 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 43.57 - mIoU(ms+flip): 44.35 - Config: configs/pspnet/pspnet_r101-d8_4xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_80k_ade20k/pspnet_r101-d8_512x512_80k_ade20k_20200614_031423-b6e782f0.pth -- Name: pspnet_r50-d8_4xb4-160k_ade20k-512x512 - In Collection: PSPNet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 42.48 - mIoU(ms+flip): 43.44 - Config: configs/pspnet/pspnet_r50-d8_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_160k_ade20k/pspnet_r50-d8_512x512_160k_ade20k_20200615_184358-1890b0bd.pth -- Name: pspnet_r101-d8_4xb4-160k_ade20k-512x512 - In Collection: PSPNet - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 44.39 - mIoU(ms+flip): 45.35 - Config: configs/pspnet/pspnet_r101-d8_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_160k_ade20k/pspnet_r101-d8_512x512_160k_ade20k_20200615_100650-967c316f.pth -- Name: pspnet_r50-d8_4xb4-20k_voc12aug-512x512 - In Collection: PSPNet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 20000 - inference time (ms/im): - - value: 42.39 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 6.1 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 76.78 - mIoU(ms+flip): 77.61 - Config: configs/pspnet/pspnet_r50-d8_4xb4-20k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_20k_voc12aug/pspnet_r50-d8_512x512_20k_voc12aug_20200617_101958-ed5dfbd9.pth -- Name: pspnet_r101-d8_4xb4-20k_voc12aug-512x512 - In Collection: PSPNet - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 20000 - inference time (ms/im): - - value: 66.58 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 9.6 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 78.47 - mIoU(ms+flip): 79.25 - Config: configs/pspnet/pspnet_r101-d8_4xb4-20k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_20k_voc12aug/pspnet_r101-d8_512x512_20k_voc12aug_20200617_102003-4aef3c9a.pth -- Name: pspnet_r50-d8_4xb4-40k_voc12aug-512x512 - In Collection: PSPNet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 40000 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 77.29 - mIoU(ms+flip): 78.48 - Config: configs/pspnet/pspnet_r50-d8_4xb4-40k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_40k_voc12aug/pspnet_r50-d8_512x512_40k_voc12aug_20200613_161222-ae9c1b8c.pth -- Name: pspnet_r101-d8_4xb4-40k_voc12aug-512x512 - In Collection: PSPNet - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 40000 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 78.52 - mIoU(ms+flip): 79.57 - Config: configs/pspnet/pspnet_r101-d8_4xb4-40k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_40k_voc12aug/pspnet_r101-d8_512x512_40k_voc12aug_20200613_161222-bc933b18.pth -- Name: pspnet_r101-d8_4xb4-40k_pascal-context-480x480 - In Collection: PSPNet - Metadata: - backbone: R-101-D8 - crop size: (480,480) - lr schd: 40000 - inference time (ms/im): - - value: 103.31 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (480,480) - Training Memory (GB): 8.8 - Results: - - Task: Semantic Segmentation - Dataset: Pascal Context - Metrics: - mIoU: 46.6 - mIoU(ms+flip): 47.78 - Config: configs/pspnet/pspnet_r101-d8_4xb4-40k_pascal-context-480x480.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_40k_pascal_context/pspnet_r101-d8_480x480_40k_pascal_context_20200911_211210-bf0f5d7c.pth -- Name: pspnet_r101-d8_4xb4-80k_pascal-context-480x480 - In Collection: PSPNet - Metadata: - backbone: R-101-D8 - crop size: (480,480) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Pascal Context - Metrics: - mIoU: 46.03 - mIoU(ms+flip): 47.15 - Config: configs/pspnet/pspnet_r101-d8_4xb4-80k_pascal-context-480x480.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_80k_pascal_context/pspnet_r101-d8_480x480_80k_pascal_context_20200911_190530-c86d6233.pth -- Name: pspnet_r101-d8_4xb4-40k_pascal-context-59-480x480 - In Collection: PSPNet - Metadata: - backbone: R-101-D8 - crop size: (480,480) - lr schd: 40000 - Results: - - Task: Semantic Segmentation - Dataset: Pascal Context 59 - Metrics: - mIoU: 52.02 - mIoU(ms+flip): 53.54 - Config: configs/pspnet/pspnet_r101-d8_4xb4-40k_pascal-context-59-480x480.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_40k_pascal_context_59/pspnet_r101-d8_480x480_40k_pascal_context_59_20210416_114524-86d44cd4.pth -- Name: pspnet_r101-d8_4xb4-80k_pascal-context-59-480x480 - In Collection: PSPNet - Metadata: - backbone: R-101-D8 - crop size: (480,480) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Pascal Context 59 - Metrics: - mIoU: 52.47 - mIoU(ms+flip): 53.99 - Config: configs/pspnet/pspnet_r101-d8_4xb4-80k_pascal-context-59-480x480.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_80k_pascal_context_59/pspnet_r101-d8_480x480_80k_pascal_context_59_20210416_114418-fa6caaa2.pth -- Name: pspnet_r50-d8_4xb4-20k_coco-stuff10k-512x512 - In Collection: PSPNet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 20000 - inference time (ms/im): - - value: 48.78 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 9.6 - Results: - - Task: Semantic Segmentation - Dataset: COCO-Stuff 10k - Metrics: - mIoU: 35.69 - mIoU(ms+flip): 36.62 - Config: configs/pspnet/pspnet_r50-d8_4xb4-20k_coco-stuff10k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_20k_coco-stuff10k/pspnet_r50-d8_512x512_4x4_20k_coco-stuff10k_20210820_203258-b88df27f.pth -- Name: pspnet_r101-d8_4xb4-20k_coco-stuff10k-512x512 - In Collection: PSPNet - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 20000 - inference time (ms/im): - - value: 90.09 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 13.2 - Results: - - Task: Semantic Segmentation - Dataset: COCO-Stuff 10k - Metrics: - mIoU: 37.26 - mIoU(ms+flip): 38.52 - Config: configs/pspnet/pspnet_r101-d8_4xb4-20k_coco-stuff10k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_20k_coco-stuff10k/pspnet_r101-d8_512x512_4x4_20k_coco-stuff10k_20210820_232135-76aae482.pth -- Name: pspnet_r50-d8_4xb4-40k_coco-stuff10k-512x512 - In Collection: PSPNet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 40000 - Results: - - Task: Semantic Segmentation - Dataset: COCO-Stuff 10k - Metrics: - mIoU: 36.33 - mIoU(ms+flip): 37.24 - Config: configs/pspnet/pspnet_r50-d8_4xb4-40k_coco-stuff10k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_40k_coco-stuff10k/pspnet_r50-d8_512x512_4x4_40k_coco-stuff10k_20210821_030857-92e2902b.pth -- Name: pspnet_r101-d8_4xb4-40k_coco-stuff10k-512x512 - In Collection: PSPNet - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 40000 - Results: - - Task: Semantic Segmentation - Dataset: COCO-Stuff 10k - Metrics: - mIoU: 37.76 - mIoU(ms+flip): 38.86 - Config: configs/pspnet/pspnet_r101-d8_4xb4-40k_coco-stuff10k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_40k_coco-stuff10k/pspnet_r101-d8_512x512_4x4_40k_coco-stuff10k_20210821_014022-831aec95.pth -- Name: pspnet_r50-d8_4xb4-80k_coco-stuff164k-512x512 - In Collection: PSPNet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 48.78 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 9.6 - Results: - - Task: Semantic Segmentation - Dataset: COCO-Stuff 164k - Metrics: - mIoU: 38.8 - mIoU(ms+flip): 39.19 - Config: configs/pspnet/pspnet_r50-d8_4xb4-80k_coco-stuff164k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_80k_coco-stuff164k/pspnet_r50-d8_512x512_4x4_80k_coco-stuff164k_20210707_152034-0e41b2db.pth -- Name: pspnet_r101-d8_4xb4-80k_coco-stuff164k-512x512 - In Collection: PSPNet - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 90.09 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 13.2 - Results: - - Task: Semantic Segmentation - Dataset: COCO-Stuff 164k - Metrics: - mIoU: 40.34 - mIoU(ms+flip): 40.79 - Config: configs/pspnet/pspnet_r101-d8_4xb4-80k_coco-stuff164k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_80k_coco-stuff164k/pspnet_r101-d8_512x512_4x4_80k_coco-stuff164k_20210707_152034-7eb41789.pth -- Name: pspnet_r50-d8_4xb4-160k_coco-stuff164k-512x512 - In Collection: PSPNet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: COCO-Stuff 164k - Metrics: - mIoU: 39.64 - mIoU(ms+flip): 39.97 - Config: configs/pspnet/pspnet_r50-d8_4xb4-160k_coco-stuff164k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_160k_coco-stuff164k/pspnet_r50-d8_512x512_4x4_160k_coco-stuff164k_20210707_152004-51276a57.pth -- Name: pspnet_r101-d8_4xb4-160k_coco-stuff164k-512x512 - In Collection: PSPNet - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: COCO-Stuff 164k - Metrics: - mIoU: 41.28 - mIoU(ms+flip): 41.66 - Config: configs/pspnet/pspnet_r101-d8_4xb4-160k_coco-stuff164k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_160k_coco-stuff164k/pspnet_r101-d8_512x512_4x4_160k_coco-stuff164k_20210707_152004-4af9621b.pth -- Name: pspnet_r50-d8_4xb4-320k_coco-stuff164k-512x512 - In Collection: PSPNet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 320000 - Results: - - Task: Semantic Segmentation - Dataset: COCO-Stuff 164k - Metrics: - mIoU: 40.53 - mIoU(ms+flip): 40.75 - Config: configs/pspnet/pspnet_r50-d8_4xb4-320k_coco-stuff164k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_320k_coco-stuff164k/pspnet_r50-d8_512x512_4x4_320k_coco-stuff164k_20210707_152004-be9610cc.pth -- Name: pspnet_r101-d8_4xb4-320k_coco-stuff164k-512x512 - In Collection: PSPNet - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 320000 - Results: - - Task: Semantic Segmentation - Dataset: COCO-Stuff 164k - Metrics: - mIoU: 41.95 - mIoU(ms+flip): 42.42 - Config: configs/pspnet/pspnet_r101-d8_4xb4-320k_coco-stuff164k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_320k_coco-stuff164k/pspnet_r101-d8_512x512_4x4_320k_coco-stuff164k_20210707_152004-72220c60.pth -- Name: pspnet_r18-d8_4xb4-80k_loveda-512x512 - In Collection: PSPNet - Metadata: - backbone: R-18-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 37.22 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 1.45 - Results: - - Task: Semantic Segmentation - Dataset: LoveDA - Metrics: - mIoU: 48.62 - mIoU(ms+flip): 47.57 - Config: configs/pspnet/pspnet_r18-d8_4xb4-80k_loveda-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_512x512_80k_loveda/pspnet_r18-d8_512x512_80k_loveda_20211105_052100-b97697f1.pth -- Name: pspnet_r50-d8_4xb4-80k_loveda-512x512 - In Collection: PSPNet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 151.52 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 6.14 - Results: - - Task: Semantic Segmentation - Dataset: LoveDA - Metrics: - mIoU: 50.46 - mIoU(ms+flip): 50.19 - Config: configs/pspnet/pspnet_r50-d8_4xb4-80k_loveda-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_80k_loveda/pspnet_r50-d8_512x512_80k_loveda_20211104_155728-88610f9f.pth -- Name: pspnet_r101-d8_4xb4-80k_loveda-512x512 - In Collection: PSPNet - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 218.34 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 9.61 - Results: - - Task: Semantic Segmentation - Dataset: LoveDA - Metrics: - mIoU: 51.86 - mIoU(ms+flip): 51.34 - Config: configs/pspnet/pspnet_r101-d8_4xb4-80k_loveda-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_80k_loveda/pspnet_r101-d8_512x512_80k_loveda_20211104_153212-1c06c6a8.pth -- Name: pspnet_r18-d8_4xb4-80k_potsdam-512x512 - In Collection: PSPNet - Metadata: - backbone: R-18-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 11.75 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 1.5 - Results: - - Task: Semantic Segmentation - Dataset: Potsdam - Metrics: - mIoU: 77.09 - mIoU(ms+flip): 78.3 - Config: configs/pspnet/pspnet_r18-d8_4xb4-80k_potsdam-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_4x4_512x512_80k_potsdam/pspnet_r18-d8_4x4_512x512_80k_potsdam_20211220_125612-7cd046e1.pth -- Name: pspnet_r50-d8_4xb4-80k_potsdam-512x512 - In Collection: PSPNet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 33.1 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 6.14 - Results: - - Task: Semantic Segmentation - Dataset: Potsdam - Metrics: - mIoU: 78.12 - mIoU(ms+flip): 78.98 - Config: configs/pspnet/pspnet_r50-d8_4xb4-80k_potsdam-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_4x4_512x512_80k_potsdam/pspnet_r50-d8_4x4_512x512_80k_potsdam_20211219_043541-2dd5fe67.pth -- Name: pspnet_r101-d8_4xb4-80k_potsdam-512x512 - In Collection: PSPNet - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 51.55 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 9.61 - Results: - - Task: Semantic Segmentation - Dataset: Potsdam - Metrics: - mIoU: 78.62 - mIoU(ms+flip): 79.47 - Config: configs/pspnet/pspnet_r101-d8_4xb4-80k_potsdam-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_4x4_512x512_80k_potsdam/pspnet_r101-d8_4x4_512x512_80k_potsdam_20211220_125612-aed036c4.pth -- Name: pspnet_r18-d8_4xb4-80k_vaihingen-512x512 - In Collection: PSPNet - Metadata: - backbone: R-18-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 11.76 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 1.45 - Results: - - Task: Semantic Segmentation - Dataset: Vaihingen - Metrics: - mIoU: 71.46 - mIoU(ms+flip): 73.36 - Config: configs/pspnet/pspnet_r18-d8_4xb4-80k_vaihingen-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_4x4_512x512_80k_vaihingen/pspnet_r18-d8_4x4_512x512_80k_vaihingen_20211228_160355-52a8a6f6.pth -- Name: pspnet_r50-d8_4xb4-80k_vaihingen-512x512 - In Collection: PSPNet - Metadata: - backbone: R-50-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 33.01 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 6.14 - Results: - - Task: Semantic Segmentation - Dataset: Vaihingen - Metrics: - mIoU: 72.36 - mIoU(ms+flip): 73.75 - Config: configs/pspnet/pspnet_r50-d8_4xb4-80k_vaihingen-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_4x4_512x512_80k_vaihingen/pspnet_r50-d8_4x4_512x512_80k_vaihingen_20211228_160355-382f8f5b.pth -- Name: pspnet_r101-d8_4xb4-80k_vaihingen-512x512 - In Collection: PSPNet - Metadata: - backbone: R-101-D8 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 50.08 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 9.61 - Results: - - Task: Semantic Segmentation - Dataset: Vaihingen - Metrics: - mIoU: 72.61 - mIoU(ms+flip): 74.18 - Config: configs/pspnet/pspnet_r101-d8_4xb4-80k_vaihingen-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_4x4_512x512_80k_vaihingen/pspnet_r101-d8_4x4_512x512_80k_vaihingen_20211231_230806-8eba0a09.pth -- Name: pspnet_r18-d8_4xb4-80k_isaid-896x896 - In Collection: PSPNet - Metadata: - backbone: R-18-D8 - crop size: (896,896) - lr schd: 80000 - inference time (ms/im): - - value: 37.16 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (896,896) - Training Memory (GB): 4.52 - Results: - - Task: Semantic Segmentation - Dataset: iSAID - Metrics: - mIoU: 60.22 - mIoU(ms+flip): 61.25 - Config: configs/pspnet/pspnet_r18-d8_4xb4-80k_isaid-896x896.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_4x4_896x896_80k_isaid/pspnet_r18-d8_4x4_896x896_80k_isaid_20220110_180526-e84c0b6a.pth -- Name: pspnet_r50-d8_4xb4-80k_isaid-896x896 - In Collection: PSPNet - Metadata: - backbone: R-50-D8 - crop size: (896,896) - lr schd: 80000 - inference time (ms/im): - - value: 112.61 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (896,896) - Training Memory (GB): 16.58 - Results: - - Task: Semantic Segmentation - Dataset: iSAID - Metrics: - mIoU: 65.36 - mIoU(ms+flip): 66.48 - Config: configs/pspnet/pspnet_r50-d8_4xb4-80k_isaid-896x896.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_4x4_896x896_80k_isaid/pspnet_r50-d8_4x4_896x896_80k_isaid_20220110_180629-1f21dc32.pth diff --git a/configs/resnest/README.md b/configs/resnest/README.md index 7f07d147b7..d27bbe2807 100644 --- a/configs/resnest/README.md +++ b/configs/resnest/README.md @@ -1,6 +1,6 @@ # ResNeSt -[ResNeSt: Split-Attention Networks](https://arxiv.org/abs/2004.08955) +> [ResNeSt: Split-Attention Networks](https://arxiv.org/abs/2004.08955) ## Introduction @@ -22,6 +22,26 @@ It is well known that featuremap attention and multi-path representation are imp +## Results and models + +### Cityscapes + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------- | -------- | --------- | ------: | -------: | -------------- | ------ | ----: | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| FCN | S-101-D8 | 512x1024 | 80000 | 11.4 | 2.39 | V100 | 77.56 | 78.98 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/resnest/resnest_s101-d8_fcn_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/fcn_s101-d8_512x1024_80k_cityscapes/fcn_s101-d8_512x1024_80k_cityscapes_20200807_140631-f8d155b3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/fcn_s101-d8_512x1024_80k_cityscapes/fcn_s101-d8_512x1024_80k_cityscapes-20200807_140631.log.json) | +| PSPNet | S-101-D8 | 512x1024 | 80000 | 11.8 | 2.52 | V100 | 78.57 | 79.19 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/resnest/resnest_s101-d8_pspnet_4xb2-80k_cityscapes512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/pspnet_s101-d8_512x1024_80k_cityscapes/pspnet_s101-d8_512x1024_80k_cityscapes_20200807_140631-c75f3b99.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/pspnet_s101-d8_512x1024_80k_cityscapes/pspnet_s101-d8_512x1024_80k_cityscapes-20200807_140631.log.json) | +| DeepLabV3 | S-101-D8 | 512x1024 | 80000 | 11.9 | 1.88 | V100 | 79.67 | 80.51 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/resnest/resnest_s101-d8_deeplabv3_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3_s101-d8_512x1024_80k_cityscapes/deeplabv3_s101-d8_512x1024_80k_cityscapes_20200807_144429-b73c4270.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3_s101-d8_512x1024_80k_cityscapes/deeplabv3_s101-d8_512x1024_80k_cityscapes-20200807_144429.log.json) | +| DeepLabV3+ | S-101-D8 | 512x1024 | 80000 | 13.2 | 2.36 | V100 | 79.62 | 80.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/resnest/resnest_s101-d8_deeplabv3plus_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3plus_s101-d8_512x1024_80k_cityscapes/deeplabv3plus_s101-d8_512x1024_80k_cityscapes_20200807_144429-1239eb43.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3plus_s101-d8_512x1024_80k_cityscapes/deeplabv3plus_s101-d8_512x1024_80k_cityscapes-20200807_144429.log.json) | + +### ADE20K + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------- | -------- | --------- | ------: | -------: | -------------- | ------ | ----: | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| FCN | S-101-D8 | 512x512 | 160000 | 14.2 | 12.86 | V100 | 45.62 | 46.16 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/resnest/resnest_s101-d8_fcn_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/fcn_s101-d8_512x512_160k_ade20k/fcn_s101-d8_512x512_160k_ade20k_20200807_145416-d3160329.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/fcn_s101-d8_512x512_160k_ade20k/fcn_s101-d8_512x512_160k_ade20k-20200807_145416.log.json) | +| PSPNet | S-101-D8 | 512x512 | 160000 | 14.2 | 13.02 | V100 | 45.44 | 46.28 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/resnest/resnest_s101-d8_pspnet_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/pspnet_s101-d8_512x512_160k_ade20k/pspnet_s101-d8_512x512_160k_ade20k_20200807_145416-a6daa92a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/pspnet_s101-d8_512x512_160k_ade20k/pspnet_s101-d8_512x512_160k_ade20k-20200807_145416.log.json) | +| DeepLabV3 | S-101-D8 | 512x512 | 160000 | 14.6 | 9.28 | V100 | 45.71 | 46.59 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/resnest/resnest_s101-d8_deeplabv3_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3_s101-d8_512x512_160k_ade20k/deeplabv3_s101-d8_512x512_160k_ade20k_20200807_144503-17ecabe5.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3_s101-d8_512x512_160k_ade20k/deeplabv3_s101-d8_512x512_160k_ade20k-20200807_144503.log.json) | +| DeepLabV3+ | S-101-D8 | 512x512 | 160000 | 16.2 | 11.96 | V100 | 46.47 | 47.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/resnest/resnest_s101-d8_deeplabv3plus_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3plus_s101-d8_512x512_160k_ade20k/deeplabv3plus_s101-d8_512x512_160k_ade20k_20200807_144503-27b26226.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3plus_s101-d8_512x512_160k_ade20k/deeplabv3plus_s101-d8_512x512_160k_ade20k-20200807_144503.log.json) | + ## Citation ```bibtex @@ -32,23 +52,3 @@ journal={arXiv preprint arXiv:2004.08955}, year={2020} } ``` - -## Results and models - -### Cityscapes - -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ---------- | -------- | --------- | ------: | -------: | -------------- | ----: | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| FCN | S-101-D8 | 512x1024 | 80000 | 11.4 | 2.39 | 77.56 | 78.98 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/resnest/resnest_s101-d8_fcn_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/fcn_s101-d8_512x1024_80k_cityscapes/fcn_s101-d8_512x1024_80k_cityscapes_20200807_140631-f8d155b3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/fcn_s101-d8_512x1024_80k_cityscapes/fcn_s101-d8_512x1024_80k_cityscapes-20200807_140631.log.json) | -| PSPNet | S-101-D8 | 512x1024 | 80000 | 11.8 | 2.52 | 78.57 | 79.19 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/resnest/resnest_s101-d8_pspnet_4xb2-80k_cityscapes512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/pspnet_s101-d8_512x1024_80k_cityscapes/pspnet_s101-d8_512x1024_80k_cityscapes_20200807_140631-c75f3b99.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/pspnet_s101-d8_512x1024_80k_cityscapes/pspnet_s101-d8_512x1024_80k_cityscapes-20200807_140631.log.json) | -| DeepLabV3 | S-101-D8 | 512x1024 | 80000 | 11.9 | 1.88 | 79.67 | 80.51 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/resnest/resnest_s101-d8_deeplabv3_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3_s101-d8_512x1024_80k_cityscapes/deeplabv3_s101-d8_512x1024_80k_cityscapes_20200807_144429-b73c4270.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3_s101-d8_512x1024_80k_cityscapes/deeplabv3_s101-d8_512x1024_80k_cityscapes-20200807_144429.log.json) | -| DeepLabV3+ | S-101-D8 | 512x1024 | 80000 | 13.2 | 2.36 | 79.62 | 80.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/resnest/resnest_s101-d8_deeplabv3plus_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3plus_s101-d8_512x1024_80k_cityscapes/deeplabv3plus_s101-d8_512x1024_80k_cityscapes_20200807_144429-1239eb43.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3plus_s101-d8_512x1024_80k_cityscapes/deeplabv3plus_s101-d8_512x1024_80k_cityscapes-20200807_144429.log.json) | - -### ADE20K - -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ---------- | -------- | --------- | ------: | -------: | -------------- | ----: | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| FCN | S-101-D8 | 512x512 | 160000 | 14.2 | 12.86 | 45.62 | 46.16 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/resnest/resnest_s101-d8_fcn_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/fcn_s101-d8_512x512_160k_ade20k/fcn_s101-d8_512x512_160k_ade20k_20200807_145416-d3160329.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/fcn_s101-d8_512x512_160k_ade20k/fcn_s101-d8_512x512_160k_ade20k-20200807_145416.log.json) | -| PSPNet | S-101-D8 | 512x512 | 160000 | 14.2 | 13.02 | 45.44 | 46.28 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/resnest/resnest_s101-d8_pspnet_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/pspnet_s101-d8_512x512_160k_ade20k/pspnet_s101-d8_512x512_160k_ade20k_20200807_145416-a6daa92a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/pspnet_s101-d8_512x512_160k_ade20k/pspnet_s101-d8_512x512_160k_ade20k-20200807_145416.log.json) | -| DeepLabV3 | S-101-D8 | 512x512 | 160000 | 14.6 | 9.28 | 45.71 | 46.59 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/resnest/resnest_s101-d8_deeplabv3_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3_s101-d8_512x512_160k_ade20k/deeplabv3_s101-d8_512x512_160k_ade20k_20200807_144503-17ecabe5.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3_s101-d8_512x512_160k_ade20k/deeplabv3_s101-d8_512x512_160k_ade20k-20200807_144503.log.json) | -| DeepLabV3+ | S-101-D8 | 512x512 | 160000 | 16.2 | 11.96 | 46.47 | 47.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/resnest/resnest_s101-d8_deeplabv3plus_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3plus_s101-d8_512x512_160k_ade20k/deeplabv3plus_s101-d8_512x512_160k_ade20k_20200807_144503-27b26226.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3plus_s101-d8_512x512_160k_ade20k/deeplabv3plus_s101-d8_512x512_160k_ade20k-20200807_144503.log.json) | diff --git a/configs/resnest/metafile.yaml b/configs/resnest/metafile.yaml new file mode 100644 index 0000000000..0b8d41ebfd --- /dev/null +++ b/configs/resnest/metafile.yaml @@ -0,0 +1,193 @@ +Models: +- Name: resnest_s101-d8_fcn_4xb2-80k_cityscapes-512x1024 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 77.56 + mIoU(ms+flip): 78.98 + Config: configs/resnest/resnest_s101-d8_fcn_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - S-101-D8 + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 11.4 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/resnest/fcn_s101-d8_512x1024_80k_cityscapes/fcn_s101-d8_512x1024_80k_cityscapes_20200807_140631-f8d155b3.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/resnest/fcn_s101-d8_512x1024_80k_cityscapes/fcn_s101-d8_512x1024_80k_cityscapes-20200807_140631.log.json + Paper: + Title: 'ResNeSt: Split-Attention Networks' + URL: https://arxiv.org/abs/2004.08955 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/resnest.py#L271 + Framework: PyTorch +- Name: resnest_s101-d8_pspnet_4xb2-80k_cityscapes512x1024 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.57 + mIoU(ms+flip): 79.19 + Config: configs/resnest/resnest_s101-d8_pspnet_4xb2-80k_cityscapes512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - S-101-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 11.8 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/resnest/pspnet_s101-d8_512x1024_80k_cityscapes/pspnet_s101-d8_512x1024_80k_cityscapes_20200807_140631-c75f3b99.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/resnest/pspnet_s101-d8_512x1024_80k_cityscapes/pspnet_s101-d8_512x1024_80k_cityscapes-20200807_140631.log.json + Paper: + Title: 'ResNeSt: Split-Attention Networks' + URL: https://arxiv.org/abs/2004.08955 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/resnest.py#L271 + Framework: PyTorch +- Name: resnest_s101-d8_deeplabv3_4xb2-80k_cityscapes-512x1024 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.67 + mIoU(ms+flip): 80.51 + Config: configs/resnest/resnest_s101-d8_deeplabv3_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - S-101-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Memory (GB): 11.9 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3_s101-d8_512x1024_80k_cityscapes/deeplabv3_s101-d8_512x1024_80k_cityscapes_20200807_144429-b73c4270.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3_s101-d8_512x1024_80k_cityscapes/deeplabv3_s101-d8_512x1024_80k_cityscapes-20200807_144429.log.json + Paper: + Title: 'ResNeSt: Split-Attention Networks' + URL: https://arxiv.org/abs/2004.08955 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/resnest.py#L271 + Framework: PyTorch +- Name: resnest_s101-d8_deeplabv3plus_4xb2-80k_cityscapes-512x1024 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.62 + mIoU(ms+flip): 80.27 + Config: configs/resnest/resnest_s101-d8_deeplabv3plus_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - S-101-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Memory (GB): 13.2 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3plus_s101-d8_512x1024_80k_cityscapes/deeplabv3plus_s101-d8_512x1024_80k_cityscapes_20200807_144429-1239eb43.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3plus_s101-d8_512x1024_80k_cityscapes/deeplabv3plus_s101-d8_512x1024_80k_cityscapes-20200807_144429.log.json + Paper: + Title: 'ResNeSt: Split-Attention Networks' + URL: https://arxiv.org/abs/2004.08955 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/resnest.py#L271 + Framework: PyTorch +- Name: resnest_s101-d8_fcn_4xb4-160k_ade20k-512x512 + In Collection: FCN + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 45.62 + mIoU(ms+flip): 46.16 + Config: configs/resnest/resnest_s101-d8_fcn_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - S-101-D8 + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 14.2 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/resnest/fcn_s101-d8_512x512_160k_ade20k/fcn_s101-d8_512x512_160k_ade20k_20200807_145416-d3160329.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/resnest/fcn_s101-d8_512x512_160k_ade20k/fcn_s101-d8_512x512_160k_ade20k-20200807_145416.log.json + Paper: + Title: 'ResNeSt: Split-Attention Networks' + URL: https://arxiv.org/abs/2004.08955 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/resnest.py#L271 + Framework: PyTorch +- Name: resnest_s101-d8_pspnet_4xb4-160k_ade20k-512x512 + In Collection: PSPNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 45.44 + mIoU(ms+flip): 46.28 + Config: configs/resnest/resnest_s101-d8_pspnet_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - S-101-D8 + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 14.2 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/resnest/pspnet_s101-d8_512x512_160k_ade20k/pspnet_s101-d8_512x512_160k_ade20k_20200807_145416-a6daa92a.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/resnest/pspnet_s101-d8_512x512_160k_ade20k/pspnet_s101-d8_512x512_160k_ade20k-20200807_145416.log.json + Paper: + Title: 'ResNeSt: Split-Attention Networks' + URL: https://arxiv.org/abs/2004.08955 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/resnest.py#L271 + Framework: PyTorch +- Name: resnest_s101-d8_deeplabv3_4xb4-160k_ade20k-512x512 + In Collection: DeepLabV3 + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 45.71 + mIoU(ms+flip): 46.59 + Config: configs/resnest/resnest_s101-d8_deeplabv3_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - S-101-D8 + - DeepLabV3 + Training Resources: 4x V100 GPUS + Memory (GB): 14.6 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3_s101-d8_512x512_160k_ade20k/deeplabv3_s101-d8_512x512_160k_ade20k_20200807_144503-17ecabe5.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3_s101-d8_512x512_160k_ade20k/deeplabv3_s101-d8_512x512_160k_ade20k-20200807_144503.log.json + Paper: + Title: 'ResNeSt: Split-Attention Networks' + URL: https://arxiv.org/abs/2004.08955 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/resnest.py#L271 + Framework: PyTorch +- Name: resnest_s101-d8_deeplabv3plus_4xb4-160k_ade20k-512x512 + In Collection: DeepLabV3+ + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 46.47 + mIoU(ms+flip): 47.27 + Config: configs/resnest/resnest_s101-d8_deeplabv3plus_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - S-101-D8 + - DeepLabV3+ + Training Resources: 4x V100 GPUS + Memory (GB): 16.2 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3plus_s101-d8_512x512_160k_ade20k/deeplabv3plus_s101-d8_512x512_160k_ade20k_20200807_144503-27b26226.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3plus_s101-d8_512x512_160k_ade20k/deeplabv3plus_s101-d8_512x512_160k_ade20k-20200807_144503.log.json + Paper: + Title: 'ResNeSt: Split-Attention Networks' + URL: https://arxiv.org/abs/2004.08955 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/resnest.py#L271 + Framework: PyTorch diff --git a/configs/resnest/resnest.yml b/configs/resnest/resnest.yml deleted file mode 100644 index ab897e3bd5..0000000000 --- a/configs/resnest/resnest.yml +++ /dev/null @@ -1,177 +0,0 @@ -Models: -- Name: resnest_s101-d8_fcn_4xb2-80k_cityscapes-512x1024 - In Collection: FCN - Metadata: - backbone: S-101-D8 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 418.41 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 11.4 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 77.56 - mIoU(ms+flip): 78.98 - Config: configs/resnest/resnest_s101-d8_fcn_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/resnest/fcn_s101-d8_512x1024_80k_cityscapes/fcn_s101-d8_512x1024_80k_cityscapes_20200807_140631-f8d155b3.pth -- Name: resnest_s101-d8_pspnet_4xb2-80k_cityscapes512x1024 - In Collection: PSPNet - Metadata: - backbone: S-101-D8 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 396.83 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 11.8 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.57 - mIoU(ms+flip): 79.19 - Config: configs/resnest/resnest_s101-d8_pspnet_4xb2-80k_cityscapes512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/resnest/pspnet_s101-d8_512x1024_80k_cityscapes/pspnet_s101-d8_512x1024_80k_cityscapes_20200807_140631-c75f3b99.pth -- Name: resnest_s101-d8_deeplabv3_4xb2-80k_cityscapes-512x1024 - In Collection: DeepLabV3 - Metadata: - backbone: S-101-D8 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 531.91 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 11.9 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.67 - mIoU(ms+flip): 80.51 - Config: configs/resnest/resnest_s101-d8_deeplabv3_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3_s101-d8_512x1024_80k_cityscapes/deeplabv3_s101-d8_512x1024_80k_cityscapes_20200807_144429-b73c4270.pth -- Name: resnest_s101-d8_deeplabv3plus_4xb2-80k_cityscapes-512x1024 - In Collection: DeepLabV3+ - Metadata: - backbone: S-101-D8 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 423.73 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 13.2 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.62 - mIoU(ms+flip): 80.27 - Config: configs/resnest/resnest_s101-d8_deeplabv3plus_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3plus_s101-d8_512x1024_80k_cityscapes/deeplabv3plus_s101-d8_512x1024_80k_cityscapes_20200807_144429-1239eb43.pth -- Name: resnest_s101-d8_fcn_4xb4-160k_ade20k-512x512 - In Collection: FCN - Metadata: - backbone: S-101-D8 - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 77.76 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 14.2 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 45.62 - mIoU(ms+flip): 46.16 - Config: configs/resnest/resnest_s101-d8_fcn_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/resnest/fcn_s101-d8_512x512_160k_ade20k/fcn_s101-d8_512x512_160k_ade20k_20200807_145416-d3160329.pth -- Name: resnest_s101-d8_pspnet_4xb4-160k_ade20k-512x512 - In Collection: PSPNet - Metadata: - backbone: S-101-D8 - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 76.8 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 14.2 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 45.44 - mIoU(ms+flip): 46.28 - Config: configs/resnest/resnest_s101-d8_pspnet_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/resnest/pspnet_s101-d8_512x512_160k_ade20k/pspnet_s101-d8_512x512_160k_ade20k_20200807_145416-a6daa92a.pth -- Name: resnest_s101-d8_deeplabv3_4xb4-160k_ade20k-512x512 - In Collection: DeepLabV3 - Metadata: - backbone: S-101-D8 - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 107.76 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 14.6 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 45.71 - mIoU(ms+flip): 46.59 - Config: configs/resnest/resnest_s101-d8_deeplabv3_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3_s101-d8_512x512_160k_ade20k/deeplabv3_s101-d8_512x512_160k_ade20k_20200807_144503-17ecabe5.pth -- Name: resnest_s101-d8_deeplabv3plus_4xb4-160k_ade20k-512x512 - In Collection: DeepLabV3+ - Metadata: - backbone: S-101-D8 - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 83.61 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 16.2 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 46.47 - mIoU(ms+flip): 47.27 - Config: configs/resnest/resnest_s101-d8_deeplabv3plus_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3plus_s101-d8_512x512_160k_ade20k/deeplabv3plus_s101-d8_512x512_160k_ade20k_20200807_144503-27b26226.pth diff --git a/configs/segformer/README.md b/configs/segformer/README.md index be64099da3..5dbf1215bc 100644 --- a/configs/segformer/README.md +++ b/configs/segformer/README.md @@ -1,6 +1,6 @@ # SegFormer -[SegFormer: Simple and Efficient Design for Semantic Segmentation with Transformers](https://arxiv.org/abs/2105.15203) +> [SegFormer: Simple and Efficient Design for Semantic Segmentation with Transformers](https://arxiv.org/abs/2105.15203) ## Introduction @@ -22,17 +22,6 @@ We present SegFormer, a simple, efficient yet powerful semantic segmentation fra -## Citation - -```bibtex -@article{xie2021segformer, - title={SegFormer: Simple and Efficient Design for Semantic Segmentation with Transformers}, - author={Xie, Enze and Wang, Wenhai and Yu, Zhiding and Anandkumar, Anima and Alvarez, Jose M and Luo, Ping}, - journal={arXiv preprint arXiv:2105.15203}, - year={2021} -} -``` - ## Usage To use other repositories' pre-trained models, it is necessary to convert keys. @@ -49,15 +38,15 @@ This script convert model from `PRETRAIN_PATH` and store the converted model in ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| --------- | -------- | --------- | ------: | -------: | -------------- | ----: | ------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| Segformer | MIT-B0 | 512x512 | 160000 | 2.1 | 51.32 | 37.41 | 38.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b0_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b0_512x512_160k_ade20k/segformer_mit-b0_512x512_160k_ade20k_20210726_101530-8ffa8fda.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b0_512x512_160k_ade20k/segformer_mit-b0_512x512_160k_ade20k_20210726_101530.log.json) | -| Segformer | MIT-B1 | 512x512 | 160000 | 2.6 | 47.66 | 40.97 | 42.54 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b1_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b1_512x512_160k_ade20k/segformer_mit-b1_512x512_160k_ade20k_20210726_112106-d70e859d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b1_512x512_160k_ade20k/segformer_mit-b1_512x512_160k_ade20k_20210726_112106.log.json) | -| Segformer | MIT-B2 | 512x512 | 160000 | 3.6 | 30.88 | 45.58 | 47.03 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b2_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b2_512x512_160k_ade20k/segformer_mit-b2_512x512_160k_ade20k_20210726_112103-cbd414ac.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b2_512x512_160k_ade20k/segformer_mit-b2_512x512_160k_ade20k_20210726_112103.log.json) | -| Segformer | MIT-B3 | 512x512 | 160000 | 4.8 | 22.11 | 47.82 | 48.81 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b3_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b3_512x512_160k_ade20k/segformer_mit-b3_512x512_160k_ade20k_20210726_081410-962b98d2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b3_512x512_160k_ade20k/segformer_mit-b3_512x512_160k_ade20k_20210726_081410.log.json) | -| Segformer | MIT-B4 | 512x512 | 160000 | 6.1 | 15.45 | 48.46 | 49.76 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b4_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b4_512x512_160k_ade20k/segformer_mit-b4_512x512_160k_ade20k_20210728_183055-7f509d7d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b4_512x512_160k_ade20k/segformer_mit-b4_512x512_160k_ade20k_20210728_183055.log.json) | -| Segformer | MIT-B5 | 512x512 | 160000 | 7.2 | 11.89 | 49.13 | 50.22 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b5_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_512x512_160k_ade20k/segformer_mit-b5_512x512_160k_ade20k_20210726_145235-94cedf59.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_512x512_160k_ade20k/segformer_mit-b5_512x512_160k_ade20k_20210726_145235.log.json) | -| Segformer | MIT-B5 | 640x640 | 160000 | 11.5 | 11.30 | 49.62 | 50.36 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b5_8xb2-160k_ade20k-640x640.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_640x640_160k_ade20k/segformer_mit-b5_640x640_160k_ade20k_20210801_121243-41d2845b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_640x640_160k_ade20k/segformer_mit-b5_640x640_160k_ade20k_20210801_121243.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| --------- | -------- | --------- | ------: | -------: | -------------- | -------- | ----: | ------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Segformer | MIT-B0 | 512x512 | 160000 | 2.1 | 51.32 | 1080 Ti | 37.41 | 38.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b0_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b0_512x512_160k_ade20k/segformer_mit-b0_512x512_160k_ade20k_20210726_101530-8ffa8fda.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b0_512x512_160k_ade20k/segformer_mit-b0_512x512_160k_ade20k_20210726_101530.log.json) | +| Segformer | MIT-B1 | 512x512 | 160000 | 2.6 | 47.66 | TITAN Xp | 40.97 | 42.54 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b1_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b1_512x512_160k_ade20k/segformer_mit-b1_512x512_160k_ade20k_20210726_112106-d70e859d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b1_512x512_160k_ade20k/segformer_mit-b1_512x512_160k_ade20k_20210726_112106.log.json) | +| Segformer | MIT-B2 | 512x512 | 160000 | 3.6 | 30.88 | TITAN Xp | 45.58 | 47.03 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b2_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b2_512x512_160k_ade20k/segformer_mit-b2_512x512_160k_ade20k_20210726_112103-cbd414ac.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b2_512x512_160k_ade20k/segformer_mit-b2_512x512_160k_ade20k_20210726_112103.log.json) | +| Segformer | MIT-B3 | 512x512 | 160000 | 4.8 | 22.11 | V100 | 47.82 | 48.81 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b3_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b3_512x512_160k_ade20k/segformer_mit-b3_512x512_160k_ade20k_20210726_081410-962b98d2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b3_512x512_160k_ade20k/segformer_mit-b3_512x512_160k_ade20k_20210726_081410.log.json) | +| Segformer | MIT-B4 | 512x512 | 160000 | 6.1 | 15.45 | V100 | 48.46 | 49.76 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b4_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b4_512x512_160k_ade20k/segformer_mit-b4_512x512_160k_ade20k_20210728_183055-7f509d7d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b4_512x512_160k_ade20k/segformer_mit-b4_512x512_160k_ade20k_20210728_183055.log.json) | +| Segformer | MIT-B5 | 512x512 | 160000 | 7.2 | 11.89 | V100 | 49.13 | 50.22 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b5_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_512x512_160k_ade20k/segformer_mit-b5_512x512_160k_ade20k_20210726_145235-94cedf59.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_512x512_160k_ade20k/segformer_mit-b5_512x512_160k_ade20k_20210726_145235.log.json) | +| Segformer | MIT-B5 | 640x640 | 160000 | 11.5 | 11.30 | V100 | 49.62 | 50.36 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b5_8xb2-160k_ade20k-640x640.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_640x640_160k_ade20k/segformer_mit-b5_640x640_160k_ade20k_20210801_121243-41d2845b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_640x640_160k_ade20k/segformer_mit-b5_640x640_160k_ade20k_20210801_121243.log.json) | Evaluation with AlignedResize: @@ -91,11 +80,22 @@ test_pipeline = [ The lower fps result is caused by the sliding window inference scheme (window size:1024x1024). -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| --------- | -------- | --------- | ------: | -------: | -------------- | ----: | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Segformer | MIT-B0 | 1024x1024 | 160000 | 3.64 | 4.74 | 76.54 | 78.22 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b0_8xb1-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b0_8x1_1024x1024_160k_cityscapes/segformer_mit-b0_8x1_1024x1024_160k_cityscapes_20211208_101857-e7f88502.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b0_8x1_1024x1024_160k_cityscapes/segformer_mit-b0_8x1_1024x1024_160k_cityscapes_20211208_101857.log.json) | -| Segformer | MIT-B1 | 1024x1024 | 160000 | 4.49 | 4.3 | 78.56 | 79.73 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b1_8xb1-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b1_8x1_1024x1024_160k_cityscapes/segformer_mit-b1_8x1_1024x1024_160k_cityscapes_20211208_064213-655c7b3f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b1_8x1_1024x1024_160k_cityscapes/segformer_mit-b1_8x1_1024x1024_160k_cityscapes_20211208_064213.log.json) | -| Segformer | MIT-B2 | 1024x1024 | 160000 | 7.42 | 3.36 | 81.08 | 82.18 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b2_8xb1-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b2_8x1_1024x1024_160k_cityscapes/segformer_mit-b2_8x1_1024x1024_160k_cityscapes_20211207_134205-6096669a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b2_8x1_1024x1024_160k_cityscapes/segformer_mit-b2_8x1_1024x1024_160k_cityscapes_20211207_134205.log.json) | -| Segformer | MIT-B3 | 1024x1024 | 160000 | 10.86 | 2.53 | 81.94 | 83.14 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b3_8xb1-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b3_8x1_1024x1024_160k_cityscapes/segformer_mit-b3_8x1_1024x1024_160k_cityscapes_20211206_224823-a8f8a177.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b3_8x1_1024x1024_160k_cityscapes/segformer_mit-b3_8x1_1024x1024_160k_cityscapes_20211206_224823.log.json) | -| Segformer | MIT-B4 | 1024x1024 | 160000 | 15.07 | 1.88 | 81.89 | 83.38 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b4_8xb1-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b4_8x1_1024x1024_160k_cityscapes/segformer_mit-b4_8x1_1024x1024_160k_cityscapes_20211207_080709-07f6c333.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b4_8x1_1024x1024_160k_cityscapes/segformer_mit-b4_8x1_1024x1024_160k_cityscapes_20211207_080709.log.json) | -| Segformer | MIT-B5 | 1024x1024 | 160000 | 18.00 | 1.39 | 82.25 | 83.48 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b5_8xb1-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_8x1_1024x1024_160k_cityscapes/segformer_mit-b5_8x1_1024x1024_160k_cityscapes_20211206_072934-87a052ec.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_8x1_1024x1024_160k_cityscapes/segformer_mit-b5_8x1_1024x1024_160k_cityscapes_20211206_072934.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| --------- | -------- | --------- | ------: | -------: | -------------- | ------ | ----: | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Segformer | MIT-B0 | 1024x1024 | 160000 | 3.64 | 4.74 | V100 | 76.54 | 78.22 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b0_8xb1-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b0_8x1_1024x1024_160k_cityscapes/segformer_mit-b0_8x1_1024x1024_160k_cityscapes_20211208_101857-e7f88502.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b0_8x1_1024x1024_160k_cityscapes/segformer_mit-b0_8x1_1024x1024_160k_cityscapes_20211208_101857.log.json) | +| Segformer | MIT-B1 | 1024x1024 | 160000 | 4.49 | 4.3 | V100 | 78.56 | 79.73 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b1_8xb1-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b1_8x1_1024x1024_160k_cityscapes/segformer_mit-b1_8x1_1024x1024_160k_cityscapes_20211208_064213-655c7b3f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b1_8x1_1024x1024_160k_cityscapes/segformer_mit-b1_8x1_1024x1024_160k_cityscapes_20211208_064213.log.json) | +| Segformer | MIT-B2 | 1024x1024 | 160000 | 7.42 | 3.36 | V100 | 81.08 | 82.18 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b2_8xb1-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b2_8x1_1024x1024_160k_cityscapes/segformer_mit-b2_8x1_1024x1024_160k_cityscapes_20211207_134205-6096669a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b2_8x1_1024x1024_160k_cityscapes/segformer_mit-b2_8x1_1024x1024_160k_cityscapes_20211207_134205.log.json) | +| Segformer | MIT-B3 | 1024x1024 | 160000 | 10.86 | 2.53 | V100 | 81.94 | 83.14 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b3_8xb1-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b3_8x1_1024x1024_160k_cityscapes/segformer_mit-b3_8x1_1024x1024_160k_cityscapes_20211206_224823-a8f8a177.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b3_8x1_1024x1024_160k_cityscapes/segformer_mit-b3_8x1_1024x1024_160k_cityscapes_20211206_224823.log.json) | +| Segformer | MIT-B4 | 1024x1024 | 160000 | 15.07 | 1.88 | V100 | 81.89 | 83.38 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b4_8xb1-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b4_8x1_1024x1024_160k_cityscapes/segformer_mit-b4_8x1_1024x1024_160k_cityscapes_20211207_080709-07f6c333.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b4_8x1_1024x1024_160k_cityscapes/segformer_mit-b4_8x1_1024x1024_160k_cityscapes_20211207_080709.log.json) | +| Segformer | MIT-B5 | 1024x1024 | 160000 | 18.00 | 1.39 | V100 | 82.25 | 83.48 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b5_8xb1-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_8x1_1024x1024_160k_cityscapes/segformer_mit-b5_8x1_1024x1024_160k_cityscapes_20211206_072934-87a052ec.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_8x1_1024x1024_160k_cityscapes/segformer_mit-b5_8x1_1024x1024_160k_cityscapes_20211206_072934.log.json) | + +## Citation + +```bibtex +@article{xie2021segformer, + title={SegFormer: Simple and Efficient Design for Semantic Segmentation with Transformers}, + author={Xie, Enze and Wang, Wenhai and Yu, Zhiding and Anandkumar, Anima and Alvarez, Jose M and Luo, Ping}, + journal={arXiv preprint arXiv:2105.15203}, + year={2021} +} +``` diff --git a/configs/segformer/metafile.yaml b/configs/segformer/metafile.yaml new file mode 100644 index 0000000000..7fb38d745b --- /dev/null +++ b/configs/segformer/metafile.yaml @@ -0,0 +1,340 @@ +Collections: +- Name: Segformer + License: Apache License 2.0 + Metadata: + Training Data: + - ADE20K + - Cityscapes + Paper: + Title: 'SegFormer: Simple and Efficient Design for Semantic Segmentation with + Transformers' + URL: https://arxiv.org/abs/2105.15203 + README: configs/segformer/README.md + Frameworks: + - PyTorch +Models: +- Name: segformer_mit-b0_8xb2-160k_ade20k-512x512 + In Collection: Segformer + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 37.41 + mIoU(ms+flip): 38.34 + Config: configs/segformer/segformer_mit-b0_8xb2-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - MIT-B0 + - Segformer + Training Resources: 8x 1080 Ti GPUS + Memory (GB): 2.1 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b0_512x512_160k_ade20k/segformer_mit-b0_512x512_160k_ade20k_20210726_101530-8ffa8fda.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b0_512x512_160k_ade20k/segformer_mit-b0_512x512_160k_ade20k_20210726_101530.log.json + Paper: + Title: 'SegFormer: Simple and Efficient Design for Semantic Segmentation with + Transformers' + URL: https://arxiv.org/abs/2105.15203 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/mit.py#L246 + Framework: PyTorch +- Name: segformer_mit-b1_8xb2-160k_ade20k-512x512 + In Collection: Segformer + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 40.97 + mIoU(ms+flip): 42.54 + Config: configs/segformer/segformer_mit-b1_8xb2-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - MIT-B1 + - Segformer + Training Resources: 8x TITAN Xp GPUS + Memory (GB): 2.6 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b1_512x512_160k_ade20k/segformer_mit-b1_512x512_160k_ade20k_20210726_112106-d70e859d.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b1_512x512_160k_ade20k/segformer_mit-b1_512x512_160k_ade20k_20210726_112106.log.json + Paper: + Title: 'SegFormer: Simple and Efficient Design for Semantic Segmentation with + Transformers' + URL: https://arxiv.org/abs/2105.15203 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/mit.py#L246 + Framework: PyTorch +- Name: segformer_mit-b2_8xb2-160k_ade20k-512x512 + In Collection: Segformer + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 45.58 + mIoU(ms+flip): 47.03 + Config: configs/segformer/segformer_mit-b2_8xb2-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - MIT-B2 + - Segformer + Training Resources: 8x TITAN Xp GPUS + Memory (GB): 3.6 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b2_512x512_160k_ade20k/segformer_mit-b2_512x512_160k_ade20k_20210726_112103-cbd414ac.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b2_512x512_160k_ade20k/segformer_mit-b2_512x512_160k_ade20k_20210726_112103.log.json + Paper: + Title: 'SegFormer: Simple and Efficient Design for Semantic Segmentation with + Transformers' + URL: https://arxiv.org/abs/2105.15203 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/mit.py#L246 + Framework: PyTorch +- Name: segformer_mit-b3_8xb2-160k_ade20k-512x512 + In Collection: Segformer + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 47.82 + mIoU(ms+flip): 48.81 + Config: configs/segformer/segformer_mit-b3_8xb2-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - MIT-B3 + - Segformer + Training Resources: 8x V100 GPUS + Memory (GB): 4.8 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b3_512x512_160k_ade20k/segformer_mit-b3_512x512_160k_ade20k_20210726_081410-962b98d2.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b3_512x512_160k_ade20k/segformer_mit-b3_512x512_160k_ade20k_20210726_081410.log.json + Paper: + Title: 'SegFormer: Simple and Efficient Design for Semantic Segmentation with + Transformers' + URL: https://arxiv.org/abs/2105.15203 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/mit.py#L246 + Framework: PyTorch +- Name: segformer_mit-b4_8xb2-160k_ade20k-512x512 + In Collection: Segformer + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 48.46 + mIoU(ms+flip): 49.76 + Config: configs/segformer/segformer_mit-b4_8xb2-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - MIT-B4 + - Segformer + Training Resources: 8x V100 GPUS + Memory (GB): 6.1 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b4_512x512_160k_ade20k/segformer_mit-b4_512x512_160k_ade20k_20210728_183055-7f509d7d.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b4_512x512_160k_ade20k/segformer_mit-b4_512x512_160k_ade20k_20210728_183055.log.json + Paper: + Title: 'SegFormer: Simple and Efficient Design for Semantic Segmentation with + Transformers' + URL: https://arxiv.org/abs/2105.15203 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/mit.py#L246 + Framework: PyTorch +- Name: segformer_mit-b5_8xb2-160k_ade20k-512x512 + In Collection: Segformer + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 49.13 + mIoU(ms+flip): 50.22 + Config: configs/segformer/segformer_mit-b5_8xb2-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - MIT-B5 + - Segformer + Training Resources: 8x V100 GPUS + Memory (GB): 7.2 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_512x512_160k_ade20k/segformer_mit-b5_512x512_160k_ade20k_20210726_145235-94cedf59.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_512x512_160k_ade20k/segformer_mit-b5_512x512_160k_ade20k_20210726_145235.log.json + Paper: + Title: 'SegFormer: Simple and Efficient Design for Semantic Segmentation with + Transformers' + URL: https://arxiv.org/abs/2105.15203 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/mit.py#L246 + Framework: PyTorch +- Name: segformer_mit-b5_8xb2-160k_ade20k-640x640 + In Collection: Segformer + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 49.62 + mIoU(ms+flip): 50.36 + Config: configs/segformer/segformer_mit-b5_8xb2-160k_ade20k-640x640.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - MIT-B5 + - Segformer + Training Resources: 8x V100 GPUS + Memory (GB): 11.5 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_640x640_160k_ade20k/segformer_mit-b5_640x640_160k_ade20k_20210801_121243-41d2845b.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_640x640_160k_ade20k/segformer_mit-b5_640x640_160k_ade20k_20210801_121243.log.json + Paper: + Title: 'SegFormer: Simple and Efficient Design for Semantic Segmentation with + Transformers' + URL: https://arxiv.org/abs/2105.15203 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/mit.py#L246 + Framework: PyTorch +- Name: segformer_mit-b0_8xb1-160k_cityscapes-1024x1024 + In Collection: Segformer + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 76.54 + mIoU(ms+flip): 78.22 + Config: configs/segformer/segformer_mit-b0_8xb1-160k_cityscapes-1024x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - MIT-B0 + - Segformer + Training Resources: 8x V100 GPUS + Memory (GB): 3.64 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b0_8x1_1024x1024_160k_cityscapes/segformer_mit-b0_8x1_1024x1024_160k_cityscapes_20211208_101857-e7f88502.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b0_8x1_1024x1024_160k_cityscapes/segformer_mit-b0_8x1_1024x1024_160k_cityscapes_20211208_101857.log.json + Paper: + Title: 'SegFormer: Simple and Efficient Design for Semantic Segmentation with + Transformers' + URL: https://arxiv.org/abs/2105.15203 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/mit.py#L246 + Framework: PyTorch +- Name: segformer_mit-b1_8xb1-160k_cityscapes-1024x1024 + In Collection: Segformer + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.56 + mIoU(ms+flip): 79.73 + Config: configs/segformer/segformer_mit-b1_8xb1-160k_cityscapes-1024x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - MIT-B1 + - Segformer + Training Resources: 8x V100 GPUS + Memory (GB): 4.49 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b1_8x1_1024x1024_160k_cityscapes/segformer_mit-b1_8x1_1024x1024_160k_cityscapes_20211208_064213-655c7b3f.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b1_8x1_1024x1024_160k_cityscapes/segformer_mit-b1_8x1_1024x1024_160k_cityscapes_20211208_064213.log.json + Paper: + Title: 'SegFormer: Simple and Efficient Design for Semantic Segmentation with + Transformers' + URL: https://arxiv.org/abs/2105.15203 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/mit.py#L246 + Framework: PyTorch +- Name: segformer_mit-b2_8xb1-160k_cityscapes-1024x1024 + In Collection: Segformer + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 81.08 + mIoU(ms+flip): 82.18 + Config: configs/segformer/segformer_mit-b2_8xb1-160k_cityscapes-1024x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - MIT-B2 + - Segformer + Training Resources: 8x V100 GPUS + Memory (GB): 7.42 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b2_8x1_1024x1024_160k_cityscapes/segformer_mit-b2_8x1_1024x1024_160k_cityscapes_20211207_134205-6096669a.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b2_8x1_1024x1024_160k_cityscapes/segformer_mit-b2_8x1_1024x1024_160k_cityscapes_20211207_134205.log.json + Paper: + Title: 'SegFormer: Simple and Efficient Design for Semantic Segmentation with + Transformers' + URL: https://arxiv.org/abs/2105.15203 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/mit.py#L246 + Framework: PyTorch +- Name: segformer_mit-b3_8xb1-160k_cityscapes-1024x1024 + In Collection: Segformer + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 81.94 + mIoU(ms+flip): 83.14 + Config: configs/segformer/segformer_mit-b3_8xb1-160k_cityscapes-1024x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - MIT-B3 + - Segformer + Training Resources: 8x V100 GPUS + Memory (GB): 10.86 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b3_8x1_1024x1024_160k_cityscapes/segformer_mit-b3_8x1_1024x1024_160k_cityscapes_20211206_224823-a8f8a177.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b3_8x1_1024x1024_160k_cityscapes/segformer_mit-b3_8x1_1024x1024_160k_cityscapes_20211206_224823.log.json + Paper: + Title: 'SegFormer: Simple and Efficient Design for Semantic Segmentation with + Transformers' + URL: https://arxiv.org/abs/2105.15203 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/mit.py#L246 + Framework: PyTorch +- Name: segformer_mit-b4_8xb1-160k_cityscapes-1024x1024 + In Collection: Segformer + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 81.89 + mIoU(ms+flip): 83.38 + Config: configs/segformer/segformer_mit-b4_8xb1-160k_cityscapes-1024x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - MIT-B4 + - Segformer + Training Resources: 8x V100 GPUS + Memory (GB): 15.07 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b4_8x1_1024x1024_160k_cityscapes/segformer_mit-b4_8x1_1024x1024_160k_cityscapes_20211207_080709-07f6c333.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b4_8x1_1024x1024_160k_cityscapes/segformer_mit-b4_8x1_1024x1024_160k_cityscapes_20211207_080709.log.json + Paper: + Title: 'SegFormer: Simple and Efficient Design for Semantic Segmentation with + Transformers' + URL: https://arxiv.org/abs/2105.15203 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/mit.py#L246 + Framework: PyTorch +- Name: segformer_mit-b5_8xb1-160k_cityscapes-1024x1024 + In Collection: Segformer + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 82.25 + mIoU(ms+flip): 83.48 + Config: configs/segformer/segformer_mit-b5_8xb1-160k_cityscapes-1024x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - MIT-B5 + - Segformer + Training Resources: 8x V100 GPUS + Memory (GB): 18.0 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_8x1_1024x1024_160k_cityscapes/segformer_mit-b5_8x1_1024x1024_160k_cityscapes_20211206_072934-87a052ec.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_8x1_1024x1024_160k_cityscapes/segformer_mit-b5_8x1_1024x1024_160k_cityscapes_20211206_072934.log.json + Paper: + Title: 'SegFormer: Simple and Efficient Design for Semantic Segmentation with + Transformers' + URL: https://arxiv.org/abs/2105.15203 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/mit.py#L246 + Framework: PyTorch diff --git a/configs/segformer/segformer.yml b/configs/segformer/segformer.yml deleted file mode 100644 index 4a3818e16e..0000000000 --- a/configs/segformer/segformer.yml +++ /dev/null @@ -1,303 +0,0 @@ -Collections: -- Name: Segformer - Metadata: - Training Data: - - ADE20K - - Cityscapes - Paper: - URL: https://arxiv.org/abs/2105.15203 - Title: 'SegFormer: Simple and Efficient Design for Semantic Segmentation with - Transformers' - README: configs/segformer/README.md - Code: - URL: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/mit.py#L246 - Version: v0.17.0 - Converted From: - Code: https://github.com/NVlabs/SegFormer -Models: -- Name: segformer_mit-b0_8xb2-160k_ade20k-512x512 - In Collection: Segformer - Metadata: - backbone: MIT-B0 - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 19.49 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 2.1 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 37.41 - mIoU(ms+flip): 38.34 - Config: configs/segformer/segformer_mit-b0_8xb2-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b0_512x512_160k_ade20k/segformer_mit-b0_512x512_160k_ade20k_20210726_101530-8ffa8fda.pth -- Name: segformer_mit-b1_8xb2-160k_ade20k-512x512 - In Collection: Segformer - Metadata: - backbone: MIT-B1 - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 20.98 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 2.6 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 40.97 - mIoU(ms+flip): 42.54 - Config: configs/segformer/segformer_mit-b1_8xb2-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b1_512x512_160k_ade20k/segformer_mit-b1_512x512_160k_ade20k_20210726_112106-d70e859d.pth -- Name: segformer_mit-b2_8xb2-160k_ade20k-512x512 - In Collection: Segformer - Metadata: - backbone: MIT-B2 - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 32.38 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 3.6 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 45.58 - mIoU(ms+flip): 47.03 - Config: configs/segformer/segformer_mit-b2_8xb2-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b2_512x512_160k_ade20k/segformer_mit-b2_512x512_160k_ade20k_20210726_112103-cbd414ac.pth -- Name: segformer_mit-b3_8xb2-160k_ade20k-512x512 - In Collection: Segformer - Metadata: - backbone: MIT-B3 - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 45.23 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 4.8 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 47.82 - mIoU(ms+flip): 48.81 - Config: configs/segformer/segformer_mit-b3_8xb2-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b3_512x512_160k_ade20k/segformer_mit-b3_512x512_160k_ade20k_20210726_081410-962b98d2.pth -- Name: segformer_mit-b4_8xb2-160k_ade20k-512x512 - In Collection: Segformer - Metadata: - backbone: MIT-B4 - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 64.72 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 6.1 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 48.46 - mIoU(ms+flip): 49.76 - Config: configs/segformer/segformer_mit-b4_8xb2-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b4_512x512_160k_ade20k/segformer_mit-b4_512x512_160k_ade20k_20210728_183055-7f509d7d.pth -- Name: segformer_mit-b5_8xb2-160k_ade20k-512x512 - In Collection: Segformer - Metadata: - backbone: MIT-B5 - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 84.1 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 7.2 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 49.13 - mIoU(ms+flip): 50.22 - Config: configs/segformer/segformer_mit-b5_8xb2-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_512x512_160k_ade20k/segformer_mit-b5_512x512_160k_ade20k_20210726_145235-94cedf59.pth -- Name: segformer_mit-b5_8xb2-160k_ade20k-640x640 - In Collection: Segformer - Metadata: - backbone: MIT-B5 - crop size: (640,640) - lr schd: 160000 - inference time (ms/im): - - value: 88.5 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (640,640) - Training Memory (GB): 11.5 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 49.62 - mIoU(ms+flip): 50.36 - Config: configs/segformer/segformer_mit-b5_8xb2-160k_ade20k-640x640.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_640x640_160k_ade20k/segformer_mit-b5_640x640_160k_ade20k_20210801_121243-41d2845b.pth -- Name: segformer_mit-b0_8xb1-160k_cityscapes-1024x1024 - In Collection: Segformer - Metadata: - backbone: MIT-B0 - crop size: (1024,1024) - lr schd: 160000 - inference time (ms/im): - - value: 210.97 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (1024,1024) - Training Memory (GB): 3.64 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 76.54 - mIoU(ms+flip): 78.22 - Config: configs/segformer/segformer_mit-b0_8xb1-160k_cityscapes-1024x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b0_8x1_1024x1024_160k_cityscapes/segformer_mit-b0_8x1_1024x1024_160k_cityscapes_20211208_101857-e7f88502.pth -- Name: segformer_mit-b1_8xb1-160k_cityscapes-1024x1024 - In Collection: Segformer - Metadata: - backbone: MIT-B1 - crop size: (1024,1024) - lr schd: 160000 - inference time (ms/im): - - value: 232.56 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (1024,1024) - Training Memory (GB): 4.49 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.56 - mIoU(ms+flip): 79.73 - Config: configs/segformer/segformer_mit-b1_8xb1-160k_cityscapes-1024x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b1_8x1_1024x1024_160k_cityscapes/segformer_mit-b1_8x1_1024x1024_160k_cityscapes_20211208_064213-655c7b3f.pth -- Name: segformer_mit-b2_8xb1-160k_cityscapes-1024x1024 - In Collection: Segformer - Metadata: - backbone: MIT-B2 - crop size: (1024,1024) - lr schd: 160000 - inference time (ms/im): - - value: 297.62 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (1024,1024) - Training Memory (GB): 7.42 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 81.08 - mIoU(ms+flip): 82.18 - Config: configs/segformer/segformer_mit-b2_8xb1-160k_cityscapes-1024x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b2_8x1_1024x1024_160k_cityscapes/segformer_mit-b2_8x1_1024x1024_160k_cityscapes_20211207_134205-6096669a.pth -- Name: segformer_mit-b3_8xb1-160k_cityscapes-1024x1024 - In Collection: Segformer - Metadata: - backbone: MIT-B3 - crop size: (1024,1024) - lr schd: 160000 - inference time (ms/im): - - value: 395.26 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (1024,1024) - Training Memory (GB): 10.86 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 81.94 - mIoU(ms+flip): 83.14 - Config: configs/segformer/segformer_mit-b3_8xb1-160k_cityscapes-1024x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b3_8x1_1024x1024_160k_cityscapes/segformer_mit-b3_8x1_1024x1024_160k_cityscapes_20211206_224823-a8f8a177.pth -- Name: segformer_mit-b4_8xb1-160k_cityscapes-1024x1024 - In Collection: Segformer - Metadata: - backbone: MIT-B4 - crop size: (1024,1024) - lr schd: 160000 - inference time (ms/im): - - value: 531.91 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (1024,1024) - Training Memory (GB): 15.07 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 81.89 - mIoU(ms+flip): 83.38 - Config: configs/segformer/segformer_mit-b4_8xb1-160k_cityscapes-1024x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b4_8x1_1024x1024_160k_cityscapes/segformer_mit-b4_8x1_1024x1024_160k_cityscapes_20211207_080709-07f6c333.pth -- Name: segformer_mit-b5_8xb1-160k_cityscapes-1024x1024 - In Collection: Segformer - Metadata: - backbone: MIT-B5 - crop size: (1024,1024) - lr schd: 160000 - inference time (ms/im): - - value: 719.42 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (1024,1024) - Training Memory (GB): 18.0 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 82.25 - mIoU(ms+flip): 83.48 - Config: configs/segformer/segformer_mit-b5_8xb1-160k_cityscapes-1024x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_8x1_1024x1024_160k_cityscapes/segformer_mit-b5_8x1_1024x1024_160k_cityscapes_20211206_072934-87a052ec.pth diff --git a/configs/segmenter/README.md b/configs/segmenter/README.md index 984ef9f510..a9a64ae421 100644 --- a/configs/segmenter/README.md +++ b/configs/segmenter/README.md @@ -1,6 +1,6 @@ # Segmenter -[Segmenter: Transformer for Semantic Segmentation](https://arxiv.org/abs/2105.05633) +> [Segmenter: Transformer for Semantic Segmentation](https://arxiv.org/abs/2105.05633) ## Introduction @@ -22,16 +22,6 @@ Image segmentation is often ambiguous at the level of individual image patches a -```bibtex -@inproceedings{strudel2021segmenter, - title={Segmenter: Transformer for semantic segmentation}, - author={Strudel, Robin and Garcia, Ricardo and Laptev, Ivan and Schmid, Cordelia}, - booktitle={Proceedings of the IEEE/CVF International Conference on Computer Vision}, - pages={7262--7272}, - year={2021} -} -``` - ## Usage We have provided pretrained models converted from [ViT-AugReg](https://github.com/rwightman/pytorch-image-models/blob/f55c22bebf9d8afc449d317a723231ef72e0d662/timm/models/vision_transformer.py#L54-L106). @@ -54,21 +44,33 @@ This script convert model from `PRETRAIN_PATH` and store the converted model in In our default setting, pretrained models and their corresponding [ViT-AugReg](https://github.com/rwightman/pytorch-image-models/blob/f55c22bebf9d8afc449d317a723231ef72e0d662/timm/models/vision_transformer.py#L54-L106) models could be defined below: -| pretrained models | original models | -| --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| vit_tiny_p16_384.pth | ['vit_tiny_patch16_384'](https://storage.googleapis.com/vit_models/augreg/Ti_16-i21k-300ep-lr_0.001-aug_none-wd_0.03-do_0.0-sd_0.0--imagenet2012-steps_20k-lr_0.03-res_384.npz) | -| vit_small_p16_384.pth | ['vit_small_patch16_384'](https://storage.googleapis.com/vit_models/augreg/S_16-i21k-300ep-lr_0.001-aug_light1-wd_0.03-do_0.0-sd_0.0--imagenet2012-steps_20k-lr_0.03-res_384.npz) | -| vit_base_p16_384.pth | ['vit_base_patch16_384'](https://storage.googleapis.com/vit_models/augreg/B_16-i21k-300ep-lr_0.001-aug_medium1-wd_0.1-do_0.0-sd_0.0--imagenet2012-steps_20k-lr_0.01-res_384.npz) | -| vit_large_p16_384.pth | ['vit_large_patch16_384'](https://storage.googleapis.com/vit_models/augreg/L_16-i21k-300ep-lr_0.001-aug_medium1-wd_0.1-do_0.1-sd_0.1--imagenet2012-steps_20k-lr_0.01-res_384.npz) | +| pretrained models | original models | +| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| vit_tiny_p16_384.pth | [vit_tiny_patch16_384](https://storage.googleapis.com/vit_models/augreg/Ti_16-i21k-300ep-lr_0.001-aug_none-wd_0.03-do_0.0-sd_0.0--imagenet2012-steps_20k-lr_0.03-res_384.npz) | +| vit_small_p16_384.pth | [vit_small_patch16_384](https://storage.googleapis.com/vit_models/augreg/S_16-i21k-300ep-lr_0.001-aug_light1-wd_0.03-do_0.0-sd_0.0--imagenet2012-steps_20k-lr_0.03-res_384.npz) | +| vit_base_p16_384.pth | [vit_base_patch16_384](https://storage.googleapis.com/vit_models/augreg/B_16-i21k-300ep-lr_0.001-aug_medium1-wd_0.1-do_0.0-sd_0.0--imagenet2012-steps_20k-lr_0.01-res_384.npz) | +| vit_large_p16_384.pth | [vit_large_patch16_384](https://storage.googleapis.com/vit_models/augreg/L_16-i21k-300ep-lr_0.001-aug_medium1-wd_0.1-do_0.1-sd_0.1--imagenet2012-steps_20k-lr_0.01-res_384.npz) | ## Results and models ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ---------------- | -------- | --------- | ------- | -------- | -------------- | ----- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Segmenter Mask | ViT-T_16 | 512x512 | 160000 | 1.21 | 27.98 | 39.99 | 40.83 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segmenter/segmenter_vit-t_mask_8xb1-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-t_mask_8x1_512x512_160k_ade20k/segmenter_vit-t_mask_8x1_512x512_160k_ade20k_20220105_151706-ffcf7509.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-t_mask_8x1_512x512_160k_ade20k/segmenter_vit-t_mask_8x1_512x512_160k_ade20k_20220105_151706.log.json) | -| Segmenter Linear | ViT-S_16 | 512x512 | 160000 | 1.78 | 28.07 | 45.75 | 46.82 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segmenter/segmenter_vit-s_fcn_8xb1-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-s_linear_8x1_512x512_160k_ade20k/segmenter_vit-s_linear_8x1_512x512_160k_ade20k_20220105_151713-39658c46.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-s_linear_8x1_512x512_160k_ade20k/segmenter_vit-s_linear_8x1_512x512_160k_ade20k_20220105_151713.log.json) | -| Segmenter Mask | ViT-S_16 | 512x512 | 160000 | 2.03 | 24.80 | 46.19 | 47.85 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segmenter/segmenter_vit-s_mask_8xb1-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-s_mask_8x1_512x512_160k_ade20k/segmenter_vit-s_mask_8x1_512x512_160k_ade20k_20220105_151706-511bb103.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-s_mask_8x1_512x512_160k_ade20k/segmenter_vit-s_mask_8x1_512x512_160k_ade20k_20220105_151706.log.json) | -| Segmenter Mask | ViT-B_16 | 512x512 | 160000 | 4.20 | 13.20 | 49.60 | 51.07 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segmenter/segmenter_vit-b_mask_8xb1-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-b_mask_8x1_512x512_160k_ade20k/segmenter_vit-b_mask_8x1_512x512_160k_ade20k_20220105_151706-bc533b08.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-b_mask_8x1_512x512_160k_ade20k/segmenter_vit-b_mask_8x1_512x512_160k_ade20k_20220105_151706.log.json) | -| Segmenter Mask | ViT-L_16 | 640x640 | 160000 | 16.56 | 2.62 | 52.16 | 53.65 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segmenter/segmenter_vit-l_mask_8xb1-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-l_mask_8x1_512x512_160k_ade20k/segmenter_vit-l_mask_8x1_512x512_160k_ade20k_20220105_162750-7ef345be.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-l_mask_8x1_512x512_160k_ade20k/segmenter_vit-l_mask_8x1_512x512_160k_ade20k_20220105_162750.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------------- | -------- | --------- | ------- | -------- | -------------- | ------ | ----- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Segmenter Mask | ViT-T_16 | 512x512 | 160000 | 1.21 | 27.98 | V100 | 39.99 | 40.83 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segmenter/segmenter_vit-t_mask_8xb1-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-t_mask_8x1_512x512_160k_ade20k/segmenter_vit-t_mask_8x1_512x512_160k_ade20k_20220105_151706-ffcf7509.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-t_mask_8x1_512x512_160k_ade20k/segmenter_vit-t_mask_8x1_512x512_160k_ade20k_20220105_151706.log.json) | +| Segmenter Linear | ViT-S_16 | 512x512 | 160000 | 1.78 | 28.07 | V100 | 45.75 | 46.82 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segmenter/segmenter_vit-s_fcn_8xb1-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-s_linear_8x1_512x512_160k_ade20k/segmenter_vit-s_linear_8x1_512x512_160k_ade20k_20220105_151713-39658c46.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-s_linear_8x1_512x512_160k_ade20k/segmenter_vit-s_linear_8x1_512x512_160k_ade20k_20220105_151713.log.json) | +| Segmenter Mask | ViT-S_16 | 512x512 | 160000 | 2.03 | 24.80 | V100 | 46.19 | 47.85 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segmenter/segmenter_vit-s_mask_8xb1-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-s_mask_8x1_512x512_160k_ade20k/segmenter_vit-s_mask_8x1_512x512_160k_ade20k_20220105_151706-511bb103.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-s_mask_8x1_512x512_160k_ade20k/segmenter_vit-s_mask_8x1_512x512_160k_ade20k_20220105_151706.log.json) | +| Segmenter Mask | ViT-B_16 | 512x512 | 160000 | 4.20 | 13.20 | V100 | 49.60 | 51.07 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segmenter/segmenter_vit-b_mask_8xb1-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-b_mask_8x1_512x512_160k_ade20k/segmenter_vit-b_mask_8x1_512x512_160k_ade20k_20220105_151706-bc533b08.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-b_mask_8x1_512x512_160k_ade20k/segmenter_vit-b_mask_8x1_512x512_160k_ade20k_20220105_151706.log.json) | +| Segmenter Mask | ViT-L_16 | 640x640 | 160000 | 16.56 | 2.62 | V100 | 52.16 | 53.65 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segmenter/segmenter_vit-l_mask_8xb1-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-l_mask_8x1_512x512_160k_ade20k/segmenter_vit-l_mask_8x1_512x512_160k_ade20k_20220105_162750-7ef345be.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-l_mask_8x1_512x512_160k_ade20k/segmenter_vit-l_mask_8x1_512x512_160k_ade20k_20220105_162750.log.json) | + +## Citation + +```bibtex +@inproceedings{strudel2021segmenter, + title={Segmenter: Transformer for semantic segmentation}, + author={Strudel, Robin and Garcia, Ricardo and Laptev, Ivan and Schmid, Cordelia}, + booktitle={Proceedings of the IEEE/CVF International Conference on Computer Vision}, + pages={7262--7272}, + year={2021} +} +``` diff --git a/configs/segmenter/metafile.yaml b/configs/segmenter/metafile.yaml new file mode 100644 index 0000000000..ff2aa448bb --- /dev/null +++ b/configs/segmenter/metafile.yaml @@ -0,0 +1,138 @@ +Collections: +- Name: Segmenter + License: Apache License 2.0 + Metadata: + Training Data: + - ADE20K + Paper: + Title: 'Segmenter: Transformer for Semantic Segmentation' + URL: https://arxiv.org/abs/2105.05633 + README: configs/segmenter/README.md + Frameworks: + - PyTorch +Models: +- Name: segmenter_vit-t_mask_8xb1-160k_ade20k-512x512 + In Collection: Segmenter + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 39.99 + mIoU(ms+flip): 40.83 + Config: configs/segmenter/segmenter_vit-t_mask_8xb1-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 8 + Architecture: + - ViT-T_16 + - Segmenter + - Mask + Training Resources: 8x V100 GPUS + Memory (GB): 1.21 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-t_mask_8x1_512x512_160k_ade20k/segmenter_vit-t_mask_8x1_512x512_160k_ade20k_20220105_151706-ffcf7509.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-t_mask_8x1_512x512_160k_ade20k/segmenter_vit-t_mask_8x1_512x512_160k_ade20k_20220105_151706.log.json + Paper: + Title: 'Segmenter: Transformer for Semantic Segmentation' + URL: https://arxiv.org/abs/2105.05633 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.21.0/mmseg/models/decode_heads/segmenter_mask_head.py#L15 + Framework: PyTorch +- Name: segmenter_vit-s_fcn_8xb1-160k_ade20k-512x512 + In Collection: Segmenter + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 45.75 + mIoU(ms+flip): 46.82 + Config: configs/segmenter/segmenter_vit-s_fcn_8xb1-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 8 + Architecture: + - ViT-S_16 + - Segmenter + - Linear + Training Resources: 8x V100 GPUS + Memory (GB): 1.78 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-s_linear_8x1_512x512_160k_ade20k/segmenter_vit-s_linear_8x1_512x512_160k_ade20k_20220105_151713-39658c46.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-s_linear_8x1_512x512_160k_ade20k/segmenter_vit-s_linear_8x1_512x512_160k_ade20k_20220105_151713.log.json + Paper: + Title: 'Segmenter: Transformer for Semantic Segmentation' + URL: https://arxiv.org/abs/2105.05633 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.21.0/mmseg/models/decode_heads/segmenter_mask_head.py#L15 + Framework: PyTorch +- Name: segmenter_vit-s_mask_8xb1-160k_ade20k-512x512 + In Collection: Segmenter + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 46.19 + mIoU(ms+flip): 47.85 + Config: configs/segmenter/segmenter_vit-s_mask_8xb1-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 8 + Architecture: + - ViT-S_16 + - Segmenter + - Mask + Training Resources: 8x V100 GPUS + Memory (GB): 2.03 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-s_mask_8x1_512x512_160k_ade20k/segmenter_vit-s_mask_8x1_512x512_160k_ade20k_20220105_151706-511bb103.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-s_mask_8x1_512x512_160k_ade20k/segmenter_vit-s_mask_8x1_512x512_160k_ade20k_20220105_151706.log.json + Paper: + Title: 'Segmenter: Transformer for Semantic Segmentation' + URL: https://arxiv.org/abs/2105.05633 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.21.0/mmseg/models/decode_heads/segmenter_mask_head.py#L15 + Framework: PyTorch +- Name: segmenter_vit-b_mask_8xb1-160k_ade20k-512x512 + In Collection: Segmenter + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 49.6 + mIoU(ms+flip): 51.07 + Config: configs/segmenter/segmenter_vit-b_mask_8xb1-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 8 + Architecture: + - ViT-B_16 + - Segmenter + - Mask + Training Resources: 8x V100 GPUS + Memory (GB): 4.2 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-b_mask_8x1_512x512_160k_ade20k/segmenter_vit-b_mask_8x1_512x512_160k_ade20k_20220105_151706-bc533b08.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-b_mask_8x1_512x512_160k_ade20k/segmenter_vit-b_mask_8x1_512x512_160k_ade20k_20220105_151706.log.json + Paper: + Title: 'Segmenter: Transformer for Semantic Segmentation' + URL: https://arxiv.org/abs/2105.05633 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.21.0/mmseg/models/decode_heads/segmenter_mask_head.py#L15 + Framework: PyTorch +- Name: segmenter_vit-l_mask_8xb1-160k_ade20k-512x512 + In Collection: Segmenter + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 52.16 + mIoU(ms+flip): 53.65 + Config: configs/segmenter/segmenter_vit-l_mask_8xb1-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 8 + Architecture: + - ViT-L_16 + - Segmenter + - Mask + Training Resources: 8x V100 GPUS + Memory (GB): 16.56 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-l_mask_8x1_512x512_160k_ade20k/segmenter_vit-l_mask_8x1_512x512_160k_ade20k_20220105_162750-7ef345be.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-l_mask_8x1_512x512_160k_ade20k/segmenter_vit-l_mask_8x1_512x512_160k_ade20k_20220105_162750.log.json + Paper: + Title: 'Segmenter: Transformer for Semantic Segmentation' + URL: https://arxiv.org/abs/2105.05633 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.21.0/mmseg/models/decode_heads/segmenter_mask_head.py#L15 + Framework: PyTorch diff --git a/configs/segmenter/segmenter.yml b/configs/segmenter/segmenter.yml deleted file mode 100644 index 1069f003b7..0000000000 --- a/configs/segmenter/segmenter.yml +++ /dev/null @@ -1,125 +0,0 @@ -Collections: -- Name: Segmenter - Metadata: - Training Data: - - ADE20K - Paper: - URL: https://arxiv.org/abs/2105.05633 - Title: 'Segmenter: Transformer for Semantic Segmentation' - README: configs/segmenter/README.md - Code: - URL: https://github.com/open-mmlab/mmsegmentation/blob/v0.21.0/mmseg/models/decode_heads/segmenter_mask_head.py#L15 - Version: v0.21.0 - Converted From: - Code: https://github.com/rstrudel/segmenter -Models: -- Name: segmenter_vit-t_mask_8xb1-160k_ade20k-512x512 - In Collection: Segmenter - Metadata: - backbone: ViT-T_16 - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 35.74 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 1.21 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 39.99 - mIoU(ms+flip): 40.83 - Config: configs/segmenter/segmenter_vit-t_mask_8xb1-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-t_mask_8x1_512x512_160k_ade20k/segmenter_vit-t_mask_8x1_512x512_160k_ade20k_20220105_151706-ffcf7509.pth -- Name: segmenter_vit-s_fcn_8xb1-160k_ade20k-512x512 - In Collection: Segmenter - Metadata: - backbone: ViT-S_16 - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 35.63 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 1.78 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 45.75 - mIoU(ms+flip): 46.82 - Config: configs/segmenter/segmenter_vit-s_fcn_8xb1-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-s_linear_8x1_512x512_160k_ade20k/segmenter_vit-s_linear_8x1_512x512_160k_ade20k_20220105_151713-39658c46.pth -- Name: segmenter_vit-s_mask_8xb1-160k_ade20k-512x512 - In Collection: Segmenter - Metadata: - backbone: ViT-S_16 - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 40.32 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 2.03 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 46.19 - mIoU(ms+flip): 47.85 - Config: configs/segmenter/segmenter_vit-s_mask_8xb1-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-s_mask_8x1_512x512_160k_ade20k/segmenter_vit-s_mask_8x1_512x512_160k_ade20k_20220105_151706-511bb103.pth -- Name: segmenter_vit-b_mask_8xb1-160k_ade20k-512x512 - In Collection: Segmenter - Metadata: - backbone: ViT-B_16 - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 75.76 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 4.2 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 49.6 - mIoU(ms+flip): 51.07 - Config: configs/segmenter/segmenter_vit-b_mask_8xb1-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-b_mask_8x1_512x512_160k_ade20k/segmenter_vit-b_mask_8x1_512x512_160k_ade20k_20220105_151706-bc533b08.pth -- Name: segmenter_vit-l_mask_8xb1-160k_ade20k-512x512 - In Collection: Segmenter - Metadata: - backbone: ViT-L_16 - crop size: (640,640) - lr schd: 160000 - inference time (ms/im): - - value: 381.68 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (640,640) - Training Memory (GB): 16.56 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 52.16 - mIoU(ms+flip): 53.65 - Config: configs/segmenter/segmenter_vit-l_mask_8xb1-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-l_mask_8x1_512x512_160k_ade20k/segmenter_vit-l_mask_8x1_512x512_160k_ade20k_20220105_162750-7ef345be.pth diff --git a/configs/segnext/README.md b/configs/segnext/README.md index 315f4e23e8..06b63be546 100644 --- a/configs/segnext/README.md +++ b/configs/segnext/README.md @@ -26,12 +26,12 @@ We present SegNeXt, a simple convolutional network architecture for semantic seg ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------- | -------- | --------- | ------- | -------- | -------------- | ----- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| SegNeXt | MSCAN-T | 512x512 | 160000 | 17.88 | 52.38 | 41.50 | 42.59 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segnext/segnext_mscan-t_1xb16-adamw-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-t_1x16_512x512_adamw_160k_ade20k/segnext_mscan-t_1x16_512x512_adamw_160k_ade20k_20230210_140244-05bd8466.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-t_1x16_512x512_adamw_160k_ade20k/segnext_mscan-t_1x16_512x512_adamw_160k_ade20k_20230210_140244.log.json) | -| SegNeXt | MSCAN-S | 512x512 | 160000 | 21.47 | 42.27 | 44.16 | 45.81 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segnext/segnext_mscan-s_1xb16-adamw-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-s_1x16_512x512_adamw_160k_ade20k/segnext_mscan-s_1x16_512x512_adamw_160k_ade20k_20230214_113014-43013668.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-s_1x16_512x512_adamw_160k_ade20k/segnext_mscan-s_1x16_512x512_adamw_160k_ade20k_20230214_113014.log.json) | -| SegNeXt | MSCAN-B | 512x512 | 160000 | 31.03 | 35.15 | 48.03 | 49.68 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segnext/segnext_mscan-b_1xb16-adamw-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-b_1x16_512x512_adamw_160k_ade20k/segnext_mscan-b_1x16_512x512_adamw_160k_ade20k_20230209_172053-b6f6c70c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-b_1x16_512x512_adamw_160k_ade20k/segnext_mscan-b_1x16_512x512_adamw_160k_ade20k_20230209_172053.log.json) | -| SegNeXt | MSCAN-L | 512x512 | 160000 | 43.32 | 22.91 | 50.99 | 52.10 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segnext/segnext_mscan-l_1xb16-adamw-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-l_1x16_512x512_adamw_160k_ade20k/segnext_mscan-l_1x16_512x512_adamw_160k_ade20k_20230209_172055-19b14b63.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-l_1x16_512x512_adamw_160k_ade20k/segnext_mscan-l_1x16_512x512_adamw_160k_ade20k_20230209_172055.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------- | -------- | --------- | ------- | -------- | -------------- | ------ | ----- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| SegNeXt | MSCAN-T | 512x512 | 160000 | 17.88 | 52.38 | A100 | 41.50 | 42.59 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segnext/segnext_mscan-t_1xb16-adamw-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-t_1x16_512x512_adamw_160k_ade20k/segnext_mscan-t_1x16_512x512_adamw_160k_ade20k_20230210_140244-05bd8466.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-t_1x16_512x512_adamw_160k_ade20k/segnext_mscan-t_1x16_512x512_adamw_160k_ade20k_20230210_140244.log.json) | +| SegNeXt | MSCAN-S | 512x512 | 160000 | 21.47 | 42.27 | A100 | 44.16 | 45.81 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segnext/segnext_mscan-s_1xb16-adamw-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-s_1x16_512x512_adamw_160k_ade20k/segnext_mscan-s_1x16_512x512_adamw_160k_ade20k_20230214_113014-43013668.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-s_1x16_512x512_adamw_160k_ade20k/segnext_mscan-s_1x16_512x512_adamw_160k_ade20k_20230214_113014.log.json) | +| SegNeXt | MSCAN-B | 512x512 | 160000 | 31.03 | 35.15 | A100 | 48.03 | 49.68 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segnext/segnext_mscan-b_1xb16-adamw-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-b_1x16_512x512_adamw_160k_ade20k/segnext_mscan-b_1x16_512x512_adamw_160k_ade20k_20230209_172053-b6f6c70c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-b_1x16_512x512_adamw_160k_ade20k/segnext_mscan-b_1x16_512x512_adamw_160k_ade20k_20230209_172053.log.json) | +| SegNeXt | MSCAN-L | 512x512 | 160000 | 43.32 | 22.91 | A100 | 50.99 | 52.10 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segnext/segnext_mscan-l_1xb16-adamw-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-l_1x16_512x512_adamw_160k_ade20k/segnext_mscan-l_1x16_512x512_adamw_160k_ade20k_20230209_172055-19b14b63.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-l_1x16_512x512_adamw_160k_ade20k/segnext_mscan-l_1x16_512x512_adamw_160k_ade20k_20230209_172055.log.json) | Note: diff --git a/configs/segnext/metafile.yaml b/configs/segnext/metafile.yaml new file mode 100644 index 0000000000..faa11c9784 --- /dev/null +++ b/configs/segnext/metafile.yaml @@ -0,0 +1,109 @@ +Collections: +- Name: SegNeXt + License: Apache License 2.0 + Metadata: + Training Data: + - ADE20K + Paper: + Title: 'SegNeXt: Rethinking Convolutional Attention Design for Semantic Segmentation' + URL: https://arxiv.org/abs/2209.08575 + README: configs/segnext/README.md + Frameworks: + - PyTorch +Models: +- Name: segnext_mscan-t_1xb16-adamw-160k_ade20k-512x512 + In Collection: SegNeXt + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 41.5 + mIoU(ms+flip): 42.59 + Config: configs/segnext/segnext_mscan-t_1xb16-adamw-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - MSCAN-T + - SegNeXt + Training Resources: 1x A100 GPUS + Memory (GB): 17.88 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-t_1x16_512x512_adamw_160k_ade20k/segnext_mscan-t_1x16_512x512_adamw_160k_ade20k_20230210_140244-05bd8466.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-t_1x16_512x512_adamw_160k_ade20k/segnext_mscan-t_1x16_512x512_adamw_160k_ade20k_20230210_140244.log.json + Paper: + Title: 'SegNeXt: Rethinking Convolutional Attention Design for Semantic Segmentation' + URL: https://arxiv.org/abs/2209.08575 + Code: https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/models/backbones/mscan.py#L328 + Framework: PyTorch +- Name: segnext_mscan-s_1xb16-adamw-160k_ade20k-512x512 + In Collection: SegNeXt + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 44.16 + mIoU(ms+flip): 45.81 + Config: configs/segnext/segnext_mscan-s_1xb16-adamw-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - MSCAN-S + - SegNeXt + Training Resources: 1x A100 GPUS + Memory (GB): 21.47 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-s_1x16_512x512_adamw_160k_ade20k/segnext_mscan-s_1x16_512x512_adamw_160k_ade20k_20230214_113014-43013668.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-s_1x16_512x512_adamw_160k_ade20k/segnext_mscan-s_1x16_512x512_adamw_160k_ade20k_20230214_113014.log.json + Paper: + Title: 'SegNeXt: Rethinking Convolutional Attention Design for Semantic Segmentation' + URL: https://arxiv.org/abs/2209.08575 + Code: https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/models/backbones/mscan.py#L328 + Framework: PyTorch +- Name: segnext_mscan-b_1xb16-adamw-160k_ade20k-512x512 + In Collection: SegNeXt + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 48.03 + mIoU(ms+flip): 49.68 + Config: configs/segnext/segnext_mscan-b_1xb16-adamw-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - MSCAN-B + - SegNeXt + Training Resources: 1x A100 GPUS + Memory (GB): 31.03 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-b_1x16_512x512_adamw_160k_ade20k/segnext_mscan-b_1x16_512x512_adamw_160k_ade20k_20230209_172053-b6f6c70c.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-b_1x16_512x512_adamw_160k_ade20k/segnext_mscan-b_1x16_512x512_adamw_160k_ade20k_20230209_172053.log.json + Paper: + Title: 'SegNeXt: Rethinking Convolutional Attention Design for Semantic Segmentation' + URL: https://arxiv.org/abs/2209.08575 + Code: https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/models/backbones/mscan.py#L328 + Framework: PyTorch +- Name: segnext_mscan-l_1xb16-adamw-160k_ade20k-512x512 + In Collection: SegNeXt + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 50.99 + mIoU(ms+flip): 52.1 + Config: configs/segnext/segnext_mscan-l_1xb16-adamw-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - MSCAN-L + - SegNeXt + Training Resources: 1x A100 GPUS + Memory (GB): 43.32 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-l_1x16_512x512_adamw_160k_ade20k/segnext_mscan-l_1x16_512x512_adamw_160k_ade20k_20230209_172055-19b14b63.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-l_1x16_512x512_adamw_160k_ade20k/segnext_mscan-l_1x16_512x512_adamw_160k_ade20k_20230209_172055.log.json + Paper: + Title: 'SegNeXt: Rethinking Convolutional Attention Design for Semantic Segmentation' + URL: https://arxiv.org/abs/2209.08575 + Code: https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/models/backbones/mscan.py#L328 + Framework: PyTorch diff --git a/configs/segnext/segnext.yml b/configs/segnext/segnext.yml deleted file mode 100644 index 3bcdea8403..0000000000 --- a/configs/segnext/segnext.yml +++ /dev/null @@ -1,103 +0,0 @@ -Collections: -- Name: SegNeXt - Metadata: - Training Data: - - ADE20K - Paper: - URL: https://arxiv.org/abs/2209.08575 - Title: 'SegNeXt: Rethinking Convolutional Attention Design for Semantic Segmentation' - README: configs/segnext/README.md - Code: - URL: https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/models/backbones/mscan.py#L328 - Version: dev-1.x - Converted From: - Code: https://github.com/visual-attention-network/segnext -Models: -- Name: segnext_mscan-t_1xb16-adamw-160k_ade20k-512x512 - In Collection: SegNeXt - Metadata: - backbone: MSCAN-T - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 19.09 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 17.88 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 41.5 - mIoU(ms+flip): 42.59 - Config: configs/segnext/segnext_mscan-t_1xb16-adamw-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-t_1x16_512x512_adamw_160k_ade20k/segnext_mscan-t_1x16_512x512_adamw_160k_ade20k_20230210_140244-05bd8466.pth -- Name: segnext_mscan-s_1xb16-adamw-160k_ade20k-512x512 - In Collection: SegNeXt - Metadata: - backbone: MSCAN-S - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 23.66 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 21.47 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 44.16 - mIoU(ms+flip): 45.81 - Config: configs/segnext/segnext_mscan-s_1xb16-adamw-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-s_1x16_512x512_adamw_160k_ade20k/segnext_mscan-s_1x16_512x512_adamw_160k_ade20k_20230214_113014-43013668.pth -- Name: segnext_mscan-b_1xb16-adamw-160k_ade20k-512x512 - In Collection: SegNeXt - Metadata: - backbone: MSCAN-B - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 28.45 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 31.03 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 48.03 - mIoU(ms+flip): 49.68 - Config: configs/segnext/segnext_mscan-b_1xb16-adamw-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-b_1x16_512x512_adamw_160k_ade20k/segnext_mscan-b_1x16_512x512_adamw_160k_ade20k_20230209_172053-b6f6c70c.pth -- Name: segnext_mscan-l_1xb16-adamw-160k_ade20k-512x512 - In Collection: SegNeXt - Metadata: - backbone: MSCAN-L - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 43.65 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 43.32 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 50.99 - mIoU(ms+flip): 52.1 - Config: configs/segnext/segnext_mscan-l_1xb16-adamw-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-l_1x16_512x512_adamw_160k_ade20k/segnext_mscan-l_1x16_512x512_adamw_160k_ade20k_20230209_172055-19b14b63.pth diff --git a/configs/sem_fpn/README.md b/configs/sem_fpn/README.md index fcef72d2a5..8bbbd0eee0 100644 --- a/configs/sem_fpn/README.md +++ b/configs/sem_fpn/README.md @@ -1,6 +1,6 @@ # Semantic FPN -[Panoptic Feature Pyramid Networks](https://arxiv.org/abs/1901.02446) +> [Panoptic Feature Pyramid Networks](https://arxiv.org/abs/1901.02446) ## Introduction @@ -22,6 +22,22 @@ The recently introduced panoptic segmentation task has renewed our community's i +## Results and models + +### Cityscapes + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------: | -------------- | ------ | ----: | ------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| FPN | R-50 | 512x1024 | 80000 | 2.8 | 13.54 | V100 | 74.52 | 76.08 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/sem_fpn/fpn_r50_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r50_512x1024_80k_cityscapes/fpn_r50_512x1024_80k_cityscapes_20200717_021437-94018a0d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r50_512x1024_80k_cityscapes/fpn_r50_512x1024_80k_cityscapes-20200717_021437.log.json) | +| FPN | R-101 | 512x1024 | 80000 | 3.9 | 10.29 | V100 | 75.80 | 77.40 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/sem_fpn/fpn_r101_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r101_512x1024_80k_cityscapes/fpn_r101_512x1024_80k_cityscapes_20200717_012416-c5800d4c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r101_512x1024_80k_cityscapes/fpn_r101_512x1024_80k_cityscapes-20200717_012416.log.json) | + +### ADE20K + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------: | -------------- | ------ | ----: | ------------- | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| FPN | R-50 | 512x512 | 160000 | 4.9 | 55.77 | V100 | 37.49 | 39.09 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/sem_fpn/fpn_r50_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r50_512x512_160k_ade20k/fpn_r50_512x512_160k_ade20k_20200718_131734-5b5a6ab9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r50_512x512_160k_ade20k/fpn_r50_512x512_160k_ade20k-20200718_131734.log.json) | +| FPN | R-101 | 512x512 | 160000 | 5.9 | 40.58 | V100 | 39.35 | 40.72 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/sem_fpn/fpn_r101_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r101_512x512_160k_ade20k/fpn_r101_512x512_160k_ade20k_20200718_131734-306b5004.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r101_512x512_160k_ade20k/fpn_r101_512x512_160k_ade20k-20200718_131734.log.json) | + ## Citation ```bibtex @@ -33,19 +49,3 @@ The recently introduced panoptic segmentation task has renewed our community's i year={2019} } ``` - -## Results and models - -### Cityscapes - -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------: | -------------- | ----: | ------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| FPN | R-50 | 512x1024 | 80000 | 2.8 | 13.54 | 74.52 | 76.08 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/sem_fpn/fpn_r50_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r50_512x1024_80k_cityscapes/fpn_r50_512x1024_80k_cityscapes_20200717_021437-94018a0d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r50_512x1024_80k_cityscapes/fpn_r50_512x1024_80k_cityscapes-20200717_021437.log.json) | -| FPN | R-101 | 512x1024 | 80000 | 3.9 | 10.29 | 75.80 | 77.40 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/sem_fpn/fpn_r101_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r101_512x1024_80k_cityscapes/fpn_r101_512x1024_80k_cityscapes_20200717_012416-c5800d4c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r101_512x1024_80k_cityscapes/fpn_r101_512x1024_80k_cityscapes-20200717_012416.log.json) | - -### ADE20K - -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------: | -------------- | ----: | ------------- | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| FPN | R-50 | 512x512 | 160000 | 4.9 | 55.77 | 37.49 | 39.09 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/sem_fpn/fpn_r50_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r50_512x512_160k_ade20k/fpn_r50_512x512_160k_ade20k_20200718_131734-5b5a6ab9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r50_512x512_160k_ade20k/fpn_r50_512x512_160k_ade20k-20200718_131734.log.json) | -| FPN | R-101 | 512x512 | 160000 | 5.9 | 40.58 | 39.35 | 40.72 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/sem_fpn/fpn_r101_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r101_512x512_160k_ade20k/fpn_r101_512x512_160k_ade20k_20200718_131734-306b5004.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r101_512x512_160k_ade20k/fpn_r101_512x512_160k_ade20k-20200718_131734.log.json) | diff --git a/configs/sem_fpn/metafile.yaml b/configs/sem_fpn/metafile.yaml new file mode 100644 index 0000000000..e734897245 --- /dev/null +++ b/configs/sem_fpn/metafile.yaml @@ -0,0 +1,110 @@ +Collections: +- Name: FPN + License: Apache License 2.0 + Metadata: + Training Data: + - Cityscapes + - ADE20K + Paper: + Title: Panoptic Feature Pyramid Networks + URL: https://arxiv.org/abs/1901.02446 + README: configs/sem_fpn/README.md + Frameworks: + - PyTorch +Models: +- Name: fpn_r50_4xb2-80k_cityscapes-512x1024 + In Collection: FPN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 74.52 + mIoU(ms+flip): 76.08 + Config: configs/sem_fpn/fpn_r50_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50 + - FPN + Training Resources: 4x V100 GPUS + Memory (GB): 2.8 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r50_512x1024_80k_cityscapes/fpn_r50_512x1024_80k_cityscapes_20200717_021437-94018a0d.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r50_512x1024_80k_cityscapes/fpn_r50_512x1024_80k_cityscapes-20200717_021437.log.json + Paper: + Title: Panoptic Feature Pyramid Networks + URL: https://arxiv.org/abs/1901.02446 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fpn_head.py#L12 + Framework: PyTorch +- Name: fpn_r101_4xb2-80k_cityscapes-512x1024 + In Collection: FPN + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 75.8 + mIoU(ms+flip): 77.4 + Config: configs/sem_fpn/fpn_r101_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101 + - FPN + Training Resources: 4x V100 GPUS + Memory (GB): 3.9 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r101_512x1024_80k_cityscapes/fpn_r101_512x1024_80k_cityscapes_20200717_012416-c5800d4c.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r101_512x1024_80k_cityscapes/fpn_r101_512x1024_80k_cityscapes-20200717_012416.log.json + Paper: + Title: Panoptic Feature Pyramid Networks + URL: https://arxiv.org/abs/1901.02446 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fpn_head.py#L12 + Framework: PyTorch +- Name: fpn_r50_4xb4-160k_ade20k-512x512 + In Collection: FPN + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 37.49 + mIoU(ms+flip): 39.09 + Config: configs/sem_fpn/fpn_r50_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50 + - FPN + Training Resources: 4x V100 GPUS + Memory (GB): 4.9 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r50_512x512_160k_ade20k/fpn_r50_512x512_160k_ade20k_20200718_131734-5b5a6ab9.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r50_512x512_160k_ade20k/fpn_r50_512x512_160k_ade20k-20200718_131734.log.json + Paper: + Title: Panoptic Feature Pyramid Networks + URL: https://arxiv.org/abs/1901.02446 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fpn_head.py#L12 + Framework: PyTorch +- Name: fpn_r101_4xb4-160k_ade20k-512x512 + In Collection: FPN + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 39.35 + mIoU(ms+flip): 40.72 + Config: configs/sem_fpn/fpn_r101_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-101 + - FPN + Training Resources: 4x V100 GPUS + Memory (GB): 5.9 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r101_512x512_160k_ade20k/fpn_r101_512x512_160k_ade20k_20200718_131734-306b5004.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r101_512x512_160k_ade20k/fpn_r101_512x512_160k_ade20k-20200718_131734.log.json + Paper: + Title: Panoptic Feature Pyramid Networks + URL: https://arxiv.org/abs/1901.02446 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fpn_head.py#L12 + Framework: PyTorch diff --git a/configs/sem_fpn/sem_fpn.yml b/configs/sem_fpn/sem_fpn.yml deleted file mode 100644 index 79ed0b81c4..0000000000 --- a/configs/sem_fpn/sem_fpn.yml +++ /dev/null @@ -1,104 +0,0 @@ -Collections: -- Name: FPN - Metadata: - Training Data: - - Cityscapes - - ADE20K - Paper: - URL: https://arxiv.org/abs/1901.02446 - Title: Panoptic Feature Pyramid Networks - README: configs/sem_fpn/README.md - Code: - URL: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/fpn_head.py#L12 - Version: v0.17.0 - Converted From: - Code: https://github.com/facebookresearch/detectron2 -Models: -- Name: fpn_r50_4xb2-80k_cityscapes-512x1024 - In Collection: FPN - Metadata: - backbone: R-50 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 73.86 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 2.8 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 74.52 - mIoU(ms+flip): 76.08 - Config: configs/sem_fpn/fpn_r50_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r50_512x1024_80k_cityscapes/fpn_r50_512x1024_80k_cityscapes_20200717_021437-94018a0d.pth -- Name: fpn_r101_4xb2-80k_cityscapes-512x1024 - In Collection: FPN - Metadata: - backbone: R-101 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 97.18 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 3.9 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 75.8 - mIoU(ms+flip): 77.4 - Config: configs/sem_fpn/fpn_r101_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r101_512x1024_80k_cityscapes/fpn_r101_512x1024_80k_cityscapes_20200717_012416-c5800d4c.pth -- Name: fpn_r50_4xb4-160k_ade20k-512x512 - In Collection: FPN - Metadata: - backbone: R-50 - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 17.93 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 4.9 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 37.49 - mIoU(ms+flip): 39.09 - Config: configs/sem_fpn/fpn_r50_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r50_512x512_160k_ade20k/fpn_r50_512x512_160k_ade20k_20200718_131734-5b5a6ab9.pth -- Name: fpn_r101_4xb4-160k_ade20k-512x512 - In Collection: FPN - Metadata: - backbone: R-101 - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 24.64 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 5.9 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 39.35 - mIoU(ms+flip): 40.72 - Config: configs/sem_fpn/fpn_r101_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r101_512x512_160k_ade20k/fpn_r101_512x512_160k_ade20k_20200718_131734-306b5004.pth diff --git a/configs/setr/README.md b/configs/setr/README.md index 1aa3f245a7..556c625f41 100644 --- a/configs/setr/README.md +++ b/configs/setr/README.md @@ -1,6 +1,6 @@ # SETR -[Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective with Transformers](https://arxiv.org/abs/2012.15840) +> [Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective with Transformers](https://arxiv.org/abs/2012.15840) ## Introduction @@ -26,17 +26,6 @@ Most recent semantic segmentation methods adopt a fully-convolutional network (F This head has two version head. ``` -## Citation - -```bibtex -@article{zheng2020rethinking, - title={Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective with Transformers}, - author={Zheng, Sixiao and Lu, Jiachen and Zhao, Hengshuang and Zhu, Xiatian and Luo, Zekun and Wang, Yabiao and Fu, Yanwei and Feng, Jianfeng and Xiang, Tao and Torr, Philip HS and others}, - journal={arXiv preprint arXiv:2012.15840}, - year={2020} -} -``` - ## Usage You can download the pretrain from [here](https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-vitjx/jx_vit_large_p16_384-b3be5167.pth). Then you can convert its keys with the script `vit2mmseg.py` in the tools directory. @@ -58,17 +47,28 @@ This script convert the model from `PRETRAIN_PATH` and store the converted model ### ADE20K -| Method | Backbone | Crop Size | Batch Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ---------- | -------- | --------- | ---------- | ------- | -------- | -------------- | ----- | ------------: | ----------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| SETR Naive | ViT-L | 512x512 | 16 | 160000 | 18.40 | 4.72 | 48.28 | 49.56 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/setr/setr_vit-l_naive_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_naive_512x512_160k_b16_ade20k/setr_naive_512x512_160k_b16_ade20k_20210619_191258-061f24f5.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_naive_512x512_160k_b16_ade20k/setr_naive_512x512_160k_b16_ade20k_20210619_191258.log.json) | -| SETR PUP | ViT-L | 512x512 | 16 | 160000 | 19.54 | 4.50 | 48.24 | 49.99 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/setr/setr_vit-l_pup_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_pup_512x512_160k_b16_ade20k/setr_pup_512x512_160k_b16_ade20k_20210619_191343-7e0ce826.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_pup_512x512_160k_b16_ade20k/setr_pup_512x512_160k_b16_ade20k_20210619_191343.log.json) | -| SETR MLA | ViT-L | 512x512 | 8 | 160000 | 10.96 | - | 47.34 | 49.05 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/setr/setr_vit-l-mla_8xb1-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_mla_512x512_160k_b8_ade20k/setr_mla_512x512_160k_b8_ade20k_20210619_191118-c6d21df0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_mla_512x512_160k_b8_ade20k/setr_mla_512x512_160k_b8_ade20k_20210619_191118.log.json) | -| SETR MLA | ViT-L | 512x512 | 16 | 160000 | 17.30 | 5.25 | 47.39 | 49.37 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/setr/setr_vit-l_mla_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_mla_512x512_160k_b16_ade20k/setr_mla_512x512_160k_b16_ade20k_20210619_191057-f9741de7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_mla_512x512_160k_b16_ade20k/setr_mla_512x512_160k_b16_ade20k_20210619_191057.log.json) | +| Method | Backbone | Crop Size | Batch Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------- | -------- | --------- | ---------- | ------- | -------- | -------------- | ------ | ----- | ------------: | ----------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| SETR Naive | ViT-L | 512x512 | 16 | 160000 | 18.40 | 4.72 | V100 | 48.28 | 49.56 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/setr/setr_vit-l_naive_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_naive_512x512_160k_b16_ade20k/setr_naive_512x512_160k_b16_ade20k_20210619_191258-061f24f5.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_naive_512x512_160k_b16_ade20k/setr_naive_512x512_160k_b16_ade20k_20210619_191258.log.json) | +| SETR PUP | ViT-L | 512x512 | 16 | 160000 | 19.54 | 4.50 | V100 | 48.24 | 49.99 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/setr/setr_vit-l_pup_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_pup_512x512_160k_b16_ade20k/setr_pup_512x512_160k_b16_ade20k_20210619_191343-7e0ce826.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_pup_512x512_160k_b16_ade20k/setr_pup_512x512_160k_b16_ade20k_20210619_191343.log.json) | +| SETR MLA | ViT-L | 512x512 | 8 | 160000 | 10.96 | - | V100 | 47.34 | 49.05 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/setr/setr_vit-l-mla_8xb1-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_mla_512x512_160k_b8_ade20k/setr_mla_512x512_160k_b8_ade20k_20210619_191118-c6d21df0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_mla_512x512_160k_b8_ade20k/setr_mla_512x512_160k_b8_ade20k_20210619_191118.log.json) | +| SETR MLA | ViT-L | 512x512 | 16 | 160000 | 17.30 | 5.25 | V100 | 47.39 | 49.37 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/setr/setr_vit-l_mla_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_mla_512x512_160k_b16_ade20k/setr_mla_512x512_160k_b16_ade20k_20210619_191057-f9741de7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_mla_512x512_160k_b16_ade20k/setr_mla_512x512_160k_b16_ade20k_20210619_191057.log.json) | ### Cityscapes -| Method | Backbone | Crop Size | Batch Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ---------- | -------- | --------- | ---------- | ------- | -------- | -------------- | ----- | ------------: | -------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| SETR Naive | ViT-L | 768x768 | 8 | 80000 | 24.06 | 0.39 | 78.10 | 80.22 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/setr/setr_vit-l_naive_8xb1-80k_cityscapes-768x768.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_naive_vit-large_8x1_768x768_80k_cityscapes/setr_naive_vit-large_8x1_768x768_80k_cityscapes_20211123_000505-20728e80.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_naive_vit-large_8x1_768x768_80k_cityscapes/setr_naive_vit-large_8x1_768x768_80k_cityscapes_20211123_000505.log.json) | -| SETR PUP | ViT-L | 768x768 | 8 | 80000 | 27.96 | 0.37 | 79.21 | 81.02 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/setr/setr_vit-l_pup_8xb1-80k_cityscapes-768x768.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_pup_vit-large_8x1_768x768_80k_cityscapes/setr_pup_vit-large_8x1_768x768_80k_cityscapes_20211122_155115-f6f37b8f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_pup_vit-large_8x1_768x768_80k_cityscapes/setr_pup_vit-large_8x1_768x768_80k_cityscapes_20211122_155115.log.json) | -| SETR MLA | ViT-L | 768x768 | 8 | 80000 | 24.10 | 0.41 | 77.00 | 79.59 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/setr/setr_vit-l_mla_8xb1-80k_cityscapes-768x768.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_mla_vit-large_8x1_768x768_80k_cityscapes/setr_mla_vit-large_8x1_768x768_80k_cityscapes_20211119_101003-7f8dccbe.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_mla_vit-large_8x1_768x768_80k_cityscapes/setr_mla_vit-large_8x1_768x768_80k_cityscapes_20211119_101003.log.json) | +| Method | Backbone | Crop Size | Batch Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------- | -------- | --------- | ---------- | ------- | -------- | -------------- | ------ | ----- | ------------: | -------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| SETR Naive | ViT-L | 768x768 | 8 | 80000 | 24.06 | 0.39 | V100 | 78.10 | 80.22 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/setr/setr_vit-l_naive_8xb1-80k_cityscapes-768x768.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_naive_vit-large_8x1_768x768_80k_cityscapes/setr_naive_vit-large_8x1_768x768_80k_cityscapes_20211123_000505-20728e80.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_naive_vit-large_8x1_768x768_80k_cityscapes/setr_naive_vit-large_8x1_768x768_80k_cityscapes_20211123_000505.log.json) | +| SETR PUP | ViT-L | 768x768 | 8 | 80000 | 27.96 | 0.37 | V100 | 79.21 | 81.02 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/setr/setr_vit-l_pup_8xb1-80k_cityscapes-768x768.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_pup_vit-large_8x1_768x768_80k_cityscapes/setr_pup_vit-large_8x1_768x768_80k_cityscapes_20211122_155115-f6f37b8f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_pup_vit-large_8x1_768x768_80k_cityscapes/setr_pup_vit-large_8x1_768x768_80k_cityscapes_20211122_155115.log.json) | +| SETR MLA | ViT-L | 768x768 | 8 | 80000 | 24.10 | 0.41 | V100 | 77.00 | 79.59 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/setr/setr_vit-l_mla_8xb1-80k_cityscapes-768x768.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_mla_vit-large_8x1_768x768_80k_cityscapes/setr_mla_vit-large_8x1_768x768_80k_cityscapes_20211119_101003-7f8dccbe.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_mla_vit-large_8x1_768x768_80k_cityscapes/setr_mla_vit-large_8x1_768x768_80k_cityscapes_20211119_101003.log.json) | + +## Citation + +```bibtex +@article{zheng2020rethinking, + title={Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective with Transformers}, + author={Zheng, Sixiao and Lu, Jiachen and Zhao, Hengshuang and Zhu, Xiatian and Luo, Zekun and Wang, Yabiao and Fu, Yanwei and Feng, Jianfeng and Xiang, Tao and Torr, Philip HS and others}, + journal={arXiv preprint arXiv:2012.15840}, + year={2020} +} +``` diff --git a/configs/setr/metafile.yaml b/configs/setr/metafile.yaml new file mode 100644 index 0000000000..8e6bc087dd --- /dev/null +++ b/configs/setr/metafile.yaml @@ -0,0 +1,197 @@ +Collections: +- Name: SETR + License: Apache License 2.0 + Metadata: + Training Data: + - ADE20K + - Cityscapes + Paper: + Title: Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective + with Transformers + URL: https://arxiv.org/abs/2012.15840 + README: configs/setr/README.md + Frameworks: + - PyTorch +Models: +- Name: setr_vit-l_naive_8xb2-160k_ade20k-512x512 + In Collection: SETR + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 48.28 + mIoU(ms+flip): 49.56 + Config: configs/setr/setr_vit-l_naive_8xb2-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - ViT-L + - SETR + - Naive + Training Resources: 8x V100 GPUS + Memory (GB): 18.4 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_naive_512x512_160k_b16_ade20k/setr_naive_512x512_160k_b16_ade20k_20210619_191258-061f24f5.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_naive_512x512_160k_b16_ade20k/setr_naive_512x512_160k_b16_ade20k_20210619_191258.log.json + Paper: + Title: Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective + with Transformers + URL: https://arxiv.org/abs/2012.15840 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/setr_up_head.py#L11 + Framework: PyTorch +- Name: setr_vit-l_pup_8xb2-160k_ade20k-512x512 + In Collection: SETR + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 48.24 + mIoU(ms+flip): 49.99 + Config: configs/setr/setr_vit-l_pup_8xb2-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - ViT-L + - SETR + - PUP + Training Resources: 8x V100 GPUS + Memory (GB): 19.54 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_pup_512x512_160k_b16_ade20k/setr_pup_512x512_160k_b16_ade20k_20210619_191343-7e0ce826.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_pup_512x512_160k_b16_ade20k/setr_pup_512x512_160k_b16_ade20k_20210619_191343.log.json + Paper: + Title: Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective + with Transformers + URL: https://arxiv.org/abs/2012.15840 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/setr_up_head.py#L11 + Framework: PyTorch +- Name: setr_vit-l-mla_8xb1-160k_ade20k-512x512 + In Collection: SETR + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 47.34 + mIoU(ms+flip): 49.05 + Config: configs/setr/setr_vit-l-mla_8xb1-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 8 + Architecture: + - ViT-L + - SETR + - MLA + Training Resources: 8x V100 GPUS + Memory (GB): 10.96 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_mla_512x512_160k_b8_ade20k/setr_mla_512x512_160k_b8_ade20k_20210619_191118-c6d21df0.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_mla_512x512_160k_b8_ade20k/setr_mla_512x512_160k_b8_ade20k_20210619_191118.log.json + Paper: + Title: Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective + with Transformers + URL: https://arxiv.org/abs/2012.15840 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/setr_up_head.py#L11 + Framework: PyTorch +- Name: setr_vit-l_mla_8xb2-160k_ade20k-512x512 + In Collection: SETR + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 47.39 + mIoU(ms+flip): 49.37 + Config: configs/setr/setr_vit-l_mla_8xb2-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - ViT-L + - SETR + - MLA + Training Resources: 8x V100 GPUS + Memory (GB): 17.3 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_mla_512x512_160k_b16_ade20k/setr_mla_512x512_160k_b16_ade20k_20210619_191057-f9741de7.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_mla_512x512_160k_b16_ade20k/setr_mla_512x512_160k_b16_ade20k_20210619_191057.log.json + Paper: + Title: Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective + with Transformers + URL: https://arxiv.org/abs/2012.15840 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/setr_up_head.py#L11 + Framework: PyTorch +- Name: setr_vit-l_naive_8xb1-80k_cityscapes-768x768 + In Collection: SETR + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.1 + mIoU(ms+flip): 80.22 + Config: configs/setr/setr_vit-l_naive_8xb1-80k_cityscapes-768x768.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - ViT-L + - SETR + - Naive + Training Resources: 8x V100 GPUS + Memory (GB): 24.06 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_naive_vit-large_8x1_768x768_80k_cityscapes/setr_naive_vit-large_8x1_768x768_80k_cityscapes_20211123_000505-20728e80.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_naive_vit-large_8x1_768x768_80k_cityscapes/setr_naive_vit-large_8x1_768x768_80k_cityscapes_20211123_000505.log.json + Paper: + Title: Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective + with Transformers + URL: https://arxiv.org/abs/2012.15840 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/setr_up_head.py#L11 + Framework: PyTorch +- Name: setr_vit-l_pup_8xb1-80k_cityscapes-768x768 + In Collection: SETR + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.21 + mIoU(ms+flip): 81.02 + Config: configs/setr/setr_vit-l_pup_8xb1-80k_cityscapes-768x768.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - ViT-L + - SETR + - PUP + Training Resources: 8x V100 GPUS + Memory (GB): 27.96 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_pup_vit-large_8x1_768x768_80k_cityscapes/setr_pup_vit-large_8x1_768x768_80k_cityscapes_20211122_155115-f6f37b8f.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_pup_vit-large_8x1_768x768_80k_cityscapes/setr_pup_vit-large_8x1_768x768_80k_cityscapes_20211122_155115.log.json + Paper: + Title: Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective + with Transformers + URL: https://arxiv.org/abs/2012.15840 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/setr_up_head.py#L11 + Framework: PyTorch +- Name: setr_vit-l_mla_8xb1-80k_cityscapes-768x768 + In Collection: SETR + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 77.0 + mIoU(ms+flip): 79.59 + Config: configs/setr/setr_vit-l_mla_8xb1-80k_cityscapes-768x768.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - ViT-L + - SETR + - MLA + Training Resources: 8x V100 GPUS + Memory (GB): 24.1 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_mla_vit-large_8x1_768x768_80k_cityscapes/setr_mla_vit-large_8x1_768x768_80k_cityscapes_20211119_101003-7f8dccbe.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_mla_vit-large_8x1_768x768_80k_cityscapes/setr_mla_vit-large_8x1_768x768_80k_cityscapes_20211119_101003.log.json + Paper: + Title: Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective + with Transformers + URL: https://arxiv.org/abs/2012.15840 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/setr_up_head.py#L11 + Framework: PyTorch diff --git a/configs/setr/setr.yml b/configs/setr/setr.yml deleted file mode 100644 index 6a9987089d..0000000000 --- a/configs/setr/setr.yml +++ /dev/null @@ -1,164 +0,0 @@ -Collections: -- Name: SETR - Metadata: - Training Data: - - ADE20K - - Cityscapes - Paper: - URL: https://arxiv.org/abs/2012.15840 - Title: Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective - with Transformers - README: configs/setr/README.md - Code: - URL: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/setr_up_head.py#L11 - Version: v0.17.0 - Converted From: - Code: https://github.com/fudan-zvg/SETR -Models: -- Name: setr_vit-l_naive_8xb2-160k_ade20k-512x512 - In Collection: SETR - Metadata: - backbone: ViT-L - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 211.86 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 18.4 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 48.28 - mIoU(ms+flip): 49.56 - Config: configs/setr/setr_vit-l_naive_8xb2-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_naive_512x512_160k_b16_ade20k/setr_naive_512x512_160k_b16_ade20k_20210619_191258-061f24f5.pth -- Name: setr_vit-l_pup_8xb2-160k_ade20k-512x512 - In Collection: SETR - Metadata: - backbone: ViT-L - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 222.22 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 19.54 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 48.24 - mIoU(ms+flip): 49.99 - Config: configs/setr/setr_vit-l_pup_8xb2-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_pup_512x512_160k_b16_ade20k/setr_pup_512x512_160k_b16_ade20k_20210619_191343-7e0ce826.pth -- Name: setr_vit-l-mla_8xb1-160k_ade20k-512x512 - In Collection: SETR - Metadata: - backbone: ViT-L - crop size: (512,512) - lr schd: 160000 - Training Memory (GB): 10.96 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 47.34 - mIoU(ms+flip): 49.05 - Config: configs/setr/setr_vit-l-mla_8xb1-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_mla_512x512_160k_b8_ade20k/setr_mla_512x512_160k_b8_ade20k_20210619_191118-c6d21df0.pth -- Name: setr_vit-l_mla_8xb2-160k_ade20k-512x512 - In Collection: SETR - Metadata: - backbone: ViT-L - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 190.48 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 17.3 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 47.39 - mIoU(ms+flip): 49.37 - Config: configs/setr/setr_vit-l_mla_8xb2-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_mla_512x512_160k_b16_ade20k/setr_mla_512x512_160k_b16_ade20k_20210619_191057-f9741de7.pth -- Name: setr_vit-l_naive_8xb1-80k_cityscapes-768x768 - In Collection: SETR - Metadata: - backbone: ViT-L - crop size: (768,768) - lr schd: 80000 - inference time (ms/im): - - value: 2564.1 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (768,768) - Training Memory (GB): 24.06 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.1 - mIoU(ms+flip): 80.22 - Config: configs/setr/setr_vit-l_naive_8xb1-80k_cityscapes-768x768.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_naive_vit-large_8x1_768x768_80k_cityscapes/setr_naive_vit-large_8x1_768x768_80k_cityscapes_20211123_000505-20728e80.pth -- Name: setr_vit-l_pup_8xb1-80k_cityscapes-768x768 - In Collection: SETR - Metadata: - backbone: ViT-L - crop size: (768,768) - lr schd: 80000 - inference time (ms/im): - - value: 2702.7 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (768,768) - Training Memory (GB): 27.96 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.21 - mIoU(ms+flip): 81.02 - Config: configs/setr/setr_vit-l_pup_8xb1-80k_cityscapes-768x768.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_pup_vit-large_8x1_768x768_80k_cityscapes/setr_pup_vit-large_8x1_768x768_80k_cityscapes_20211122_155115-f6f37b8f.pth -- Name: setr_vit-l_mla_8xb1-80k_cityscapes-768x768 - In Collection: SETR - Metadata: - backbone: ViT-L - crop size: (768,768) - lr schd: 80000 - inference time (ms/im): - - value: 2439.02 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (768,768) - Training Memory (GB): 24.1 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 77.0 - mIoU(ms+flip): 79.59 - Config: configs/setr/setr_vit-l_mla_8xb1-80k_cityscapes-768x768.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_mla_vit-large_8x1_768x768_80k_cityscapes/setr_mla_vit-large_8x1_768x768_80k_cityscapes_20211119_101003-7f8dccbe.pth diff --git a/configs/stdc/README.md b/configs/stdc/README.md index 639e6b6986..1efd65482f 100644 --- a/configs/stdc/README.md +++ b/configs/stdc/README.md @@ -1,6 +1,6 @@ # STDC -[Rethinking BiSeNet For Real-time Semantic Segmentation](https://arxiv.org/abs/2104.13188) +> [Rethinking BiSeNet For Real-time Semantic Segmentation](https://arxiv.org/abs/2104.13188) ## Introduction @@ -22,18 +22,6 @@ BiSeNet has been proved to be a popular two-stream network for real-time segment -## Citation - -```bibtex -@inproceedings{fan2021rethinking, - title={Rethinking BiSeNet For Real-time Semantic Segmentation}, - author={Fan, Mingyuan and Lai, Shenqi and Huang, Junshi and Wei, Xiaoming and Chai, Zhenhua and Luo, Junfeng and Wei, Xiaolin}, - booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition}, - pages={9716--9725}, - year={2021} -} -``` - ## Usage We have provided [ImageNet Pretrained STDCNet Weights](https://drive.google.com/drive/folders/1wROFwRt8qWHD4jSo8Zu1gp1d6oYJ3ns1) models converted from [official repo](https://github.com/MichaelFan01/STDC-Seg). @@ -58,12 +46,12 @@ This script convert model from `PRETRAIN_PATH` and store the converted model in ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| -------------------- | -------- | --------- | ------: | -------- | -------------- | ----: | ------------- | -------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| STDC 1 (No Pretrain) | STDC1 | 512x1024 | 80000 | 7.15 | 23.06 | 71.82 | 73.89 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/stdc/stdc1_4xb12-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc1_512x1024_80k_cityscapes/stdc1_512x1024_80k_cityscapes_20220224_073048-74e6920a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc1_512x1024_80k_cityscapes/stdc1_512x1024_80k_cityscapes_20220224_073048.log.json) | -| STDC 1 | STDC1 | 512x1024 | 80000 | - | - | 74.94 | 76.97 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/stdc/stdc1_in1k-pre_4xb12-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc1_in1k-pre_512x1024_80k_cityscapes/stdc1_in1k-pre_512x1024_80k_cityscapes_20220224_141648-3d4c2981.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc1_in1k-pre_512x1024_80k_cityscapes/stdc1_in1k-pre_512x1024_80k_cityscapes_20220224_141648.log.json) | -| STDC 2 (No Pretrain) | STDC2 | 512x1024 | 80000 | 8.27 | 23.71 | 73.15 | 76.13 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/stdc/stdc2_4xb12-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc2_512x1024_80k_cityscapes/stdc2_512x1024_80k_cityscapes_20220222_132015-fb1e3a1a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc2_512x1024_80k_cityscapes/stdc2_512x1024_80k_cityscapes_20220222_132015.log.json) | -| STDC 2 | STDC2 | 512x1024 | 80000 | - | - | 76.67 | 78.67 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/stdc/stdc2_in1k-pre_4xb12-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc2_in1k-pre_512x1024_80k_cityscapes/stdc2_in1k-pre_512x1024_80k_cityscapes_20220224_073048-1f8f0f6c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc2_in1k-pre_512x1024_80k_cityscapes/stdc2_in1k-pre_512x1024_80k_cityscapes_20220224_073048.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------------------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------- | -------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| STDC | STDC1 (No Pretrain) | 512x1024 | 80000 | 7.15 | 23.06 | V100 | 71.82 | 73.89 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/stdc/stdc1_4xb12-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc1_512x1024_80k_cityscapes/stdc1_512x1024_80k_cityscapes_20220224_073048-74e6920a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc1_512x1024_80k_cityscapes/stdc1_512x1024_80k_cityscapes_20220224_073048.log.json) | +| STDC | STDC1 | 512x1024 | 80000 | - | - | V100 | 74.94 | 76.97 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/stdc/stdc1_in1k-pre_4xb12-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc1_in1k-pre_512x1024_80k_cityscapes/stdc1_in1k-pre_512x1024_80k_cityscapes_20220224_141648-3d4c2981.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc1_in1k-pre_512x1024_80k_cityscapes/stdc1_in1k-pre_512x1024_80k_cityscapes_20220224_141648.log.json) | +| STDC | STDC2 (No Pretrain) | 512x1024 | 80000 | 8.27 | 23.71 | V100 | 73.15 | 76.13 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/stdc/stdc2_4xb12-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc2_512x1024_80k_cityscapes/stdc2_512x1024_80k_cityscapes_20220222_132015-fb1e3a1a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc2_512x1024_80k_cityscapes/stdc2_512x1024_80k_cityscapes_20220222_132015.log.json) | +| STDC | STDC2 | 512x1024 | 80000 | - | - | V100 | 76.67 | 78.67 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/stdc/stdc2_in1k-pre_4xb12-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc2_in1k-pre_512x1024_80k_cityscapes/stdc2_in1k-pre_512x1024_80k_cityscapes_20220224_073048-1f8f0f6c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc2_in1k-pre_512x1024_80k_cityscapes/stdc2_in1k-pre_512x1024_80k_cityscapes_20220224_073048.log.json) | Note: @@ -71,3 +59,15 @@ Note: - `No Pretrain` means the model is trained from scratch. - The FPS is for reference only. The environment is also different from paper setting, whose input size is `512x1024` and `768x1536`, i.e., 50% and 75% of our input size, respectively and using TensorRT. - The parameter `fusion_kernel` in `STDCHead` is not learnable. In official repo, `find_unused_parameters=True` is set [here](https://github.com/MichaelFan01/STDC-Seg/blob/59ff37fbd693b99972c76fcefe97caa14aeb619f/train.py#L220). You may check it by printing model parameters of original repo on your own. + +## Citation + +```bibtex +@inproceedings{fan2021rethinking, + title={Rethinking BiSeNet For Real-time Semantic Segmentation}, + author={Fan, Mingyuan and Lai, Shenqi and Huang, Junshi and Wei, Xiaoming and Chai, Zhenhua and Luo, Junfeng and Wei, Xiaolin}, + booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition}, + pages={9716--9725}, + year={2021} +} +``` diff --git a/configs/stdc/metafile.yaml b/configs/stdc/metafile.yaml new file mode 100644 index 0000000000..93cb14f50b --- /dev/null +++ b/configs/stdc/metafile.yaml @@ -0,0 +1,107 @@ +Collections: +- Name: STDC + License: Apache License 2.0 + Metadata: + Training Data: + - Cityscapes + Paper: + Title: Rethinking BiSeNet For Real-time Semantic Segmentation + URL: https://arxiv.org/abs/2104.13188 + README: configs/stdc/README.md + Frameworks: + - PyTorch +Models: +- Name: stdc1_4xb12-80k_cityscapes-512x1024 + In Collection: STDC + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 71.82 + mIoU(ms+flip): 73.89 + Config: configs/stdc/stdc1_4xb12-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 48 + Architecture: + - STDC1 + - STDC + Training Resources: 4x V100 GPUS + Memory (GB): 7.15 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc1_512x1024_80k_cityscapes/stdc1_512x1024_80k_cityscapes_20220224_073048-74e6920a.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc1_512x1024_80k_cityscapes/stdc1_512x1024_80k_cityscapes_20220224_073048.log.json + Paper: + Title: Rethinking BiSeNet For Real-time Semantic Segmentation + URL: https://arxiv.org/abs/2104.13188 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.20.0/mmseg/models/backbones/stdc.py#L394 + Framework: PyTorch +- Name: stdc1_in1k-pre_4xb12-80k_cityscapes-512x1024 + In Collection: STDC + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 74.94 + mIoU(ms+flip): 76.97 + Config: configs/stdc/stdc1_in1k-pre_4xb12-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 48 + Architecture: + - STDC1 + - STDC + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc1_in1k-pre_512x1024_80k_cityscapes/stdc1_in1k-pre_512x1024_80k_cityscapes_20220224_141648-3d4c2981.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc1_in1k-pre_512x1024_80k_cityscapes/stdc1_in1k-pre_512x1024_80k_cityscapes_20220224_141648.log.json + Paper: + Title: Rethinking BiSeNet For Real-time Semantic Segmentation + URL: https://arxiv.org/abs/2104.13188 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.20.0/mmseg/models/backbones/stdc.py#L394 + Framework: PyTorch +- Name: stdc2_4xb12-80k_cityscapes-512x1024 + In Collection: STDC + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 73.15 + mIoU(ms+flip): 76.13 + Config: configs/stdc/stdc2_4xb12-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 48 + Architecture: + - STDC2 + - STDC + Training Resources: 4x V100 GPUS + Memory (GB): 8.27 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc2_512x1024_80k_cityscapes/stdc2_512x1024_80k_cityscapes_20220222_132015-fb1e3a1a.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc2_512x1024_80k_cityscapes/stdc2_512x1024_80k_cityscapes_20220222_132015.log.json + Paper: + Title: Rethinking BiSeNet For Real-time Semantic Segmentation + URL: https://arxiv.org/abs/2104.13188 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.20.0/mmseg/models/backbones/stdc.py#L394 + Framework: PyTorch +- Name: stdc2_in1k-pre_4xb12-80k_cityscapes-512x1024 + In Collection: STDC + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 76.67 + mIoU(ms+flip): 78.67 + Config: configs/stdc/stdc2_in1k-pre_4xb12-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 48 + Architecture: + - STDC2 + - STDC + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc2_in1k-pre_512x1024_80k_cityscapes/stdc2_in1k-pre_512x1024_80k_cityscapes_20220224_073048-1f8f0f6c.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc2_in1k-pre_512x1024_80k_cityscapes/stdc2_in1k-pre_512x1024_80k_cityscapes_20220224_073048.log.json + Paper: + Title: Rethinking BiSeNet For Real-time Semantic Segmentation + URL: https://arxiv.org/abs/2104.13188 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.20.0/mmseg/models/backbones/stdc.py#L394 + Framework: PyTorch diff --git a/configs/stdc/stdc.yml b/configs/stdc/stdc.yml deleted file mode 100644 index 22fb37eeba..0000000000 --- a/configs/stdc/stdc.yml +++ /dev/null @@ -1,87 +0,0 @@ -Collections: -- Name: STDC - Metadata: - Training Data: - - Cityscapes - Paper: - URL: https://arxiv.org/abs/2104.13188 - Title: Rethinking BiSeNet For Real-time Semantic Segmentation - README: configs/stdc/README.md - Code: - URL: https://github.com/open-mmlab/mmsegmentation/blob/v0.20.0/mmseg/models/backbones/stdc.py#L394 - Version: v0.20.0 - Converted From: - Code: https://github.com/MichaelFan01/STDC-Seg -Models: -- Name: stdc1_4xb12-80k_cityscapes-512x1024 - In Collection: STDC - Metadata: - backbone: STDC1 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 43.37 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 7.15 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 71.82 - mIoU(ms+flip): 73.89 - Config: configs/stdc/stdc1_4xb12-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc1_512x1024_80k_cityscapes/stdc1_512x1024_80k_cityscapes_20220224_073048-74e6920a.pth -- Name: stdc1_in1k-pre_4xb12-80k_cityscapes-512x1024 - In Collection: STDC - Metadata: - backbone: STDC1 - crop size: (512,1024) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 74.94 - mIoU(ms+flip): 76.97 - Config: configs/stdc/stdc1_in1k-pre_4xb12-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc1_in1k-pre_512x1024_80k_cityscapes/stdc1_in1k-pre_512x1024_80k_cityscapes_20220224_141648-3d4c2981.pth -- Name: stdc2_4xb12-80k_cityscapes-512x1024 - In Collection: STDC - Metadata: - backbone: STDC2 - crop size: (512,1024) - lr schd: 80000 - inference time (ms/im): - - value: 42.18 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 8.27 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 73.15 - mIoU(ms+flip): 76.13 - Config: configs/stdc/stdc2_4xb12-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc2_512x1024_80k_cityscapes/stdc2_512x1024_80k_cityscapes_20220222_132015-fb1e3a1a.pth -- Name: stdc2_in1k-pre_4xb12-80k_cityscapes-512x1024 - In Collection: STDC - Metadata: - backbone: STDC2 - crop size: (512,1024) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 76.67 - mIoU(ms+flip): 78.67 - Config: configs/stdc/stdc2_in1k-pre_4xb12-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc2_in1k-pre_512x1024_80k_cityscapes/stdc2_in1k-pre_512x1024_80k_cityscapes_20220224_073048-1f8f0f6c.pth diff --git a/configs/swin/README.md b/configs/swin/README.md index 4ab20e80b8..18fcbae8bc 100644 --- a/configs/swin/README.md +++ b/configs/swin/README.md @@ -1,6 +1,6 @@ # Swin Transformer -[Swin Transformer: Hierarchical Vision Transformer using Shifted Windows](https://arxiv.org/abs/2103.14030) +> [Swin Transformer: Hierarchical Vision Transformer using Shifted Windows](https://arxiv.org/abs/2103.14030) ## Introduction @@ -22,17 +22,6 @@ This paper presents a new vision Transformer, called Swin Transformer, that capa -## Citation - -```bibtex -@article{liu2021Swin, - title={Swin Transformer: Hierarchical Vision Transformer using Shifted Windows}, - author={Liu, Ze and Lin, Yutong and Cao, Yue and Hu, Han and Wei, Yixuan and Zhang, Zheng and Lin, Stephen and Guo, Baining}, - journal={arXiv preprint arXiv:2103.14030}, - year={2021} -} -``` - ## Usage We have provided pretrained models converted from [official repo](https://github.com/microsoft/Swin-Transformer). @@ -66,11 +55,22 @@ In our default setting, pretrained models and their corresponding [original mode ### ADE20K -| Method | Backbone | Crop Size | pretrain | pretrain img size | Batch Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------- | -------- | --------- | ------------ | ----------------- | ---------- | ------- | -------- | -------------- | ----- | ------------: | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| UPerNet | Swin-T | 512x512 | ImageNet-1K | 224x224 | 16 | 160000 | 5.02 | 21.06 | 44.41 | 45.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/swin/swin-tiny-patch4-window7-in1k-pre_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_tiny_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K/upernet_swin_tiny_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K_20210531_112542-e380ad3e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_tiny_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K/upernet_swin_tiny_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K_20210531_112542.log.json) | -| UPerNet | Swin-S | 512x512 | ImageNet-1K | 224x224 | 16 | 160000 | 6.17 | 14.72 | 47.72 | 49.24 | [config](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/swin/swin-small-patch4-window7-in1k-pre_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_small_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K/upernet_swin_small_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K_20210526_192015-ee2fff1c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_small_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K/upernet_swin_small_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K_20210526_192015.log.json) | -| UPerNet | Swin-B | 512x512 | ImageNet-1K | 224x224 | 16 | 160000 | 7.61 | 12.65 | 47.99 | 49.57 | [config](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/swin/swin-base-patch4-window7-in1k-pre_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_base_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K/upernet_swin_base_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K_20210526_192340-593b0e13.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_base_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K/upernet_swin_base_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K_20210526_192340.log.json) | -| UPerNet | Swin-B | 512x512 | ImageNet-22K | 224x224 | 16 | 160000 | - | - | 50.13 | 51.9 | [config](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/swin/swin-base-patch4-window7-in22k-pre_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_base_patch4_window7_512x512_160k_ade20k_pretrain_224x224_22K/upernet_swin_base_patch4_window7_512x512_160k_ade20k_pretrain_224x224_22K_20210526_211650-762e2178.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_base_patch4_window7_512x512_160k_ade20k_pretrain_224x224_22K/upernet_swin_base_patch4_window7_512x512_160k_ade20k_pretrain_224x224_22K_20210526_211650.log.json) | -| UPerNet | Swin-B | 512x512 | ImageNet-1K | 384x384 | 16 | 160000 | 8.52 | 12.10 | 48.35 | 49.65 | [config](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/swin/swin-base-patch4-window12-in1k-384x384-pre_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_base_patch4_window12_512x512_160k_ade20k_pretrain_384x384_1K/upernet_swin_base_patch4_window12_512x512_160k_ade20k_pretrain_384x384_1K_20210531_132020-05b22ea4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_base_patch4_window12_512x512_160k_ade20k_pretrain_384x384_1K/upernet_swin_base_patch4_window12_512x512_160k_ade20k_pretrain_384x384_1K_20210531_132020.log.json) | -| UPerNet | Swin-B | 512x512 | ImageNet-22K | 384x384 | 16 | 160000 | - | - | 50.76 | 52.4 | [config](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/swin/swin-base-patch4-window12-in22k-384x384-pre_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_base_patch4_window12_512x512_160k_ade20k_pretrain_384x384_22K/upernet_swin_base_patch4_window12_512x512_160k_ade20k_pretrain_384x384_22K_20210531_125459-429057bf.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_base_patch4_window12_512x512_160k_ade20k_pretrain_384x384_22K/upernet_swin_base_patch4_window12_512x512_160k_ade20k_pretrain_384x384_22K_20210531_125459.log.json) | +| Method | Backbone | Crop Size | pretrain | pretrain img size | Batch Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------- | -------- | --------- | ------------ | ----------------- | ---------- | ------- | -------- | -------------- | ------ | ----- | ------------: | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| UPerNet | Swin-T | 512x512 | ImageNet-1K | 224x224 | 16 | 160000 | 5.02 | 21.06 | V100 | 44.41 | 45.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/swin/swin-tiny-patch4-window7-in1k-pre_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_tiny_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K/upernet_swin_tiny_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K_20210531_112542-e380ad3e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_tiny_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K/upernet_swin_tiny_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K_20210531_112542.log.json) | +| UPerNet | Swin-S | 512x512 | ImageNet-1K | 224x224 | 16 | 160000 | 6.17 | 14.72 | V100 | 47.72 | 49.24 | [config](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/swin/swin-small-patch4-window7-in1k-pre_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_small_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K/upernet_swin_small_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K_20210526_192015-ee2fff1c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_small_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K/upernet_swin_small_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K_20210526_192015.log.json) | +| UPerNet | Swin-B | 512x512 | ImageNet-1K | 224x224 | 16 | 160000 | 7.61 | 12.65 | V100 | 47.99 | 49.57 | [config](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/swin/swin-base-patch4-window7-in1k-pre_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_base_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K/upernet_swin_base_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K_20210526_192340-593b0e13.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_base_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K/upernet_swin_base_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K_20210526_192340.log.json) | +| UPerNet | Swin-B | 512x512 | ImageNet-22K | 224x224 | 16 | 160000 | - | - | V100 | 50.13 | 51.9 | [config](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/swin/swin-base-patch4-window7-in22k-pre_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_base_patch4_window7_512x512_160k_ade20k_pretrain_224x224_22K/upernet_swin_base_patch4_window7_512x512_160k_ade20k_pretrain_224x224_22K_20210526_211650-762e2178.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_base_patch4_window7_512x512_160k_ade20k_pretrain_224x224_22K/upernet_swin_base_patch4_window7_512x512_160k_ade20k_pretrain_224x224_22K_20210526_211650.log.json) | +| UPerNet | Swin-B | 512x512 | ImageNet-1K | 384x384 | 16 | 160000 | 8.52 | 12.10 | V100 | 48.35 | 49.65 | [config](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/swin/swin-base-patch4-window12-in1k-384x384-pre_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_base_patch4_window12_512x512_160k_ade20k_pretrain_384x384_1K/upernet_swin_base_patch4_window12_512x512_160k_ade20k_pretrain_384x384_1K_20210531_132020-05b22ea4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_base_patch4_window12_512x512_160k_ade20k_pretrain_384x384_1K/upernet_swin_base_patch4_window12_512x512_160k_ade20k_pretrain_384x384_1K_20210531_132020.log.json) | +| UPerNet | Swin-B | 512x512 | ImageNet-22K | 384x384 | 16 | 160000 | - | - | V100 | 50.76 | 52.4 | [config](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/swin/swin-base-patch4-window12-in22k-384x384-pre_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_base_patch4_window12_512x512_160k_ade20k_pretrain_384x384_22K/upernet_swin_base_patch4_window12_512x512_160k_ade20k_pretrain_384x384_22K_20210531_125459-429057bf.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_base_patch4_window12_512x512_160k_ade20k_pretrain_384x384_22K/upernet_swin_base_patch4_window12_512x512_160k_ade20k_pretrain_384x384_22K_20210531_125459.log.json) | + +## Citation + +```bibtex +@article{liu2021Swin, + title={Swin Transformer: Hierarchical Vision Transformer using Shifted Windows}, + author={Liu, Ze and Lin, Yutong and Cao, Yue and Hu, Han and Wei, Yixuan and Zhang, Zheng and Lin, Stephen and Guo, Baining}, + journal={arXiv preprint arXiv:2103.14030}, + year={2021} +} +``` diff --git a/configs/swin/metafile.yaml b/configs/swin/metafile.yaml new file mode 100644 index 0000000000..67a4e07551 --- /dev/null +++ b/configs/swin/metafile.yaml @@ -0,0 +1,143 @@ +Models: +- Name: swin-tiny-patch4-window7-in1k-pre_upernet_8xb2-160k_ade20k-512x512 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 44.41 + mIoU(ms+flip): 45.79 + Config: configs/swin/swin-tiny-patch4-window7-in1k-pre_upernet_8xb2-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - Swin-T + - UPerNet + Training Resources: 8x V100 GPUS + Memory (GB): 5.02 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_tiny_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K/upernet_swin_tiny_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K_20210531_112542-e380ad3e.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_tiny_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K/upernet_swin_tiny_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K_20210531_112542.log.json + Paper: + Title: 'Swin Transformer: Hierarchical Vision Transformer using Shifted Windows' + URL: https://arxiv.org/abs/2103.14030 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/swin.py#L524 + Framework: PyTorch +- Name: swin-small-patch4-window7-in1k-pre_upernet_8xb2-160k_ade20k-512x512 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 47.72 + mIoU(ms+flip): 49.24 + Config: configs/swin/swin-small-patch4-window7-in1k-pre_upernet_8xb2-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - Swin-S + - UPerNet + Training Resources: 8x V100 GPUS + Memory (GB): 6.17 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_small_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K/upernet_swin_small_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K_20210526_192015-ee2fff1c.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_small_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K/upernet_swin_small_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K_20210526_192015.log.json + Paper: + Title: 'Swin Transformer: Hierarchical Vision Transformer using Shifted Windows' + URL: https://arxiv.org/abs/2103.14030 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/swin.py#L524 + Framework: PyTorch +- Name: swin-base-patch4-window7-in1k-pre_upernet_8xb2-160k_ade20k-512x512 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 47.99 + mIoU(ms+flip): 49.57 + Config: configs/swin/swin-base-patch4-window7-in1k-pre_upernet_8xb2-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - Swin-B + - UPerNet + Training Resources: 8x V100 GPUS + Memory (GB): 7.61 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_base_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K/upernet_swin_base_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K_20210526_192340-593b0e13.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_base_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K/upernet_swin_base_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K_20210526_192340.log.json + Paper: + Title: 'Swin Transformer: Hierarchical Vision Transformer using Shifted Windows' + URL: https://arxiv.org/abs/2103.14030 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/swin.py#L524 + Framework: PyTorch +- Name: swin-base-patch4-window7-in22k-pre_upernet_8xb2-160k_ade20k-512x512 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 50.13 + mIoU(ms+flip): 51.9 + Config: configs/swin/swin-base-patch4-window7-in22k-pre_upernet_8xb2-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - Swin-B + - UPerNet + Training Resources: 8x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_base_patch4_window7_512x512_160k_ade20k_pretrain_224x224_22K/upernet_swin_base_patch4_window7_512x512_160k_ade20k_pretrain_224x224_22K_20210526_211650-762e2178.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_base_patch4_window7_512x512_160k_ade20k_pretrain_224x224_22K/upernet_swin_base_patch4_window7_512x512_160k_ade20k_pretrain_224x224_22K_20210526_211650.log.json + Paper: + Title: 'Swin Transformer: Hierarchical Vision Transformer using Shifted Windows' + URL: https://arxiv.org/abs/2103.14030 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/swin.py#L524 + Framework: PyTorch +- Name: swin-base-patch4-window12-in1k-384x384-pre_upernet_8xb2-160k_ade20k-512x512 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 48.35 + mIoU(ms+flip): 49.65 + Config: configs/swin/swin-base-patch4-window12-in1k-384x384-pre_upernet_8xb2-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - Swin-B + - UPerNet + Training Resources: 8x V100 GPUS + Memory (GB): 8.52 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_base_patch4_window12_512x512_160k_ade20k_pretrain_384x384_1K/upernet_swin_base_patch4_window12_512x512_160k_ade20k_pretrain_384x384_1K_20210531_132020-05b22ea4.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_base_patch4_window12_512x512_160k_ade20k_pretrain_384x384_1K/upernet_swin_base_patch4_window12_512x512_160k_ade20k_pretrain_384x384_1K_20210531_132020.log.json + Paper: + Title: 'Swin Transformer: Hierarchical Vision Transformer using Shifted Windows' + URL: https://arxiv.org/abs/2103.14030 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/swin.py#L524 + Framework: PyTorch +- Name: swin-base-patch4-window12-in22k-384x384-pre_upernet_8xb2-160k_ade20k-512x512 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 50.76 + mIoU(ms+flip): 52.4 + Config: configs/swin/swin-base-patch4-window12-in22k-384x384-pre_upernet_8xb2-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - Swin-B + - UPerNet + Training Resources: 8x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_base_patch4_window12_512x512_160k_ade20k_pretrain_384x384_22K/upernet_swin_base_patch4_window12_512x512_160k_ade20k_pretrain_384x384_22K_20210531_125459-429057bf.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_base_patch4_window12_512x512_160k_ade20k_pretrain_384x384_22K/upernet_swin_base_patch4_window12_512x512_160k_ade20k_pretrain_384x384_22K_20210531_125459.log.json + Paper: + Title: 'Swin Transformer: Hierarchical Vision Transformer using Shifted Windows' + URL: https://arxiv.org/abs/2103.14030 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/swin.py#L524 + Framework: PyTorch diff --git a/configs/swin/swin.yml b/configs/swin/swin.yml deleted file mode 100644 index 783d839c8d..0000000000 --- a/configs/swin/swin.yml +++ /dev/null @@ -1,117 +0,0 @@ -Models: -- Name: swin-tiny-patch4-window7-in1k-pre_upernet_8xb2-160k_ade20k-512x512 - In Collection: UPerNet - Metadata: - backbone: Swin-T - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 47.48 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 5.02 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 44.41 - mIoU(ms+flip): 45.79 - Config: configs/swin/swin-tiny-patch4-window7-in1k-pre_upernet_8xb2-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_tiny_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K/upernet_swin_tiny_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K_20210531_112542-e380ad3e.pth -- Name: swin-small-patch4-window7-in1k-pre_upernet_8xb2-160k_ade20k-512x512 - In Collection: UPerNet - Metadata: - backbone: Swin-S - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 67.93 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 6.17 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 47.72 - mIoU(ms+flip): 49.24 - Config: configs/swin/swin-small-patch4-window7-in1k-pre_upernet_8xb2-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_small_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K/upernet_swin_small_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K_20210526_192015-ee2fff1c.pth -- Name: swin-base-patch4-window7-in1k-pre_upernet_8xb2-160k_ade20k-512x512 - In Collection: UPerNet - Metadata: - backbone: Swin-B - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 79.05 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 7.61 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 47.99 - mIoU(ms+flip): 49.57 - Config: configs/swin/swin-base-patch4-window7-in1k-pre_upernet_8xb2-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_base_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K/upernet_swin_base_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K_20210526_192340-593b0e13.pth -- Name: swin-base-patch4-window7-in22k-pre_upernet_8xb2-160k_ade20k-512x512 - In Collection: UPerNet - Metadata: - backbone: Swin-B - crop size: (512,512) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 50.13 - mIoU(ms+flip): 51.9 - Config: configs/swin/swin-base-patch4-window7-in22k-pre_upernet_8xb2-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_base_patch4_window7_512x512_160k_ade20k_pretrain_224x224_22K/upernet_swin_base_patch4_window7_512x512_160k_ade20k_pretrain_224x224_22K_20210526_211650-762e2178.pth -- Name: swin-base-patch4-window12-in1k-384x384-pre_upernet_8xb2-160k_ade20k-512x512 - In Collection: UPerNet - Metadata: - backbone: Swin-B - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 82.64 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 8.52 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 48.35 - mIoU(ms+flip): 49.65 - Config: configs/swin/swin-base-patch4-window12-in1k-384x384-pre_upernet_8xb2-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_base_patch4_window12_512x512_160k_ade20k_pretrain_384x384_1K/upernet_swin_base_patch4_window12_512x512_160k_ade20k_pretrain_384x384_1K_20210531_132020-05b22ea4.pth -- Name: swin-base-patch4-window12-in22k-384x384-pre_upernet_8xb2-160k_ade20k-512x512 - In Collection: UPerNet - Metadata: - backbone: Swin-B - crop size: (512,512) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 50.76 - mIoU(ms+flip): 52.4 - Config: configs/swin/swin-base-patch4-window12-in22k-384x384-pre_upernet_8xb2-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_base_patch4_window12_512x512_160k_ade20k_pretrain_384x384_22K/upernet_swin_base_patch4_window12_512x512_160k_ade20k_pretrain_384x384_22K_20210531_125459-429057bf.pth diff --git a/configs/twins/README.md b/configs/twins/README.md index 3e741802e6..306b65fac8 100644 --- a/configs/twins/README.md +++ b/configs/twins/README.md @@ -1,6 +1,6 @@ # Twins -[Twins: Revisiting the Design of Spatial Attention in Vision Transformers](https://arxiv.org/pdf/2104.13840.pdf) +> [Twins: Revisiting the Design of Spatial Attention in Vision Transformers](https://arxiv.org/pdf/2104.13840.pdf) ## Introduction @@ -22,17 +22,6 @@ Very recently, a variety of vision transformer architectures for dense predictio -## Citation - -```bibtex -@article{chu2021twins, - title={Twins: Revisiting spatial attention design in vision transformers}, - author={Chu, Xiangxiang and Tian, Zhi and Wang, Yuqing and Zhang, Bo and Ren, Haibing and Wei, Xiaolin and Xia, Huaxia and Shen, Chunhua}, - journal={arXiv preprint arXiv:2104.13840}, - year={2021}altgvt -} -``` - ## Usage We have provided pretrained models converted from [official repo](https://github.com/Meituan-AutoML/Twins). @@ -55,22 +44,33 @@ python tools/model_converters/twins2mmseg.py ./alt_gvt_base.pth ./pretrained/alt ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------------------- | -------- | --------- | ------- | -------- | -------------- | ----- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Twins-FPN | PCPVT-S | 512x512 | 80000 | 6.60 | 27.15 | 43.26 | 44.11 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/twins/twins_pcpvt-s_fpn_fpnhead_8xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-s_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_pcpvt-s_fpn_fpnhead_8x4_512x512_80k_ade20k_20211201_204132-41acd132.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-s_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_pcpvt-s_fpn_fpnhead_8x4_512x512_80k_ade20k_20211201_204132.log.json) | -| Twins-UPerNet | PCPVT-S | 512x512 | 160000 | 9.67 | 14.24 | 46.04 | 46.92 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/twins/twins_pcpvt-s_uperhead_8xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-s_uperhead_8x4_512x512_160k_ade20k/twins_pcpvt-s_uperhead_8x4_512x512_160k_ade20k_20211201_233537-8e99c07a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-s_uperhead_8x4_512x512_160k_ade20k/twins_pcpvt-s_uperhead_8x4_512x512_160k_ade20k_20211201_233537.log.json) | -| Twins-FPN | PCPVT-B | 512x512 | 80000 | 8.41 | 19.67 | 45.66 | 46.48 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/twins/twins_pcpvt-b_fpn_fpnhead_8xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-b_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_pcpvt-b_fpn_fpnhead_8x4_512x512_80k_ade20k_20211130_141019-d396db72.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-b_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_pcpvt-b_fpn_fpnhead_8x4_512x512_80k_ade20k_20211130_141019.log.json) | -| Twins-UPerNet (8x2) | PCPVT-B | 512x512 | 160000 | 6.46 | 12.04 | 47.91 | 48.64 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/twins/twins_pcpvt-b_uperhead_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-b_uperhead_8x2_512x512_160k_ade20k/twins_pcpvt-b_uperhead_8x2_512x512_160k_ade20k_20211130_141020-02094ea5.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-b_uperhead_8x2_512x512_160k_ade20k/twins_pcpvt-b_uperhead_8x2_512x512_160k_ade20k_20211130_141020.log.json) | -| Twins-FPN | PCPVT-L | 512x512 | 80000 | 10.78 | 14.32 | 45.94 | 46.70 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/twins/twins_pcpvt-l_fpn_fpnhead_8xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-l_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_pcpvt-l_fpn_fpnhead_8x4_512x512_80k_ade20k_20211201_105226-bc6d61dc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-l_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_pcpvt-l_fpn_fpnhead_8x4_512x512_80k_ade20k_20211201_105226.log.json) | -| Twins-UPerNet (8x2) | PCPVT-L | 512x512 | 160000 | 7.82 | 10.70 | 49.35 | 50.08 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/twins/twins_pcpvt-l_uperhead_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-l_uperhead_8x2_512x512_160k_ade20k/twins_pcpvt-l_uperhead_8x2_512x512_160k_ade20k_20211201_075053-c6095c07.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-l_uperhead_8x2_512x512_160k_ade20k/twins_pcpvt-l_uperhead_8x2_512x512_160k_ade20k_20211201_075053.log.json) | -| Twins-FPN | SVT-S | 512x512 | 80000 | 5.80 | 29.79 | 44.47 | 45.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/twins/twins_svt-s_fpn_fpnhead_8xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-s_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_svt-s_fpn_fpnhead_8x4_512x512_80k_ade20k_20211130_141006-0a0d3317.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-s_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_svt-s_fpn_fpnhead_8x4_512x512_80k_ade20k_20211130_141006.log.json) | -| Twins-UPerNet (8x2) | SVT-S | 512x512 | 160000 | 4.93 | 15.09 | 46.08 | 46.96 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/twins/twins_svt-s_uperhead_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-s_uperhead_8x2_512x512_160k_ade20k/twins_svt-s_uperhead_8x2_512x512_160k_ade20k_20211130_141005-e48a2d94.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-s_uperhead_8x2_512x512_160k_ade20k/twins_svt-s_uperhead_8x2_512x512_160k_ade20k_20211130_141005.log.json) | -| Twins-FPN | SVT-B | 512x512 | 80000 | 8.75 | 21.10 | 46.77 | 47.47 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/twins/twins_svt-b_fpn_fpnhead_8xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-b_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_svt-b_fpn_fpnhead_8x4_512x512_80k_ade20k_20211201_113849-88b2907c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-b_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_svt-b_fpn_fpnhead_8x4_512x512_80k_ade20k_20211201_113849.log.json) | -| Twins-UPerNet (8x2) | SVT-B | 512x512 | 160000 | 6.77 | 12.66 | 48.04 | 48.87 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/twins/twins_svt-b_uperhead_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-b_uperhead_8x2_512x512_160k_ade20k/twins_svt-b_uperhead_8x2_512x512_160k_ade20k_20211202_040826-0943a1f1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-b_uperhead_8x2_512x512_160k_ade20k/twins_svt-b_uperhead_8x2_512x512_160k_ade20k_20211202_040826.log.json) | -| Twins-FPN | SVT-L | 512x512 | 80000 | 11.20 | 17.80 | 46.55 | 47.74 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/twins/twins_svt-l_fpn_fpnhead_8xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-l_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_svt-l_fpn_fpnhead_8x4_512x512_80k_ade20k_20211130_141005-1d59bee2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-l_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_svt-l_fpn_fpnhead_8x4_512x512_80k_ade20k_20211130_141005.log.json) | -| Twins-UPerNet (8x2) | SVT-L | 512x512 | 160000 | 8.41 | 10.73 | 49.65 | 50.63 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/twins/twins_pcpvt-l_uperhead_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-l_uperhead_8x2_512x512_160k_ade20k/twins_svt-l_uperhead_8x2_512x512_160k_ade20k_20211130_141005-3e2cae61.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-l_uperhead_8x2_512x512_160k_ade20k/twins_svt-l_uperhead_8x2_512x512_160k_ade20k_20211130_141005.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------- | ------------------- | --------- | ------- | -------- | -------------- | ------ | ----- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| FPN | Twins-PCPVT-S | 512x512 | 80000 | 6.60 | 27.15 | V100 | 43.26 | 44.11 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/twins/twins_pcpvt-s_fpn_fpnhead_8xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-s_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_pcpvt-s_fpn_fpnhead_8x4_512x512_80k_ade20k_20211201_204132-41acd132.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-s_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_pcpvt-s_fpn_fpnhead_8x4_512x512_80k_ade20k_20211201_204132.log.json) | +| UPerNet | Twins-PCPVT-S | 512x512 | 160000 | 9.67 | 14.24 | V100 | 46.04 | 46.92 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/twins/twins_pcpvt-s_uperhead_8xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-s_uperhead_8x4_512x512_160k_ade20k/twins_pcpvt-s_uperhead_8x4_512x512_160k_ade20k_20211201_233537-8e99c07a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-s_uperhead_8x4_512x512_160k_ade20k/twins_pcpvt-s_uperhead_8x4_512x512_160k_ade20k_20211201_233537.log.json) | +| FPN | Twins-PCPVT-B | 512x512 | 80000 | 8.41 | 19.67 | V100 | 45.66 | 46.48 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/twins/twins_pcpvt-b_fpn_fpnhead_8xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-b_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_pcpvt-b_fpn_fpnhead_8x4_512x512_80k_ade20k_20211130_141019-d396db72.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-b_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_pcpvt-b_fpn_fpnhead_8x4_512x512_80k_ade20k_20211130_141019.log.json) | +| UPerNet | Twins-PCPVT-B (8x2) | 512x512 | 160000 | 6.46 | 12.04 | V100 | 47.91 | 48.64 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/twins/twins_pcpvt-b_uperhead_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-b_uperhead_8x2_512x512_160k_ade20k/twins_pcpvt-b_uperhead_8x2_512x512_160k_ade20k_20211130_141020-02094ea5.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-b_uperhead_8x2_512x512_160k_ade20k/twins_pcpvt-b_uperhead_8x2_512x512_160k_ade20k_20211130_141020.log.json) | +| FPN | Twins-PCPVT-L | 512x512 | 80000 | 10.78 | 14.32 | V100 | 45.94 | 46.70 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/twins/twins_pcpvt-l_fpn_fpnhead_8xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-l_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_pcpvt-l_fpn_fpnhead_8x4_512x512_80k_ade20k_20211201_105226-bc6d61dc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-l_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_pcpvt-l_fpn_fpnhead_8x4_512x512_80k_ade20k_20211201_105226.log.json) | +| UPerNet | Twins-PCPVT-L (8x2) | 512x512 | 160000 | 7.82 | 10.70 | V100 | 49.35 | 50.08 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/twins/twins_pcpvt-l_uperhead_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-l_uperhead_8x2_512x512_160k_ade20k/twins_pcpvt-l_uperhead_8x2_512x512_160k_ade20k_20211201_075053-c6095c07.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-l_uperhead_8x2_512x512_160k_ade20k/twins_pcpvt-l_uperhead_8x2_512x512_160k_ade20k_20211201_075053.log.json) | +| FPN | Twins-SVT-S | 512x512 | 80000 | 5.80 | 29.79 | V100 | 44.47 | 45.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/twins/twins_svt-s_fpn_fpnhead_8xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-s_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_svt-s_fpn_fpnhead_8x4_512x512_80k_ade20k_20211130_141006-0a0d3317.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-s_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_svt-s_fpn_fpnhead_8x4_512x512_80k_ade20k_20211130_141006.log.json) | +| UPerNet | SVT-S (8x2) | 512x512 | 160000 | 4.93 | 15.09 | V100 | 46.08 | 46.96 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/twins/twins_svt-s_uperhead_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-s_uperhead_8x2_512x512_160k_ade20k/twins_svt-s_uperhead_8x2_512x512_160k_ade20k_20211130_141005-e48a2d94.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-s_uperhead_8x2_512x512_160k_ade20k/twins_svt-s_uperhead_8x2_512x512_160k_ade20k_20211130_141005.log.json) | +| FPN | Twins-SVT-B | 512x512 | 80000 | 8.75 | 21.10 | V100 | 46.77 | 47.47 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/twins/twins_svt-b_fpn_fpnhead_8xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-b_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_svt-b_fpn_fpnhead_8x4_512x512_80k_ade20k_20211201_113849-88b2907c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-b_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_svt-b_fpn_fpnhead_8x4_512x512_80k_ade20k_20211201_113849.log.json) | +| UPerNet | Twins-SVT-B (8x2) | 512x512 | 160000 | 6.77 | 12.66 | V100 | 48.04 | 48.87 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/twins/twins_svt-b_uperhead_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-b_uperhead_8x2_512x512_160k_ade20k/twins_svt-b_uperhead_8x2_512x512_160k_ade20k_20211202_040826-0943a1f1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-b_uperhead_8x2_512x512_160k_ade20k/twins_svt-b_uperhead_8x2_512x512_160k_ade20k_20211202_040826.log.json) | +| FPN | Twins-SVT-L | 512x512 | 80000 | 11.20 | 17.80 | V100 | 46.55 | 47.74 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/twins/twins_svt-l_fpn_fpnhead_8xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-l_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_svt-l_fpn_fpnhead_8x4_512x512_80k_ade20k_20211130_141005-1d59bee2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-l_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_svt-l_fpn_fpnhead_8x4_512x512_80k_ade20k_20211130_141005.log.json) | +| UPerNet | Twins-SVT-L (8x2) | 512x512 | 160000 | 8.41 | 10.73 | V100 | 49.65 | 50.63 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/twins/twins_pcpvt-l_uperhead_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-l_uperhead_8x2_512x512_160k_ade20k/twins_svt-l_uperhead_8x2_512x512_160k_ade20k_20211130_141005-3e2cae61.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-l_uperhead_8x2_512x512_160k_ade20k/twins_svt-l_uperhead_8x2_512x512_160k_ade20k_20211130_141005.log.json) | Note: - `8x2` means 8 GPUs with 2 samples per GPU in training. Default setting of Twins on ADE20K is 8 GPUs with 4 samples per GPU in training. - `UPerNet` and `FPN` are decoder heads utilized in corresponding Twins model, which is `UPerHead` and `FPNHead`, respectively. Specifically, models in [official repo](https://github.com/Meituan-AutoML/Twins) all use `UPerHead`. + +## Citation + +```bibtex +@article{chu2021twins, + title={Twins: Revisiting spatial attention design in vision transformers}, + author={Chu, Xiangxiang and Tian, Zhi and Wang, Yuqing and Zhang, Bo and Ren, Haibing and Wei, Xiaolin and Xia, Huaxia and Shen, Chunhua}, + journal={arXiv preprint arXiv:2104.13840}, + year={2021}altgvt +} +``` diff --git a/configs/twins/metafile.yaml b/configs/twins/metafile.yaml new file mode 100644 index 0000000000..0de78d9d2e --- /dev/null +++ b/configs/twins/metafile.yaml @@ -0,0 +1,289 @@ +Models: +- Name: twins_pcpvt-s_fpn_fpnhead_8xb4-80k_ade20k-512x512 + In Collection: FPN + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 43.26 + mIoU(ms+flip): 44.11 + Config: configs/twins/twins_pcpvt-s_fpn_fpnhead_8xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 32 + Architecture: + - Twins-PCPVT-S + - FPN + Training Resources: 8x V100 GPUS + Memory (GB): 6.6 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-s_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_pcpvt-s_fpn_fpnhead_8x4_512x512_80k_ade20k_20211201_204132-41acd132.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-s_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_pcpvt-s_fpn_fpnhead_8x4_512x512_80k_ade20k_20211201_204132.log.json + Paper: + Title: 'Twins: Revisiting the Design of Spatial Attention in Vision Transformers' + URL: https://arxiv.org/pdf/2104.13840.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.20.0/mmseg/models/backbones/twins.py#L352 + Framework: PyTorch +- Name: twins_pcpvt-s_uperhead_8xb4-160k_ade20k-512x512 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 46.04 + mIoU(ms+flip): 46.92 + Config: configs/twins/twins_pcpvt-s_uperhead_8xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 32 + Architecture: + - Twins-PCPVT-S + - UPerNet + Training Resources: 8x V100 GPUS + Memory (GB): 9.67 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-s_uperhead_8x4_512x512_160k_ade20k/twins_pcpvt-s_uperhead_8x4_512x512_160k_ade20k_20211201_233537-8e99c07a.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-s_uperhead_8x4_512x512_160k_ade20k/twins_pcpvt-s_uperhead_8x4_512x512_160k_ade20k_20211201_233537.log.json + Paper: + Title: 'Twins: Revisiting the Design of Spatial Attention in Vision Transformers' + URL: https://arxiv.org/pdf/2104.13840.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.20.0/mmseg/models/backbones/twins.py#L352 + Framework: PyTorch +- Name: twins_pcpvt-b_fpn_fpnhead_8xb4-80k_ade20k-512x512 + In Collection: FPN + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 45.66 + mIoU(ms+flip): 46.48 + Config: configs/twins/twins_pcpvt-b_fpn_fpnhead_8xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 32 + Architecture: + - Twins-PCPVT-B + - FPN + Training Resources: 8x V100 GPUS + Memory (GB): 8.41 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-b_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_pcpvt-b_fpn_fpnhead_8x4_512x512_80k_ade20k_20211130_141019-d396db72.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-b_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_pcpvt-b_fpn_fpnhead_8x4_512x512_80k_ade20k_20211130_141019.log.json + Paper: + Title: 'Twins: Revisiting the Design of Spatial Attention in Vision Transformers' + URL: https://arxiv.org/pdf/2104.13840.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.20.0/mmseg/models/backbones/twins.py#L352 + Framework: PyTorch +- Name: twins_pcpvt-b_uperhead_8xb2-160k_ade20k-512x512 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 47.91 + mIoU(ms+flip): 48.64 + Config: configs/twins/twins_pcpvt-b_uperhead_8xb2-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - Twins-PCPVT-B + - UPerNet + Training Resources: 8x V100 GPUS + Memory (GB): 6.46 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-b_uperhead_8x2_512x512_160k_ade20k/twins_pcpvt-b_uperhead_8x2_512x512_160k_ade20k_20211130_141020-02094ea5.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-b_uperhead_8x2_512x512_160k_ade20k/twins_pcpvt-b_uperhead_8x2_512x512_160k_ade20k_20211130_141020.log.json + Paper: + Title: 'Twins: Revisiting the Design of Spatial Attention in Vision Transformers' + URL: https://arxiv.org/pdf/2104.13840.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.20.0/mmseg/models/backbones/twins.py#L352 + Framework: PyTorch +- Name: twins_pcpvt-l_fpn_fpnhead_8xb4-80k_ade20k-512x512 + In Collection: FPN + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 45.94 + mIoU(ms+flip): 46.7 + Config: configs/twins/twins_pcpvt-l_fpn_fpnhead_8xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 32 + Architecture: + - Twins-PCPVT-L + - FPN + Training Resources: 8x V100 GPUS + Memory (GB): 10.78 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-l_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_pcpvt-l_fpn_fpnhead_8x4_512x512_80k_ade20k_20211201_105226-bc6d61dc.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-l_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_pcpvt-l_fpn_fpnhead_8x4_512x512_80k_ade20k_20211201_105226.log.json + Paper: + Title: 'Twins: Revisiting the Design of Spatial Attention in Vision Transformers' + URL: https://arxiv.org/pdf/2104.13840.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.20.0/mmseg/models/backbones/twins.py#L352 + Framework: PyTorch +- Name: twins_pcpvt-l_uperhead_8xb2-160k_ade20k-512x512 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 49.35 + mIoU(ms+flip): 50.08 + Config: configs/twins/twins_pcpvt-l_uperhead_8xb2-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - Twins-PCPVT-L + - UPerNet + Training Resources: 8x V100 GPUS + Memory (GB): 7.82 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-l_uperhead_8x2_512x512_160k_ade20k/twins_pcpvt-l_uperhead_8x2_512x512_160k_ade20k_20211201_075053-c6095c07.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-l_uperhead_8x2_512x512_160k_ade20k/twins_pcpvt-l_uperhead_8x2_512x512_160k_ade20k_20211201_075053.log.json + Paper: + Title: 'Twins: Revisiting the Design of Spatial Attention in Vision Transformers' + URL: https://arxiv.org/pdf/2104.13840.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.20.0/mmseg/models/backbones/twins.py#L352 + Framework: PyTorch +- Name: twins_svt-s_fpn_fpnhead_8xb4-80k_ade20k-512x512 + In Collection: FPN + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 44.47 + mIoU(ms+flip): 45.42 + Config: configs/twins/twins_svt-s_fpn_fpnhead_8xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 32 + Architecture: + - Twins-SVT-S + - FPN + Training Resources: 8x V100 GPUS + Memory (GB): 5.8 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-s_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_svt-s_fpn_fpnhead_8x4_512x512_80k_ade20k_20211130_141006-0a0d3317.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-s_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_svt-s_fpn_fpnhead_8x4_512x512_80k_ade20k_20211130_141006.log.json + Paper: + Title: 'Twins: Revisiting the Design of Spatial Attention in Vision Transformers' + URL: https://arxiv.org/pdf/2104.13840.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.20.0/mmseg/models/backbones/twins.py#L352 + Framework: PyTorch +- Name: twins_svt-s_uperhead_8xb2-160k_ade20k-512x512 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 46.08 + mIoU(ms+flip): 46.96 + Config: configs/twins/twins_svt-s_uperhead_8xb2-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - SVT-S + - UPerNet + Training Resources: 8x V100 GPUS + Memory (GB): 4.93 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-s_uperhead_8x2_512x512_160k_ade20k/twins_svt-s_uperhead_8x2_512x512_160k_ade20k_20211130_141005-e48a2d94.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-s_uperhead_8x2_512x512_160k_ade20k/twins_svt-s_uperhead_8x2_512x512_160k_ade20k_20211130_141005.log.json + Paper: + Title: 'Twins: Revisiting the Design of Spatial Attention in Vision Transformers' + URL: https://arxiv.org/pdf/2104.13840.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.20.0/mmseg/models/backbones/twins.py#L352 + Framework: PyTorch +- Name: twins_svt-b_fpn_fpnhead_8xb4-80k_ade20k-512x512 + In Collection: FPN + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 46.77 + mIoU(ms+flip): 47.47 + Config: configs/twins/twins_svt-b_fpn_fpnhead_8xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 32 + Architecture: + - Twins-SVT-B + - FPN + Training Resources: 8x V100 GPUS + Memory (GB): 8.75 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-b_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_svt-b_fpn_fpnhead_8x4_512x512_80k_ade20k_20211201_113849-88b2907c.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-b_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_svt-b_fpn_fpnhead_8x4_512x512_80k_ade20k_20211201_113849.log.json + Paper: + Title: 'Twins: Revisiting the Design of Spatial Attention in Vision Transformers' + URL: https://arxiv.org/pdf/2104.13840.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.20.0/mmseg/models/backbones/twins.py#L352 + Framework: PyTorch +- Name: twins_svt-b_uperhead_8xb2-160k_ade20k-512x512 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 48.04 + mIoU(ms+flip): 48.87 + Config: configs/twins/twins_svt-b_uperhead_8xb2-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - Twins-SVT-B + - UPerNet + Training Resources: 8x V100 GPUS + Memory (GB): 6.77 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-b_uperhead_8x2_512x512_160k_ade20k/twins_svt-b_uperhead_8x2_512x512_160k_ade20k_20211202_040826-0943a1f1.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-b_uperhead_8x2_512x512_160k_ade20k/twins_svt-b_uperhead_8x2_512x512_160k_ade20k_20211202_040826.log.json + Paper: + Title: 'Twins: Revisiting the Design of Spatial Attention in Vision Transformers' + URL: https://arxiv.org/pdf/2104.13840.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.20.0/mmseg/models/backbones/twins.py#L352 + Framework: PyTorch +- Name: twins_svt-l_fpn_fpnhead_8xb4-80k_ade20k-512x512 + In Collection: FPN + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 46.55 + mIoU(ms+flip): 47.74 + Config: configs/twins/twins_svt-l_fpn_fpnhead_8xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 32 + Architecture: + - Twins-SVT-L + - FPN + Training Resources: 8x V100 GPUS + Memory (GB): 11.2 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-l_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_svt-l_fpn_fpnhead_8x4_512x512_80k_ade20k_20211130_141005-1d59bee2.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-l_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_svt-l_fpn_fpnhead_8x4_512x512_80k_ade20k_20211130_141005.log.json + Paper: + Title: 'Twins: Revisiting the Design of Spatial Attention in Vision Transformers' + URL: https://arxiv.org/pdf/2104.13840.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.20.0/mmseg/models/backbones/twins.py#L352 + Framework: PyTorch +- Name: twins_pcpvt-l_uperhead_8xb2-160k_ade20k-512x512 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 49.65 + mIoU(ms+flip): 50.63 + Config: configs/twins/twins_pcpvt-l_uperhead_8xb2-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - Twins-SVT-L + - UPerNet + Training Resources: 8x V100 GPUS + Memory (GB): 8.41 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-l_uperhead_8x2_512x512_160k_ade20k/twins_svt-l_uperhead_8x2_512x512_160k_ade20k_20211130_141005-3e2cae61.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-l_uperhead_8x2_512x512_160k_ade20k/twins_svt-l_uperhead_8x2_512x512_160k_ade20k_20211130_141005.log.json + Paper: + Title: 'Twins: Revisiting the Design of Spatial Attention in Vision Transformers' + URL: https://arxiv.org/pdf/2104.13840.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.20.0/mmseg/models/backbones/twins.py#L352 + Framework: PyTorch diff --git a/configs/twins/twins.yml b/configs/twins/twins.yml deleted file mode 100644 index 48d25c682f..0000000000 --- a/configs/twins/twins.yml +++ /dev/null @@ -1,265 +0,0 @@ -Models: -- Name: twins_pcpvt-s_fpn_fpnhead_8xb4-80k_ade20k-512x512 - In Collection: FPN - Metadata: - backbone: PCPVT-S - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 36.83 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 6.6 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 43.26 - mIoU(ms+flip): 44.11 - Config: configs/twins/twins_pcpvt-s_fpn_fpnhead_8xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-s_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_pcpvt-s_fpn_fpnhead_8x4_512x512_80k_ade20k_20211201_204132-41acd132.pth -- Name: twins_pcpvt-s_uperhead_8xb4-160k_ade20k-512x512 - In Collection: UPerNet - Metadata: - backbone: PCPVT-S - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 70.22 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 9.67 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 46.04 - mIoU(ms+flip): 46.92 - Config: configs/twins/twins_pcpvt-s_uperhead_8xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-s_uperhead_8x4_512x512_160k_ade20k/twins_pcpvt-s_uperhead_8x4_512x512_160k_ade20k_20211201_233537-8e99c07a.pth -- Name: twins_pcpvt-b_fpn_fpnhead_8xb4-80k_ade20k-512x512 - In Collection: FPN - Metadata: - backbone: PCPVT-B - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 50.84 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 8.41 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 45.66 - mIoU(ms+flip): 46.48 - Config: configs/twins/twins_pcpvt-b_fpn_fpnhead_8xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-b_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_pcpvt-b_fpn_fpnhead_8x4_512x512_80k_ade20k_20211130_141019-d396db72.pth -- Name: twins_pcpvt-b_uperhead_8xb2-160k_ade20k-512x512 - In Collection: UPerNet - Metadata: - backbone: PCPVT-B - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 83.06 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 6.46 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 47.91 - mIoU(ms+flip): 48.64 - Config: configs/twins/twins_pcpvt-b_uperhead_8xb2-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-b_uperhead_8x2_512x512_160k_ade20k/twins_pcpvt-b_uperhead_8x2_512x512_160k_ade20k_20211130_141020-02094ea5.pth -- Name: twins_pcpvt-l_fpn_fpnhead_8xb4-80k_ade20k-512x512 - In Collection: FPN - Metadata: - backbone: PCPVT-L - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 69.83 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 10.78 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 45.94 - mIoU(ms+flip): 46.7 - Config: configs/twins/twins_pcpvt-l_fpn_fpnhead_8xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-l_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_pcpvt-l_fpn_fpnhead_8x4_512x512_80k_ade20k_20211201_105226-bc6d61dc.pth -- Name: twins_pcpvt-l_uperhead_8xb2-160k_ade20k-512x512 - In Collection: UPerNet - Metadata: - backbone: PCPVT-L - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 93.46 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 7.82 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 49.35 - mIoU(ms+flip): 50.08 - Config: configs/twins/twins_pcpvt-l_uperhead_8xb2-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-l_uperhead_8x2_512x512_160k_ade20k/twins_pcpvt-l_uperhead_8x2_512x512_160k_ade20k_20211201_075053-c6095c07.pth -- Name: twins_svt-s_fpn_fpnhead_8xb4-80k_ade20k-512x512 - In Collection: FPN - Metadata: - backbone: SVT-S - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 33.57 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 5.8 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 44.47 - mIoU(ms+flip): 45.42 - Config: configs/twins/twins_svt-s_fpn_fpnhead_8xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-s_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_svt-s_fpn_fpnhead_8x4_512x512_80k_ade20k_20211130_141006-0a0d3317.pth -- Name: twins_svt-s_uperhead_8xb2-160k_ade20k-512x512 - In Collection: UPerNet - Metadata: - backbone: SVT-S - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 66.27 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 4.93 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 46.08 - mIoU(ms+flip): 46.96 - Config: configs/twins/twins_svt-s_uperhead_8xb2-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-s_uperhead_8x2_512x512_160k_ade20k/twins_svt-s_uperhead_8x2_512x512_160k_ade20k_20211130_141005-e48a2d94.pth -- Name: twins_svt-b_fpn_fpnhead_8xb4-80k_ade20k-512x512 - In Collection: FPN - Metadata: - backbone: SVT-B - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 47.39 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 8.75 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 46.77 - mIoU(ms+flip): 47.47 - Config: configs/twins/twins_svt-b_fpn_fpnhead_8xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-b_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_svt-b_fpn_fpnhead_8x4_512x512_80k_ade20k_20211201_113849-88b2907c.pth -- Name: twins_svt-b_uperhead_8xb2-160k_ade20k-512x512 - In Collection: UPerNet - Metadata: - backbone: SVT-B - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 78.99 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 6.77 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 48.04 - mIoU(ms+flip): 48.87 - Config: configs/twins/twins_svt-b_uperhead_8xb2-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-b_uperhead_8x2_512x512_160k_ade20k/twins_svt-b_uperhead_8x2_512x512_160k_ade20k_20211202_040826-0943a1f1.pth -- Name: twins_svt-l_fpn_fpnhead_8xb4-80k_ade20k-512x512 - In Collection: FPN - Metadata: - backbone: SVT-L - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 56.18 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 11.2 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 46.55 - mIoU(ms+flip): 47.74 - Config: configs/twins/twins_svt-l_fpn_fpnhead_8xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-l_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_svt-l_fpn_fpnhead_8x4_512x512_80k_ade20k_20211130_141005-1d59bee2.pth -- Name: twins_pcpvt-l_uperhead_8xb2-160k_ade20k-512x512 - In Collection: UPerNet - Metadata: - backbone: SVT-L - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 93.2 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 8.41 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 49.65 - mIoU(ms+flip): 50.63 - Config: configs/twins/twins_pcpvt-l_uperhead_8xb2-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-l_uperhead_8x2_512x512_160k_ade20k/twins_svt-l_uperhead_8x2_512x512_160k_ade20k_20211130_141005-3e2cae61.pth diff --git a/configs/unet/README.md b/configs/unet/README.md index f3dc261c22..e42cd0f91e 100644 --- a/configs/unet/README.md +++ b/configs/unet/README.md @@ -1,6 +1,6 @@ # UNet -[U-Net: Convolutional Networks for Biomedical Image Segmentation](https://arxiv.org/abs/1505.04597) +> [U-Net: Convolutional Networks for Biomedical Image Segmentation](https://arxiv.org/abs/1505.04597) ## Introduction @@ -22,71 +22,71 @@ There is large consent that successful training of deep networks requires many t -## Citation - -```bibtex -@inproceedings{ronneberger2015u, - title={U-net: Convolutional networks for biomedical image segmentation}, - author={Ronneberger, Olaf and Fischer, Philipp and Brox, Thomas}, - booktitle={International Conference on Medical image computing and computer-assisted intervention}, - pages={234--241}, - year={2015}, - organization={Springer} -} -``` - ## Results and models ### Cityscapes -| Method | Backbone | Loss | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ---------- | ----------- | ------------- | --------- | ------: | -------- | -------------- | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| UNet + FCN | UNet-S5-D16 | Cross Entropy | 512x1024 | 160000 | 17.91 | 3.05 | 69.10 | 71.05 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_fcn_4xb4-160k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_4x4_512x1024_160k_cityscapes/fcn_unet_s5-d16_4x4_512x1024_160k_cityscapes_20211210_145204-6860854e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_4x4_512x1024_160k_cityscapes/fcn_unet_s5-d16_4x4_512x1024_160k_cityscapes_20211210_145204.log.json) | +| Method | Backbone | Loss | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------- | ----------- | ------------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| UNet + FCN | UNet-S5-D16 | Cross Entropy | 512x1024 | 160000 | 17.91 | 3.05 | V100 | 69.10 | 71.05 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_fcn_4xb4-160k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_4x4_512x1024_160k_cityscapes/fcn_unet_s5-d16_4x4_512x1024_160k_cityscapes_20211210_145204-6860854e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_4x4_512x1024_160k_cityscapes/fcn_unet_s5-d16_4x4_512x1024_160k_cityscapes_20211210_145204.log.json) | ### DRIVE -| Method | Backbone | Loss | Image Size | Crop Size | Stride | Lr schd | Mem (GB) | Inf time (fps) | mDice | Dice | config | download | -| ---------------- | ----------- | -------------------- | ---------- | --------- | -----: | ------- | -------- | -------------: | ----: | ----: | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| UNet + FCN | UNet-S5-D16 | Cross Entropy | 584x565 | 64x64 | 42x42 | 40000 | 0.680 | - | 88.38 | 78.67 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_fcn_4xb4-40k_drive-64x64.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_64x64_40k_drive/fcn_unet_s5-d16_64x64_40k_drive_20201223_191051-5daf6d3b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/unet_s5-d16_64x64_40k_drive/unet_s5-d16_64x64_40k_drive-20201223_191051.log.json) | -| UNet + FCN | UNet-S5-D16 | Cross Entropy + Dice | 584x565 | 64x64 | 42x42 | 40000 | 0.582 | - | 88.71 | 79.32 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_fcn_4xb4-ce-1.0-dice-3.0-40k_drive-64x64.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive/fcn_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive_20211210_201820-785de5c2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive/fcn_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive_20211210_201820.log.json) | -| UNet + PSPNet | UNet-S5-D16 | Cross Entropy | 584x565 | 64x64 | 42x42 | 40000 | 0.599 | - | 88.35 | 78.62 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_pspnet_4xb4-40k_drive-64x64.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_64x64_40k_drive/pspnet_unet_s5-d16_64x64_40k_drive_20201227_181818-aac73387.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_64x64_40k_drive/pspnet_unet_s5-d16_64x64_40k_drive-20201227_181818.log.json) | -| UNet + PSPNet | UNet-S5-D16 | Cross Entropy + Dice | 584x565 | 64x64 | 42x42 | 40000 | 0.585 | - | 88.76 | 79.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_pspnet_4xb4-ce-1.0-dice-3.0-40k_drive-64x64.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive/pspnet_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive_20211210_201821-22b3e3ba.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive/pspnet_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive_20211210_201821.log.json) | -| UNet + DeepLabV3 | UNet-S5-D16 | Cross Entropy | 584x565 | 64x64 | 42x42 | 40000 | 0.596 | - | 88.38 | 78.69 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_deeplabv3_4xb4-40k_drive-64x64.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_64x64_40k_drive/deeplabv3_unet_s5-d16_64x64_40k_drive_20201226_094047-0671ff20.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_64x64_40k_drive/deeplabv3_unet_s5-d16_64x64_40k_drive-20201226_094047.log.json) | -| UNet + DeepLabV3 | UNet-S5-D16 | Cross Entropy + Dice | 584x565 | 64x64 | 42x42 | 40000 | 0.582 | - | 88.84 | 79.56 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_deeplabv3_4xb4-ce-1.0-dice-3.0-40k_drive-64x64.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive_20211210_201825-6bf0efd7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive_20211210_201825.log.json) | +| Method | Backbone | Loss | Image Size | Crop Size | Stride | Lr schd | Mem (GB) | Inf time (fps) | Device | mDice | Dice | config | download | +| ---------------- | ----------- | -------------------- | ---------- | --------- | -----: | ------- | -------- | -------------: | ------ | ----: | ----: | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| UNet + FCN | UNet-S5-D16 | Cross Entropy | 584x565 | 64x64 | 42x42 | 40000 | 0.680 | - | V100 | 88.38 | 78.67 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_fcn_4xb4-40k_drive-64x64.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_64x64_40k_drive/fcn_unet_s5-d16_64x64_40k_drive_20201223_191051-5daf6d3b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/unet_s5-d16_64x64_40k_drive/unet_s5-d16_64x64_40k_drive-20201223_191051.log.json) | +| UNet + FCN | UNet-S5-D16 | Cross Entropy + Dice | 584x565 | 64x64 | 42x42 | 40000 | 0.582 | - | V100 | 88.71 | 79.32 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_fcn_4xb4-ce-1.0-dice-3.0-40k_drive-64x64.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive/fcn_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive_20211210_201820-785de5c2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive/fcn_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive_20211210_201820.log.json) | +| UNet + PSPNet | UNet-S5-D16 | Cross Entropy | 584x565 | 64x64 | 42x42 | 40000 | 0.599 | - | V100 | 88.35 | 78.62 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_pspnet_4xb4-40k_drive-64x64.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_64x64_40k_drive/pspnet_unet_s5-d16_64x64_40k_drive_20201227_181818-aac73387.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_64x64_40k_drive/pspnet_unet_s5-d16_64x64_40k_drive-20201227_181818.log.json) | +| UNet + PSPNet | UNet-S5-D16 | Cross Entropy + Dice | 584x565 | 64x64 | 42x42 | 40000 | 0.585 | - | V100 | 88.76 | 79.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_pspnet_4xb4-ce-1.0-dice-3.0-40k_drive-64x64.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive/pspnet_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive_20211210_201821-22b3e3ba.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive/pspnet_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive_20211210_201821.log.json) | +| UNet + DeepLabV3 | UNet-S5-D16 | Cross Entropy | 584x565 | 64x64 | 42x42 | 40000 | 0.596 | - | V100 | 88.38 | 78.69 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_deeplabv3_4xb4-40k_drive-64x64.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_64x64_40k_drive/deeplabv3_unet_s5-d16_64x64_40k_drive_20201226_094047-0671ff20.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_64x64_40k_drive/deeplabv3_unet_s5-d16_64x64_40k_drive-20201226_094047.log.json) | +| UNet + DeepLabV3 | UNet-S5-D16 | Cross Entropy + Dice | 584x565 | 64x64 | 42x42 | 40000 | 0.582 | - | V100 | 88.84 | 79.56 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_deeplabv3_4xb4-ce-1.0-dice-3.0-40k_drive-64x64.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive_20211210_201825-6bf0efd7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive_20211210_201825.log.json) | ### STARE -| Method | Backbone | Loss | Image Size | Crop Size | Stride | Lr schd | Mem (GB) | Inf time (fps) | mDice | Dice | config | download | -| ---------------- | ----------- | -------------------- | ---------- | --------- | -----: | ------- | -------- | -------------: | ----: | ----: | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| UNet + FCN | UNet-S5-D16 | Cross Entropy | 605x700 | 128x128 | 85x85 | 40000 | 0.968 | - | 89.78 | 81.02 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_fcn_4xb4-40k_stare-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_128x128_40k_stare/fcn_unet_s5-d16_128x128_40k_stare_20201223_191051-7d77e78b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/unet_s5-d16_128x128_40k_stare/unet_s5-d16_128x128_40k_stare-20201223_191051.log.json) | -| UNet + FCN | UNet-S5-D16 | Cross Entropy + Dice | 605x700 | 128x128 | 85x85 | 40000 | 0.986 | - | 90.65 | 82.70 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_fcn_4xb4-ce-1.0-dice-3.0-40k_stare-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare_20211210_201821-f75705a9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare_20211210_201821.log.json) | -| UNet + PSPNet | UNet-S5-D16 | Cross Entropy | 605x700 | 128x128 | 85x85 | 40000 | 0.982 | - | 89.89 | 81.22 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_pspnet_4xb4-40k_stare-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_128x128_40k_stare/pspnet_unet_s5-d16_128x128_40k_stare_20201227_181818-3c2923c4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_128x128_40k_stare/pspnet_unet_s5-d16_128x128_40k_stare-20201227_181818.log.json) | -| UNet + PSPNet | UNet-S5-D16 | Cross Entropy + Dice | 605x700 | 128x128 | 85x85 | 40000 | 1.028 | - | 90.72 | 82.84 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_pspnet_4xb4-ce-1.0-dice-3.0-40k_stare-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare_20211210_201823-f1063ef7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare_20211210_201823.log.json) | -| UNet + DeepLabV3 | UNet-S5-D16 | Cross Entropy | 605x700 | 128x128 | 85x85 | 40000 | 0.999 | - | 89.73 | 80.93 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_deeplabv3_4xb4-40k_stare-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_128x128_40k_stare/deeplabv3_unet_s5-d16_128x128_40k_stare_20201226_094047-93dcb93c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_128x128_40k_stare/deeplabv3_unet_s5-d16_128x128_40k_stare-20201226_094047.log.json) | -| UNet + DeepLabV3 | UNet-S5-D16 | Cross Entropy + Dice | 605x700 | 128x128 | 85x85 | 40000 | 1.010 | - | 90.65 | 82.71 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_deeplabv3_4xb4-ce-1.0-dice-3.0-40k_stare-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare_20211210_201825-21db614c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare_20211210_201825.log.json) | +| Method | Backbone | Loss | Image Size | Crop Size | Stride | Lr schd | Mem (GB) | Inf time (fps) | Device | mDice | Dice | config | download | +| ---------------- | ----------- | -------------------- | ---------- | --------- | -----: | ------- | -------- | -------------: | ------ | ----: | ----: | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| UNet + FCN | UNet-S5-D16 | Cross Entropy | 605x700 | 128x128 | 85x85 | 40000 | 0.968 | - | V100 | 89.78 | 81.02 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_fcn_4xb4-40k_stare-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_128x128_40k_stare/fcn_unet_s5-d16_128x128_40k_stare_20201223_191051-7d77e78b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/unet_s5-d16_128x128_40k_stare/unet_s5-d16_128x128_40k_stare-20201223_191051.log.json) | +| UNet + FCN | UNet-S5-D16 | Cross Entropy + Dice | 605x700 | 128x128 | 85x85 | 40000 | 0.986 | - | V100 | 90.65 | 82.70 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_fcn_4xb4-ce-1.0-dice-3.0-40k_stare-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare_20211210_201821-f75705a9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare_20211210_201821.log.json) | +| UNet + PSPNet | UNet-S5-D16 | Cross Entropy | 605x700 | 128x128 | 85x85 | 40000 | 0.982 | - | V100 | 89.89 | 81.22 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_pspnet_4xb4-40k_stare-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_128x128_40k_stare/pspnet_unet_s5-d16_128x128_40k_stare_20201227_181818-3c2923c4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_128x128_40k_stare/pspnet_unet_s5-d16_128x128_40k_stare-20201227_181818.log.json) | +| UNet + PSPNet | UNet-S5-D16 | Cross Entropy + Dice | 605x700 | 128x128 | 85x85 | 40000 | 1.028 | - | V100 | 90.72 | 82.84 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_pspnet_4xb4-ce-1.0-dice-3.0-40k_stare-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare_20211210_201823-f1063ef7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare_20211210_201823.log.json) | +| UNet + DeepLabV3 | UNet-S5-D16 | Cross Entropy | 605x700 | 128x128 | 85x85 | 40000 | 0.999 | - | V100 | 89.73 | 80.93 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_deeplabv3_4xb4-40k_stare-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_128x128_40k_stare/deeplabv3_unet_s5-d16_128x128_40k_stare_20201226_094047-93dcb93c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_128x128_40k_stare/deeplabv3_unet_s5-d16_128x128_40k_stare-20201226_094047.log.json) | +| UNet + DeepLabV3 | UNet-S5-D16 | Cross Entropy + Dice | 605x700 | 128x128 | 85x85 | 40000 | 1.010 | - | V100 | 90.65 | 82.71 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_deeplabv3_4xb4-ce-1.0-dice-3.0-40k_stare-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare_20211210_201825-21db614c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare_20211210_201825.log.json) | ### CHASE_DB1 -| Method | Backbone | Loss | Image Size | Crop Size | Stride | Lr schd | Mem (GB) | Inf time (fps) | mDice | Dice | config | download | -| ---------------- | ----------- | -------------------- | ---------- | --------- | -----: | ------- | -------- | -------------: | ----: | ----: | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| UNet + FCN | UNet-S5-D16 | Cross Entropy | 960x999 | 128x128 | 85x85 | 40000 | 0.968 | - | 89.46 | 80.24 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_fcn_4xb4-40k_chase-db1-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_128x128_40k_chase_db1/fcn_unet_s5-d16_128x128_40k_chase_db1_20201223_191051-11543527.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/unet_s5-d16_128x128_40k_chase_db1/unet_s5-d16_128x128_40k_chase_db1-20201223_191051.log.json) | -| UNet + FCN | UNet-S5-D16 | Cross Entropy + Dice | 960x999 | 128x128 | 85x85 | 40000 | 0.986 | - | 89.52 | 80.40 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_fcn_4xb4-ce-1.0-dice-3.0-40k_chase-db1-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1_20211210_201821-1c4eb7cf.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1_20211210_201821.log.json) | -| UNet + PSPNet | UNet-S5-D16 | Cross Entropy | 960x999 | 128x128 | 85x85 | 40000 | 0.982 | - | 89.52 | 80.36 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_pspnet_4xb4-40k_chase-db1-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_128x128_40k_chase_db1/pspnet_unet_s5-d16_128x128_40k_chase_db1_20201227_181818-68d4e609.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_128x128_40k_chase_db1/pspnet_unet_s5-d16_128x128_40k_chase_db1-20201227_181818.log.json) | -| UNet + PSPNet | UNet-S5-D16 | Cross Entropy + Dice | 960x999 | 128x128 | 85x85 | 40000 | 1.028 | - | 89.45 | 80.28 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_pspnet_4xb4-ce-1.0-dice-3.0-40k_chase-db1-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1_20211210_201823-c0802c4d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1_20211210_201823.log.json) | -| UNet + DeepLabV3 | UNet-S5-D16 | Cross Entropy | 960x999 | 128x128 | 85x85 | 40000 | 0.999 | - | 89.57 | 80.47 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet_s5-d16_deeplabv3_4xb4-40k_chase-db1-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_128x128_40k_chase_db1/deeplabv3_unet_s5-d16_128x128_40k_chase_db1_20201226_094047-4c5aefa3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_128x128_40k_chase_db1/deeplabv3_unet_s5-d16_128x128_40k_chase_db1-20201226_094047.log.json) | -| UNet + DeepLabV3 | UNet-S5-D16 | Cross Entropy + Dice | 960x999 | 128x128 | 85x85 | 40000 | 1.010 | - | 89.49 | 80.37 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_deeplabv3_4xb4-ce-1.0-dice-3.0-40k_chase-db1-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1_20211210_201825-4ef29df5.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1_20211210_201825.log.json) | +| Method | Backbone | Loss | Image Size | Crop Size | Stride | Lr schd | Mem (GB) | Inf time (fps) | Device | mDice | Dice | config | download | +| ---------------- | ----------- | -------------------- | ---------- | --------- | -----: | ------- | -------- | -------------: | ------ | ----: | ----: | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| UNet + FCN | UNet-S5-D16 | Cross Entropy | 960x999 | 128x128 | 85x85 | 40000 | 0.968 | - | V100 | 89.46 | 80.24 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_fcn_4xb4-40k_chase-db1-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_128x128_40k_chase_db1/fcn_unet_s5-d16_128x128_40k_chase_db1_20201223_191051-11543527.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/unet_s5-d16_128x128_40k_chase_db1/unet_s5-d16_128x128_40k_chase_db1-20201223_191051.log.json) | +| UNet + FCN | UNet-S5-D16 | Cross Entropy + Dice | 960x999 | 128x128 | 85x85 | 40000 | 0.986 | - | V100 | 89.52 | 80.40 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_fcn_4xb4-ce-1.0-dice-3.0-40k_chase-db1-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1_20211210_201821-1c4eb7cf.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1_20211210_201821.log.json) | +| UNet + PSPNet | UNet-S5-D16 | Cross Entropy | 960x999 | 128x128 | 85x85 | 40000 | 0.982 | - | V100 | 89.52 | 80.36 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_pspnet_4xb4-40k_chase-db1-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_128x128_40k_chase_db1/pspnet_unet_s5-d16_128x128_40k_chase_db1_20201227_181818-68d4e609.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_128x128_40k_chase_db1/pspnet_unet_s5-d16_128x128_40k_chase_db1-20201227_181818.log.json) | +| UNet + PSPNet | UNet-S5-D16 | Cross Entropy + Dice | 960x999 | 128x128 | 85x85 | 40000 | 1.028 | - | V100 | 89.45 | 80.28 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_pspnet_4xb4-ce-1.0-dice-3.0-40k_chase-db1-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1_20211210_201823-c0802c4d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1_20211210_201823.log.json) | +| UNet + DeepLabV3 | UNet-S5-D16 | Cross Entropy | 960x999 | 128x128 | 85x85 | 40000 | 0.999 | - | V100 | 89.57 | 80.47 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet_s5-d16_deeplabv3_4xb4-40k_chase-db1-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_128x128_40k_chase_db1/deeplabv3_unet_s5-d16_128x128_40k_chase_db1_20201226_094047-4c5aefa3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_128x128_40k_chase_db1/deeplabv3_unet_s5-d16_128x128_40k_chase_db1-20201226_094047.log.json) | +| UNet + DeepLabV3 | UNet-S5-D16 | Cross Entropy + Dice | 960x999 | 128x128 | 85x85 | 40000 | 1.010 | - | V100 | 89.49 | 80.37 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_deeplabv3_4xb4-ce-1.0-dice-3.0-40k_chase-db1-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1_20211210_201825-4ef29df5.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1_20211210_201825.log.json) | ### HRF -| Method | Backbone | Loss | Image Size | Crop Size | Stride | Lr schd | Mem (GB) | Inf time (fps) | mDice | Dice | config | download | -| ---------------- | ----------- | -------------------- | ---------- | --------- | ------: | ------- | -------- | -------------: | ----: | ----: | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| UNet + FCN | UNet-S5-D16 | Cross Entropy | 2336x3504 | 256x256 | 170x170 | 40000 | 2.525 | - | 88.92 | 79.45 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_fcn_4xb4-40k_hrf-256x256.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_256x256_40k_hrf/fcn_unet_s5-d16_256x256_40k_hrf_20201223_173724-d89cf1ed.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/unet_s5-d16_256x256_40k_hrf/unet_s5-d16_256x256_40k_hrf-20201223_173724.log.json) | -| UNet + FCN | UNet-S5-D16 | Cross Entropy + Dice | 2336x3504 | 256x256 | 170x170 | 40000 | 2.623 | - | 89.64 | 80.87 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_fcn_4xb4-ce-1.0-dice-3.0-40k_hrf-256x256.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf/fcn_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf_20211210_201821-c314da8a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf/fcn_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf_20211210_201821.log.json) | -| UNet + PSPNet | UNet-S5-D16 | Cross Entropy | 2336x3504 | 256x256 | 170x170 | 40000 | 2.588 | - | 89.24 | 80.07 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_pspnet_4xb4-40k_hrf-256x256.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_256x256_40k_hrf/pspnet_unet_s5-d16_256x256_40k_hrf_20201227_181818-fdb7e29b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_256x256_40k_hrf/pspnet_unet_s5-d16_256x256_40k_hrf-20201227_181818.log.json) | -| UNet + PSPNet | UNet-S5-D16 | Cross Entropy + Dice | 2336x3504 | 256x256 | 170x170 | 40000 | 2.798 | - | 89.69 | 80.96 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_pspnet_4xb4-ce-1.0-dice-3.0-40k_hrf-256x256.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf/pspnet_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf_20211210_201823-53d492fa.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf/pspnet_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf_20211210_201823.log.json) | -| UNet + DeepLabV3 | UNet-S5-D16 | Cross Entropy | 2336x3504 | 256x256 | 170x170 | 40000 | 2.604 | - | 89.32 | 80.21 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_deeplabv3_4xb4-40k_hrf-256x256.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_256x256_40k_hrf/deeplabv3_unet_s5-d16_256x256_40k_hrf_20201226_094047-3a1fdf85.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_256x256_40k_hrf/deeplabv3_unet_s5-d16_256x256_40k_hrf-20201226_094047.log.json) | -| UNet + DeepLabV3 | UNet-S5-D16 | Cross Entropy + Dice | 2336x3504 | 256x256 | 170x170 | 40000 | 2.607 | - | 89.56 | 80.71 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_deeplabv3_4xb4-ce-1.0-dice-3.0-40k_hrf-256x256.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf_20211210_202032-59daf7a4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf_20211210_202032.log.json) | +| Method | Backbone | Loss | Image Size | Crop Size | Stride | Lr schd | Mem (GB) | Inf time (fps) | Device | mDice | Dice | config | download | +| ---------------- | ----------- | -------------------- | ---------- | --------- | ------: | ------- | -------- | -------------: | ------ | ----: | ----: | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| UNet + FCN | UNet-S5-D16 | Cross Entropy | 2336x3504 | 256x256 | 170x170 | 40000 | 2.525 | - | V100 | 88.92 | 79.45 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_fcn_4xb4-40k_hrf-256x256.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_256x256_40k_hrf/fcn_unet_s5-d16_256x256_40k_hrf_20201223_173724-d89cf1ed.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/unet_s5-d16_256x256_40k_hrf/unet_s5-d16_256x256_40k_hrf-20201223_173724.log.json) | +| UNet + FCN | UNet-S5-D16 | Cross Entropy + Dice | 2336x3504 | 256x256 | 170x170 | 40000 | 2.623 | - | V100 | 89.64 | 80.87 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_fcn_4xb4-ce-1.0-dice-3.0-40k_hrf-256x256.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf/fcn_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf_20211210_201821-c314da8a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf/fcn_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf_20211210_201821.log.json) | +| UNet + PSPNet | UNet-S5-D16 | Cross Entropy | 2336x3504 | 256x256 | 170x170 | 40000 | 2.588 | - | V100 | 89.24 | 80.07 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_pspnet_4xb4-40k_hrf-256x256.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_256x256_40k_hrf/pspnet_unet_s5-d16_256x256_40k_hrf_20201227_181818-fdb7e29b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_256x256_40k_hrf/pspnet_unet_s5-d16_256x256_40k_hrf-20201227_181818.log.json) | +| UNet + PSPNet | UNet-S5-D16 | Cross Entropy + Dice | 2336x3504 | 256x256 | 170x170 | 40000 | 2.798 | - | V100 | 89.69 | 80.96 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_pspnet_4xb4-ce-1.0-dice-3.0-40k_hrf-256x256.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf/pspnet_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf_20211210_201823-53d492fa.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf/pspnet_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf_20211210_201823.log.json) | +| UNet + DeepLabV3 | UNet-S5-D16 | Cross Entropy | 2336x3504 | 256x256 | 170x170 | 40000 | 2.604 | - | V100 | 89.32 | 80.21 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_deeplabv3_4xb4-40k_hrf-256x256.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_256x256_40k_hrf/deeplabv3_unet_s5-d16_256x256_40k_hrf_20201226_094047-3a1fdf85.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_256x256_40k_hrf/deeplabv3_unet_s5-d16_256x256_40k_hrf-20201226_094047.log.json) | +| UNet + DeepLabV3 | UNet-S5-D16 | Cross Entropy + Dice | 2336x3504 | 256x256 | 170x170 | 40000 | 2.607 | - | V100 | 89.56 | 80.71 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_deeplabv3_4xb4-ce-1.0-dice-3.0-40k_hrf-256x256.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf_20211210_202032-59daf7a4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf_20211210_202032.log.json) | Note: - In `DRIVE`, `STARE`, `CHASE_DB1`, and `HRF` dataset, `mDice` is mean dice of background and vessel, while `Dice` is dice metric of vessel(foreground) only. + +## Citation + +```bibtex +@inproceedings{ronneberger2015u, + title={U-net: Convolutional networks for biomedical image segmentation}, + author={Ronneberger, Olaf and Fischer, Philipp and Brox, Thomas}, + booktitle={International Conference on Medical image computing and computer-assisted intervention}, + pages={234--241}, + year={2015}, + organization={Springer} +} +``` diff --git a/configs/unet/metafile.yaml b/configs/unet/metafile.yaml new file mode 100644 index 0000000000..1eafbc6d08 --- /dev/null +++ b/configs/unet/metafile.yaml @@ -0,0 +1,642 @@ +Collections: +- Name: UNet + License: Apache License 2.0 + Metadata: + Training Data: + - Cityscapes + - DRIVE + - STARE + - CHASE_DB1 + - HRF + Paper: + Title: 'U-Net: Convolutional Networks for Biomedical Image Segmentation' + URL: https://arxiv.org/abs/1505.04597 + README: configs/unet/README.md + Frameworks: + - PyTorch +Models: +- Name: unet-s5-d16_fcn_4xb4-160k_cityscapes-512x1024 + In Collection: UNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 69.1 + mIoU(ms+flip): 71.05 + Config: configs/unet/unet-s5-d16_fcn_4xb4-160k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 16 + Architecture: + - UNet-S5-D16 + - UNet + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 17.91 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_4x4_512x1024_160k_cityscapes/fcn_unet_s5-d16_4x4_512x1024_160k_cityscapes_20211210_145204-6860854e.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_4x4_512x1024_160k_cityscapes/fcn_unet_s5-d16_4x4_512x1024_160k_cityscapes_20211210_145204.log.json + Paper: + Title: 'U-Net: Convolutional Networks for Biomedical Image Segmentation' + URL: https://arxiv.org/abs/1505.04597 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/unet.py#L225 + Framework: PyTorch +- Name: unet-s5-d16_fcn_4xb4-40k_drive-64x64 + In Collection: UNet + Results: + Task: Semantic Segmentation + Dataset: DRIVE + Metrics: + mDice: 88.38 + Dice: 78.67 + Config: configs/unet/unet-s5-d16_fcn_4xb4-40k_drive-64x64.py + Metadata: + Training Data: DRIVE + Batch Size: 16 + Architecture: + - UNet-S5-D16 + - UNet + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 0.68 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_64x64_40k_drive/fcn_unet_s5-d16_64x64_40k_drive_20201223_191051-5daf6d3b.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/unet/unet_s5-d16_64x64_40k_drive/unet_s5-d16_64x64_40k_drive-20201223_191051.log.json + Paper: + Title: 'U-Net: Convolutional Networks for Biomedical Image Segmentation' + URL: https://arxiv.org/abs/1505.04597 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/unet.py#L225 + Framework: PyTorch +- Name: unet-s5-d16_fcn_4xb4-ce-1.0-dice-3.0-40k_drive-64x64 + In Collection: UNet + Results: + Task: Semantic Segmentation + Dataset: DRIVE + Metrics: + mDice: 88.71 + Dice: 79.32 + Config: configs/unet/unet-s5-d16_fcn_4xb4-ce-1.0-dice-3.0-40k_drive-64x64.py + Metadata: + Training Data: DRIVE + Batch Size: 16 + Architecture: + - UNet-S5-D16 + - UNet + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 0.582 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive/fcn_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive_20211210_201820-785de5c2.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive/fcn_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive_20211210_201820.log.json + Paper: + Title: 'U-Net: Convolutional Networks for Biomedical Image Segmentation' + URL: https://arxiv.org/abs/1505.04597 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/unet.py#L225 + Framework: PyTorch +- Name: unet-s5-d16_pspnet_4xb4-40k_drive-64x64 + In Collection: UNet + Results: + Task: Semantic Segmentation + Dataset: DRIVE + Metrics: + mDice: 88.35 + Dice: 78.62 + Config: configs/unet/unet-s5-d16_pspnet_4xb4-40k_drive-64x64.py + Metadata: + Training Data: DRIVE + Batch Size: 16 + Architecture: + - UNet-S5-D16 + - UNet + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 0.599 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_64x64_40k_drive/pspnet_unet_s5-d16_64x64_40k_drive_20201227_181818-aac73387.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_64x64_40k_drive/pspnet_unet_s5-d16_64x64_40k_drive-20201227_181818.log.json + Paper: + Title: 'U-Net: Convolutional Networks for Biomedical Image Segmentation' + URL: https://arxiv.org/abs/1505.04597 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/unet.py#L225 + Framework: PyTorch +- Name: unet-s5-d16_pspnet_4xb4-ce-1.0-dice-3.0-40k_drive-64x64 + In Collection: UNet + Results: + Task: Semantic Segmentation + Dataset: DRIVE + Metrics: + mDice: 88.76 + Dice: 79.42 + Config: configs/unet/unet-s5-d16_pspnet_4xb4-ce-1.0-dice-3.0-40k_drive-64x64.py + Metadata: + Training Data: DRIVE + Batch Size: 16 + Architecture: + - UNet-S5-D16 + - UNet + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 0.585 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive/pspnet_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive_20211210_201821-22b3e3ba.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive/pspnet_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive_20211210_201821.log.json + Paper: + Title: 'U-Net: Convolutional Networks for Biomedical Image Segmentation' + URL: https://arxiv.org/abs/1505.04597 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/unet.py#L225 + Framework: PyTorch +- Name: unet-s5-d16_deeplabv3_4xb4-40k_drive-64x64 + In Collection: UNet + Results: + Task: Semantic Segmentation + Dataset: DRIVE + Metrics: + mDice: 88.38 + Dice: 78.69 + Config: configs/unet/unet-s5-d16_deeplabv3_4xb4-40k_drive-64x64.py + Metadata: + Training Data: DRIVE + Batch Size: 16 + Architecture: + - UNet-S5-D16 + - UNet + - DeepLabV3 + Training Resources: 4x V100 GPUS + Memory (GB): 0.596 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_64x64_40k_drive/deeplabv3_unet_s5-d16_64x64_40k_drive_20201226_094047-0671ff20.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_64x64_40k_drive/deeplabv3_unet_s5-d16_64x64_40k_drive-20201226_094047.log.json + Paper: + Title: 'U-Net: Convolutional Networks for Biomedical Image Segmentation' + URL: https://arxiv.org/abs/1505.04597 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/unet.py#L225 + Framework: PyTorch +- Name: unet-s5-d16_deeplabv3_4xb4-ce-1.0-dice-3.0-40k_drive-64x64 + In Collection: UNet + Results: + Task: Semantic Segmentation + Dataset: DRIVE + Metrics: + mDice: 88.84 + Dice: 79.56 + Config: configs/unet/unet-s5-d16_deeplabv3_4xb4-ce-1.0-dice-3.0-40k_drive-64x64.py + Metadata: + Training Data: DRIVE + Batch Size: 16 + Architecture: + - UNet-S5-D16 + - UNet + - DeepLabV3 + Training Resources: 4x V100 GPUS + Memory (GB): 0.582 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive_20211210_201825-6bf0efd7.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive_20211210_201825.log.json + Paper: + Title: 'U-Net: Convolutional Networks for Biomedical Image Segmentation' + URL: https://arxiv.org/abs/1505.04597 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/unet.py#L225 + Framework: PyTorch +- Name: unet-s5-d16_fcn_4xb4-40k_stare-128x128 + In Collection: UNet + Results: + Task: Semantic Segmentation + Dataset: STARE + Metrics: + mDice: 89.78 + Dice: 81.02 + Config: configs/unet/unet-s5-d16_fcn_4xb4-40k_stare-128x128.py + Metadata: + Training Data: STARE + Batch Size: 16 + Architecture: + - UNet-S5-D16 + - UNet + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 0.968 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_128x128_40k_stare/fcn_unet_s5-d16_128x128_40k_stare_20201223_191051-7d77e78b.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/unet/unet_s5-d16_128x128_40k_stare/unet_s5-d16_128x128_40k_stare-20201223_191051.log.json + Paper: + Title: 'U-Net: Convolutional Networks for Biomedical Image Segmentation' + URL: https://arxiv.org/abs/1505.04597 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/unet.py#L225 + Framework: PyTorch +- Name: unet-s5-d16_fcn_4xb4-ce-1.0-dice-3.0-40k_stare-128x128 + In Collection: UNet + Results: + Task: Semantic Segmentation + Dataset: STARE + Metrics: + mDice: 90.65 + Dice: 82.7 + Config: configs/unet/unet-s5-d16_fcn_4xb4-ce-1.0-dice-3.0-40k_stare-128x128.py + Metadata: + Training Data: STARE + Batch Size: 16 + Architecture: + - UNet-S5-D16 + - UNet + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 0.986 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare_20211210_201821-f75705a9.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare_20211210_201821.log.json + Paper: + Title: 'U-Net: Convolutional Networks for Biomedical Image Segmentation' + URL: https://arxiv.org/abs/1505.04597 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/unet.py#L225 + Framework: PyTorch +- Name: unet-s5-d16_pspnet_4xb4-40k_stare-128x128 + In Collection: UNet + Results: + Task: Semantic Segmentation + Dataset: STARE + Metrics: + mDice: 89.89 + Dice: 81.22 + Config: configs/unet/unet-s5-d16_pspnet_4xb4-40k_stare-128x128.py + Metadata: + Training Data: STARE + Batch Size: 16 + Architecture: + - UNet-S5-D16 + - UNet + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 0.982 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_128x128_40k_stare/pspnet_unet_s5-d16_128x128_40k_stare_20201227_181818-3c2923c4.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_128x128_40k_stare/pspnet_unet_s5-d16_128x128_40k_stare-20201227_181818.log.json + Paper: + Title: 'U-Net: Convolutional Networks for Biomedical Image Segmentation' + URL: https://arxiv.org/abs/1505.04597 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/unet.py#L225 + Framework: PyTorch +- Name: unet-s5-d16_pspnet_4xb4-ce-1.0-dice-3.0-40k_stare-128x128 + In Collection: UNet + Results: + Task: Semantic Segmentation + Dataset: STARE + Metrics: + mDice: 90.72 + Dice: 82.84 + Config: configs/unet/unet-s5-d16_pspnet_4xb4-ce-1.0-dice-3.0-40k_stare-128x128.py + Metadata: + Training Data: STARE + Batch Size: 16 + Architecture: + - UNet-S5-D16 + - UNet + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 1.028 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare_20211210_201823-f1063ef7.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare_20211210_201823.log.json + Paper: + Title: 'U-Net: Convolutional Networks for Biomedical Image Segmentation' + URL: https://arxiv.org/abs/1505.04597 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/unet.py#L225 + Framework: PyTorch +- Name: unet-s5-d16_deeplabv3_4xb4-40k_stare-128x128 + In Collection: UNet + Results: + Task: Semantic Segmentation + Dataset: STARE + Metrics: + mDice: 89.73 + Dice: 80.93 + Config: configs/unet/unet-s5-d16_deeplabv3_4xb4-40k_stare-128x128.py + Metadata: + Training Data: STARE + Batch Size: 16 + Architecture: + - UNet-S5-D16 + - UNet + - DeepLabV3 + Training Resources: 4x V100 GPUS + Memory (GB): 0.999 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_128x128_40k_stare/deeplabv3_unet_s5-d16_128x128_40k_stare_20201226_094047-93dcb93c.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_128x128_40k_stare/deeplabv3_unet_s5-d16_128x128_40k_stare-20201226_094047.log.json + Paper: + Title: 'U-Net: Convolutional Networks for Biomedical Image Segmentation' + URL: https://arxiv.org/abs/1505.04597 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/unet.py#L225 + Framework: PyTorch +- Name: unet-s5-d16_deeplabv3_4xb4-ce-1.0-dice-3.0-40k_stare-128x128 + In Collection: UNet + Results: + Task: Semantic Segmentation + Dataset: STARE + Metrics: + mDice: 90.65 + Dice: 82.71 + Config: configs/unet/unet-s5-d16_deeplabv3_4xb4-ce-1.0-dice-3.0-40k_stare-128x128.py + Metadata: + Training Data: STARE + Batch Size: 16 + Architecture: + - UNet-S5-D16 + - UNet + - DeepLabV3 + Training Resources: 4x V100 GPUS + Memory (GB): 1.01 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare_20211210_201825-21db614c.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare_20211210_201825.log.json + Paper: + Title: 'U-Net: Convolutional Networks for Biomedical Image Segmentation' + URL: https://arxiv.org/abs/1505.04597 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/unet.py#L225 + Framework: PyTorch +- Name: unet-s5-d16_fcn_4xb4-40k_chase-db1-128x128 + In Collection: UNet + Results: + Task: Semantic Segmentation + Dataset: CHASE_DB1 + Metrics: + mDice: 89.46 + Dice: 80.24 + Config: configs/unet/unet-s5-d16_fcn_4xb4-40k_chase-db1-128x128.py + Metadata: + Training Data: CHASE_DB1 + Batch Size: 16 + Architecture: + - UNet-S5-D16 + - UNet + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 0.968 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_128x128_40k_chase_db1/fcn_unet_s5-d16_128x128_40k_chase_db1_20201223_191051-11543527.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/unet/unet_s5-d16_128x128_40k_chase_db1/unet_s5-d16_128x128_40k_chase_db1-20201223_191051.log.json + Paper: + Title: 'U-Net: Convolutional Networks for Biomedical Image Segmentation' + URL: https://arxiv.org/abs/1505.04597 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/unet.py#L225 + Framework: PyTorch +- Name: unet-s5-d16_fcn_4xb4-ce-1.0-dice-3.0-40k_chase-db1-128x128 + In Collection: UNet + Results: + Task: Semantic Segmentation + Dataset: CHASE_DB1 + Metrics: + mDice: 89.52 + Dice: 80.4 + Config: configs/unet/unet-s5-d16_fcn_4xb4-ce-1.0-dice-3.0-40k_chase-db1-128x128.py + Metadata: + Training Data: CHASE_DB1 + Batch Size: 16 + Architecture: + - UNet-S5-D16 + - UNet + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 0.986 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1_20211210_201821-1c4eb7cf.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1_20211210_201821.log.json + Paper: + Title: 'U-Net: Convolutional Networks for Biomedical Image Segmentation' + URL: https://arxiv.org/abs/1505.04597 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/unet.py#L225 + Framework: PyTorch +- Name: unet-s5-d16_pspnet_4xb4-40k_chase-db1-128x128 + In Collection: UNet + Results: + Task: Semantic Segmentation + Dataset: CHASE_DB1 + Metrics: + mDice: 89.52 + Dice: 80.36 + Config: configs/unet/unet-s5-d16_pspnet_4xb4-40k_chase-db1-128x128.py + Metadata: + Training Data: CHASE_DB1 + Batch Size: 16 + Architecture: + - UNet-S5-D16 + - UNet + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 0.982 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_128x128_40k_chase_db1/pspnet_unet_s5-d16_128x128_40k_chase_db1_20201227_181818-68d4e609.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_128x128_40k_chase_db1/pspnet_unet_s5-d16_128x128_40k_chase_db1-20201227_181818.log.json + Paper: + Title: 'U-Net: Convolutional Networks for Biomedical Image Segmentation' + URL: https://arxiv.org/abs/1505.04597 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/unet.py#L225 + Framework: PyTorch +- Name: unet-s5-d16_pspnet_4xb4-ce-1.0-dice-3.0-40k_chase-db1-128x128 + In Collection: UNet + Results: + Task: Semantic Segmentation + Dataset: CHASE_DB1 + Metrics: + mDice: 89.45 + Dice: 80.28 + Config: configs/unet/unet-s5-d16_pspnet_4xb4-ce-1.0-dice-3.0-40k_chase-db1-128x128.py + Metadata: + Training Data: CHASE_DB1 + Batch Size: 16 + Architecture: + - UNet-S5-D16 + - UNet + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 1.028 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1_20211210_201823-c0802c4d.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1_20211210_201823.log.json + Paper: + Title: 'U-Net: Convolutional Networks for Biomedical Image Segmentation' + URL: https://arxiv.org/abs/1505.04597 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/unet.py#L225 + Framework: PyTorch +- Name: unet_s5-d16_deeplabv3_4xb4-40k_chase-db1-128x128 + In Collection: UNet + Results: + Task: Semantic Segmentation + Dataset: CHASE_DB1 + Metrics: + mDice: 89.57 + Dice: 80.47 + Config: configs/unet/unet_s5-d16_deeplabv3_4xb4-40k_chase-db1-128x128.py + Metadata: + Training Data: CHASE_DB1 + Batch Size: 16 + Architecture: + - UNet-S5-D16 + - UNet + - DeepLabV3 + Training Resources: 4x V100 GPUS + Memory (GB): 0.999 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_128x128_40k_chase_db1/deeplabv3_unet_s5-d16_128x128_40k_chase_db1_20201226_094047-4c5aefa3.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_128x128_40k_chase_db1/deeplabv3_unet_s5-d16_128x128_40k_chase_db1-20201226_094047.log.json + Paper: + Title: 'U-Net: Convolutional Networks for Biomedical Image Segmentation' + URL: https://arxiv.org/abs/1505.04597 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/unet.py#L225 + Framework: PyTorch +- Name: unet-s5-d16_deeplabv3_4xb4-ce-1.0-dice-3.0-40k_chase-db1-128x128 + In Collection: UNet + Results: + Task: Semantic Segmentation + Dataset: CHASE_DB1 + Metrics: + mDice: 89.49 + Dice: 80.37 + Config: configs/unet/unet-s5-d16_deeplabv3_4xb4-ce-1.0-dice-3.0-40k_chase-db1-128x128.py + Metadata: + Training Data: CHASE_DB1 + Batch Size: 16 + Architecture: + - UNet-S5-D16 + - UNet + - DeepLabV3 + Training Resources: 4x V100 GPUS + Memory (GB): 1.01 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1_20211210_201825-4ef29df5.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1_20211210_201825.log.json + Paper: + Title: 'U-Net: Convolutional Networks for Biomedical Image Segmentation' + URL: https://arxiv.org/abs/1505.04597 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/unet.py#L225 + Framework: PyTorch +- Name: unet-s5-d16_fcn_4xb4-40k_hrf-256x256 + In Collection: UNet + Results: + Task: Semantic Segmentation + Dataset: HRF + Metrics: + mDice: 88.92 + Dice: 79.45 + Config: configs/unet/unet-s5-d16_fcn_4xb4-40k_hrf-256x256.py + Metadata: + Training Data: HRF + Batch Size: 16 + Architecture: + - UNet-S5-D16 + - UNet + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 2.525 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_256x256_40k_hrf/fcn_unet_s5-d16_256x256_40k_hrf_20201223_173724-d89cf1ed.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/unet/unet_s5-d16_256x256_40k_hrf/unet_s5-d16_256x256_40k_hrf-20201223_173724.log.json + Paper: + Title: 'U-Net: Convolutional Networks for Biomedical Image Segmentation' + URL: https://arxiv.org/abs/1505.04597 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/unet.py#L225 + Framework: PyTorch +- Name: unet-s5-d16_fcn_4xb4-ce-1.0-dice-3.0-40k_hrf-256x256 + In Collection: UNet + Results: + Task: Semantic Segmentation + Dataset: HRF + Metrics: + mDice: 89.64 + Dice: 80.87 + Config: configs/unet/unet-s5-d16_fcn_4xb4-ce-1.0-dice-3.0-40k_hrf-256x256.py + Metadata: + Training Data: HRF + Batch Size: 16 + Architecture: + - UNet-S5-D16 + - UNet + - FCN + Training Resources: 4x V100 GPUS + Memory (GB): 2.623 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf/fcn_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf_20211210_201821-c314da8a.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf/fcn_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf_20211210_201821.log.json + Paper: + Title: 'U-Net: Convolutional Networks for Biomedical Image Segmentation' + URL: https://arxiv.org/abs/1505.04597 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/unet.py#L225 + Framework: PyTorch +- Name: unet-s5-d16_pspnet_4xb4-40k_hrf-256x256 + In Collection: UNet + Results: + Task: Semantic Segmentation + Dataset: HRF + Metrics: + mDice: 89.24 + Dice: 80.07 + Config: configs/unet/unet-s5-d16_pspnet_4xb4-40k_hrf-256x256.py + Metadata: + Training Data: HRF + Batch Size: 16 + Architecture: + - UNet-S5-D16 + - UNet + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 2.588 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_256x256_40k_hrf/pspnet_unet_s5-d16_256x256_40k_hrf_20201227_181818-fdb7e29b.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_256x256_40k_hrf/pspnet_unet_s5-d16_256x256_40k_hrf-20201227_181818.log.json + Paper: + Title: 'U-Net: Convolutional Networks for Biomedical Image Segmentation' + URL: https://arxiv.org/abs/1505.04597 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/unet.py#L225 + Framework: PyTorch +- Name: unet-s5-d16_pspnet_4xb4-ce-1.0-dice-3.0-40k_hrf-256x256 + In Collection: UNet + Results: + Task: Semantic Segmentation + Dataset: HRF + Metrics: + mDice: 89.69 + Dice: 80.96 + Config: configs/unet/unet-s5-d16_pspnet_4xb4-ce-1.0-dice-3.0-40k_hrf-256x256.py + Metadata: + Training Data: HRF + Batch Size: 16 + Architecture: + - UNet-S5-D16 + - UNet + - PSPNet + Training Resources: 4x V100 GPUS + Memory (GB): 2.798 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf/pspnet_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf_20211210_201823-53d492fa.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf/pspnet_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf_20211210_201823.log.json + Paper: + Title: 'U-Net: Convolutional Networks for Biomedical Image Segmentation' + URL: https://arxiv.org/abs/1505.04597 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/unet.py#L225 + Framework: PyTorch +- Name: unet-s5-d16_deeplabv3_4xb4-40k_hrf-256x256 + In Collection: UNet + Results: + Task: Semantic Segmentation + Dataset: HRF + Metrics: + mDice: 89.32 + Dice: 80.21 + Config: configs/unet/unet-s5-d16_deeplabv3_4xb4-40k_hrf-256x256.py + Metadata: + Training Data: HRF + Batch Size: 16 + Architecture: + - UNet-S5-D16 + - UNet + - DeepLabV3 + Training Resources: 4x V100 GPUS + Memory (GB): 2.604 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_256x256_40k_hrf/deeplabv3_unet_s5-d16_256x256_40k_hrf_20201226_094047-3a1fdf85.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_256x256_40k_hrf/deeplabv3_unet_s5-d16_256x256_40k_hrf-20201226_094047.log.json + Paper: + Title: 'U-Net: Convolutional Networks for Biomedical Image Segmentation' + URL: https://arxiv.org/abs/1505.04597 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/unet.py#L225 + Framework: PyTorch +- Name: unet-s5-d16_deeplabv3_4xb4-ce-1.0-dice-3.0-40k_hrf-256x256 + In Collection: UNet + Results: + Task: Semantic Segmentation + Dataset: HRF + Metrics: + mDice: 89.56 + Dice: 80.71 + Config: configs/unet/unet-s5-d16_deeplabv3_4xb4-ce-1.0-dice-3.0-40k_hrf-256x256.py + Metadata: + Training Data: HRF + Batch Size: 16 + Architecture: + - UNet-S5-D16 + - UNet + - DeepLabV3 + Training Resources: 4x V100 GPUS + Memory (GB): 2.607 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf_20211210_202032-59daf7a4.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf_20211210_202032.log.json + Paper: + Title: 'U-Net: Convolutional Networks for Biomedical Image Segmentation' + URL: https://arxiv.org/abs/1505.04597 + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/unet.py#L225 + Framework: PyTorch diff --git a/configs/unet/unet.yml b/configs/unet/unet.yml deleted file mode 100644 index 4a01ce33e2..0000000000 --- a/configs/unet/unet.yml +++ /dev/null @@ -1,377 +0,0 @@ -Collections: -- Name: UNet - Metadata: - Training Data: - - Cityscapes - - DRIVE - - STARE - - CHASE_DB1 - - HRF - Paper: - URL: https://arxiv.org/abs/1505.04597 - Title: 'U-Net: Convolutional Networks for Biomedical Image Segmentation' - README: configs/unet/README.md - Code: - URL: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/unet.py#L225 - Version: v0.17.0 - Converted From: - Code: http://lmb.informatik.uni-freiburg.de/people/ronneber/u-net -Models: -- Name: unet-s5-d16_fcn_4xb4-160k_cityscapes-512x1024 - In Collection: UNet - Metadata: - backbone: UNet-S5-D16 - crop size: (512,1024) - lr schd: 160000 - inference time (ms/im): - - value: 327.87 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 17.91 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 69.1 - mIoU(ms+flip): 71.05 - Config: configs/unet/unet-s5-d16_fcn_4xb4-160k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_4x4_512x1024_160k_cityscapes/fcn_unet_s5-d16_4x4_512x1024_160k_cityscapes_20211210_145204-6860854e.pth -- Name: unet-s5-d16_fcn_4xb4-40k_drive-64x64 - In Collection: UNet - Metadata: - backbone: UNet-S5-D16 - crop size: (64,64) - lr schd: 40000 - Training Memory (GB): 0.68 - Results: - - Task: Semantic Segmentation - Dataset: DRIVE - Metrics: - Dice: 78.67 - Config: configs/unet/unet-s5-d16_fcn_4xb4-40k_drive-64x64.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_64x64_40k_drive/fcn_unet_s5-d16_64x64_40k_drive_20201223_191051-5daf6d3b.pth -- Name: unet-s5-d16_fcn_4xb4-ce-1.0-dice-3.0-40k_drive-64x64 - In Collection: UNet - Metadata: - backbone: UNet-S5-D16 - crop size: (64,64) - lr schd: 40000 - Training Memory (GB): 0.582 - Results: - - Task: Semantic Segmentation - Dataset: DRIVE - Metrics: - Dice: 79.32 - Config: configs/unet/unet-s5-d16_fcn_4xb4-ce-1.0-dice-3.0-40k_drive-64x64.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive/fcn_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive_20211210_201820-785de5c2.pth -- Name: unet-s5-d16_pspnet_4xb4-40k_drive-64x64 - In Collection: UNet - Metadata: - backbone: UNet-S5-D16 - crop size: (64,64) - lr schd: 40000 - Training Memory (GB): 0.599 - Results: - - Task: Semantic Segmentation - Dataset: DRIVE - Metrics: - Dice: 78.62 - Config: configs/unet/unet-s5-d16_pspnet_4xb4-40k_drive-64x64.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_64x64_40k_drive/pspnet_unet_s5-d16_64x64_40k_drive_20201227_181818-aac73387.pth -- Name: unet-s5-d16_pspnet_4xb4-ce-1.0-dice-3.0-40k_drive-64x64 - In Collection: UNet - Metadata: - backbone: UNet-S5-D16 - crop size: (64,64) - lr schd: 40000 - Training Memory (GB): 0.585 - Results: - - Task: Semantic Segmentation - Dataset: DRIVE - Metrics: - Dice: 79.42 - Config: configs/unet/unet-s5-d16_pspnet_4xb4-ce-1.0-dice-3.0-40k_drive-64x64.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive/pspnet_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive_20211210_201821-22b3e3ba.pth -- Name: unet-s5-d16_deeplabv3_4xb4-40k_drive-64x64 - In Collection: UNet - Metadata: - backbone: UNet-S5-D16 - crop size: (64,64) - lr schd: 40000 - Training Memory (GB): 0.596 - Results: - - Task: Semantic Segmentation - Dataset: DRIVE - Metrics: - Dice: 78.69 - Config: configs/unet/unet-s5-d16_deeplabv3_4xb4-40k_drive-64x64.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_64x64_40k_drive/deeplabv3_unet_s5-d16_64x64_40k_drive_20201226_094047-0671ff20.pth -- Name: unet-s5-d16_deeplabv3_4xb4-ce-1.0-dice-3.0-40k_drive-64x64 - In Collection: UNet - Metadata: - backbone: UNet-S5-D16 - crop size: (64,64) - lr schd: 40000 - Training Memory (GB): 0.582 - Results: - - Task: Semantic Segmentation - Dataset: DRIVE - Metrics: - Dice: 79.56 - Config: configs/unet/unet-s5-d16_deeplabv3_4xb4-ce-1.0-dice-3.0-40k_drive-64x64.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive_20211210_201825-6bf0efd7.pth -- Name: unet-s5-d16_fcn_4xb4-40k_stare-128x128 - In Collection: UNet - Metadata: - backbone: UNet-S5-D16 - crop size: (128,128) - lr schd: 40000 - Training Memory (GB): 0.968 - Results: - - Task: Semantic Segmentation - Dataset: STARE - Metrics: - Dice: 81.02 - Config: configs/unet/unet-s5-d16_fcn_4xb4-40k_stare-128x128.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_128x128_40k_stare/fcn_unet_s5-d16_128x128_40k_stare_20201223_191051-7d77e78b.pth -- Name: unet-s5-d16_fcn_4xb4-ce-1.0-dice-3.0-40k_stare-128x128 - In Collection: UNet - Metadata: - backbone: UNet-S5-D16 - crop size: (128,128) - lr schd: 40000 - Training Memory (GB): 0.986 - Results: - - Task: Semantic Segmentation - Dataset: STARE - Metrics: - Dice: 82.7 - Config: configs/unet/unet-s5-d16_fcn_4xb4-ce-1.0-dice-3.0-40k_stare-128x128.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare_20211210_201821-f75705a9.pth -- Name: unet-s5-d16_pspnet_4xb4-40k_stare-128x128 - In Collection: UNet - Metadata: - backbone: UNet-S5-D16 - crop size: (128,128) - lr schd: 40000 - Training Memory (GB): 0.982 - Results: - - Task: Semantic Segmentation - Dataset: STARE - Metrics: - Dice: 81.22 - Config: configs/unet/unet-s5-d16_pspnet_4xb4-40k_stare-128x128.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_128x128_40k_stare/pspnet_unet_s5-d16_128x128_40k_stare_20201227_181818-3c2923c4.pth -- Name: unet-s5-d16_pspnet_4xb4-ce-1.0-dice-3.0-40k_stare-128x128 - In Collection: UNet - Metadata: - backbone: UNet-S5-D16 - crop size: (128,128) - lr schd: 40000 - Training Memory (GB): 1.028 - Results: - - Task: Semantic Segmentation - Dataset: STARE - Metrics: - Dice: 82.84 - Config: configs/unet/unet-s5-d16_pspnet_4xb4-ce-1.0-dice-3.0-40k_stare-128x128.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare_20211210_201823-f1063ef7.pth -- Name: unet-s5-d16_deeplabv3_4xb4-40k_stare-128x128 - In Collection: UNet - Metadata: - backbone: UNet-S5-D16 - crop size: (128,128) - lr schd: 40000 - Training Memory (GB): 0.999 - Results: - - Task: Semantic Segmentation - Dataset: STARE - Metrics: - Dice: 80.93 - Config: configs/unet/unet-s5-d16_deeplabv3_4xb4-40k_stare-128x128.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_128x128_40k_stare/deeplabv3_unet_s5-d16_128x128_40k_stare_20201226_094047-93dcb93c.pth -- Name: unet-s5-d16_deeplabv3_4xb4-ce-1.0-dice-3.0-40k_stare-128x128 - In Collection: UNet - Metadata: - backbone: UNet-S5-D16 - crop size: (128,128) - lr schd: 40000 - Training Memory (GB): 1.01 - Results: - - Task: Semantic Segmentation - Dataset: STARE - Metrics: - Dice: 82.71 - Config: configs/unet/unet-s5-d16_deeplabv3_4xb4-ce-1.0-dice-3.0-40k_stare-128x128.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare_20211210_201825-21db614c.pth -- Name: unet-s5-d16_fcn_4xb4-40k_chase-db1-128x128 - In Collection: UNet - Metadata: - backbone: UNet-S5-D16 - crop size: (128,128) - lr schd: 40000 - Training Memory (GB): 0.968 - Results: - - Task: Semantic Segmentation - Dataset: CHASE_DB1 - Metrics: - Dice: 80.24 - Config: configs/unet/unet-s5-d16_fcn_4xb4-40k_chase-db1-128x128.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_128x128_40k_chase_db1/fcn_unet_s5-d16_128x128_40k_chase_db1_20201223_191051-11543527.pth -- Name: unet-s5-d16_fcn_4xb4-ce-1.0-dice-3.0-40k_chase-db1-128x128 - In Collection: UNet - Metadata: - backbone: UNet-S5-D16 - crop size: (128,128) - lr schd: 40000 - Training Memory (GB): 0.986 - Results: - - Task: Semantic Segmentation - Dataset: CHASE_DB1 - Metrics: - Dice: 80.4 - Config: configs/unet/unet-s5-d16_fcn_4xb4-ce-1.0-dice-3.0-40k_chase-db1-128x128.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1_20211210_201821-1c4eb7cf.pth -- Name: unet-s5-d16_pspnet_4xb4-40k_chase-db1-128x128 - In Collection: UNet - Metadata: - backbone: UNet-S5-D16 - crop size: (128,128) - lr schd: 40000 - Training Memory (GB): 0.982 - Results: - - Task: Semantic Segmentation - Dataset: CHASE_DB1 - Metrics: - Dice: 80.36 - Config: configs/unet/unet-s5-d16_pspnet_4xb4-40k_chase-db1-128x128.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_128x128_40k_chase_db1/pspnet_unet_s5-d16_128x128_40k_chase_db1_20201227_181818-68d4e609.pth -- Name: unet-s5-d16_pspnet_4xb4-ce-1.0-dice-3.0-40k_chase-db1-128x128 - In Collection: UNet - Metadata: - backbone: UNet-S5-D16 - crop size: (128,128) - lr schd: 40000 - Training Memory (GB): 1.028 - Results: - - Task: Semantic Segmentation - Dataset: CHASE_DB1 - Metrics: - Dice: 80.28 - Config: configs/unet/unet-s5-d16_pspnet_4xb4-ce-1.0-dice-3.0-40k_chase-db1-128x128.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1_20211210_201823-c0802c4d.pth -- Name: unet_s5-d16_deeplabv3_4xb4-40k_chase-db1-128x128 - In Collection: UNet - Metadata: - backbone: UNet-S5-D16 - crop size: (128,128) - lr schd: 40000 - Training Memory (GB): 0.999 - Results: - - Task: Semantic Segmentation - Dataset: CHASE_DB1 - Metrics: - Dice: 80.47 - Config: configs/unet/unet_s5-d16_deeplabv3_4xb4-40k_chase-db1-128x128.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_128x128_40k_chase_db1/deeplabv3_unet_s5-d16_128x128_40k_chase_db1_20201226_094047-4c5aefa3.pth -- Name: unet-s5-d16_deeplabv3_4xb4-ce-1.0-dice-3.0-40k_chase-db1-128x128 - In Collection: UNet - Metadata: - backbone: UNet-S5-D16 - crop size: (128,128) - lr schd: 40000 - Training Memory (GB): 1.01 - Results: - - Task: Semantic Segmentation - Dataset: CHASE_DB1 - Metrics: - Dice: 80.37 - Config: configs/unet/unet-s5-d16_deeplabv3_4xb4-ce-1.0-dice-3.0-40k_chase-db1-128x128.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1_20211210_201825-4ef29df5.pth -- Name: unet-s5-d16_fcn_4xb4-40k_hrf-256x256 - In Collection: UNet - Metadata: - backbone: UNet-S5-D16 - crop size: (256,256) - lr schd: 40000 - Training Memory (GB): 2.525 - Results: - - Task: Semantic Segmentation - Dataset: HRF - Metrics: - Dice: 79.45 - Config: configs/unet/unet-s5-d16_fcn_4xb4-40k_hrf-256x256.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_256x256_40k_hrf/fcn_unet_s5-d16_256x256_40k_hrf_20201223_173724-d89cf1ed.pth -- Name: unet-s5-d16_fcn_4xb4-ce-1.0-dice-3.0-40k_hrf-256x256 - In Collection: UNet - Metadata: - backbone: UNet-S5-D16 - crop size: (256,256) - lr schd: 40000 - Training Memory (GB): 2.623 - Results: - - Task: Semantic Segmentation - Dataset: HRF - Metrics: - Dice: 80.87 - Config: configs/unet/unet-s5-d16_fcn_4xb4-ce-1.0-dice-3.0-40k_hrf-256x256.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf/fcn_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf_20211210_201821-c314da8a.pth -- Name: unet-s5-d16_pspnet_4xb4-40k_hrf-256x256 - In Collection: UNet - Metadata: - backbone: UNet-S5-D16 - crop size: (256,256) - lr schd: 40000 - Training Memory (GB): 2.588 - Results: - - Task: Semantic Segmentation - Dataset: HRF - Metrics: - Dice: 80.07 - Config: configs/unet/unet-s5-d16_pspnet_4xb4-40k_hrf-256x256.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_256x256_40k_hrf/pspnet_unet_s5-d16_256x256_40k_hrf_20201227_181818-fdb7e29b.pth -- Name: unet-s5-d16_pspnet_4xb4-ce-1.0-dice-3.0-40k_hrf-256x256 - In Collection: UNet - Metadata: - backbone: UNet-S5-D16 - crop size: (256,256) - lr schd: 40000 - Training Memory (GB): 2.798 - Results: - - Task: Semantic Segmentation - Dataset: HRF - Metrics: - Dice: 80.96 - Config: configs/unet/unet-s5-d16_pspnet_4xb4-ce-1.0-dice-3.0-40k_hrf-256x256.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf/pspnet_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf_20211210_201823-53d492fa.pth -- Name: unet-s5-d16_deeplabv3_4xb4-40k_hrf-256x256 - In Collection: UNet - Metadata: - backbone: UNet-S5-D16 - crop size: (256,256) - lr schd: 40000 - Training Memory (GB): 2.604 - Results: - - Task: Semantic Segmentation - Dataset: HRF - Metrics: - Dice: 80.21 - Config: configs/unet/unet-s5-d16_deeplabv3_4xb4-40k_hrf-256x256.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_256x256_40k_hrf/deeplabv3_unet_s5-d16_256x256_40k_hrf_20201226_094047-3a1fdf85.pth -- Name: unet-s5-d16_deeplabv3_4xb4-ce-1.0-dice-3.0-40k_hrf-256x256 - In Collection: UNet - Metadata: - backbone: UNet-S5-D16 - crop size: (256,256) - lr schd: 40000 - Training Memory (GB): 2.607 - Results: - - Task: Semantic Segmentation - Dataset: HRF - Metrics: - Dice: 80.71 - Config: configs/unet/unet-s5-d16_deeplabv3_4xb4-ce-1.0-dice-3.0-40k_hrf-256x256.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf_20211210_202032-59daf7a4.pth diff --git a/configs/upernet/README.md b/configs/upernet/README.md index e4a5ee4381..7d128090bf 100644 --- a/configs/upernet/README.md +++ b/configs/upernet/README.md @@ -1,6 +1,6 @@ # UPerNet -[Unified Perceptual Parsing for Scene Understanding](https://arxiv.org/pdf/1807.10221.pdf) +> [Unified Perceptual Parsing for Scene Understanding](https://arxiv.org/pdf/1807.10221.pdf) ## Introduction @@ -22,6 +22,39 @@ Humans recognize the visual world at multiple levels: we effortlessly categorize +## Results and models + +### Cityscapes + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| UPerNet | R-50 | 512x1024 | 40000 | 6.4 | 4.25 | V100 | 77.10 | 78.37 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r50_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x1024_40k_cityscapes/upernet_r50_512x1024_40k_cityscapes_20200605_094827-aa54cb54.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x1024_40k_cityscapes/upernet_r50_512x1024_40k_cityscapes_20200605_094827.log.json) | +| UPerNet | R-101 | 512x1024 | 40000 | 7.4 | 3.79 | V100 | 78.69 | 80.11 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r101_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x1024_40k_cityscapes/upernet_r101_512x1024_40k_cityscapes_20200605_094933-ebce3b10.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x1024_40k_cityscapes/upernet_r101_512x1024_40k_cityscapes_20200605_094933.log.json) | +| UPerNet | R-50 | 769x769 | 40000 | 7.2 | 1.76 | V100 | 77.98 | 79.70 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r50_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_769x769_40k_cityscapes/upernet_r50_769x769_40k_cityscapes_20200530_033048-92d21539.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_769x769_40k_cityscapes/upernet_r50_769x769_40k_cityscapes_20200530_033048.log.json) | +| UPerNet | R-101 | 769x769 | 40000 | 8.4 | 1.56 | V100 | 79.03 | 80.77 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r101_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_769x769_40k_cityscapes/upernet_r101_769x769_40k_cityscapes_20200530_040819-83c95d01.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_769x769_40k_cityscapes/upernet_r101_769x769_40k_cityscapes_20200530_040819.log.json) | +| UPerNet | R-50 | 512x1024 | 80000 | - | - | V100 | 78.19 | 79.19 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r50_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x1024_80k_cityscapes/upernet_r50_512x1024_80k_cityscapes_20200607_052207-848beca8.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x1024_80k_cityscapes/upernet_r50_512x1024_80k_cityscapes_20200607_052207.log.json) | +| UPerNet | R-101 | 512x1024 | 80000 | - | - | V100 | 79.40 | 80.46 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r101_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x1024_80k_cityscapes/upernet_r101_512x1024_80k_cityscapes_20200607_002403-f05f2345.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x1024_80k_cityscapes/upernet_r101_512x1024_80k_cityscapes_20200607_002403.log.json) | +| UPerNet | R-50 | 769x769 | 80000 | - | - | V100 | 79.39 | 80.92 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r50_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_769x769_80k_cityscapes/upernet_r50_769x769_80k_cityscapes_20200607_005107-82ae7d15.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_769x769_80k_cityscapes/upernet_r50_769x769_80k_cityscapes_20200607_005107.log.json) | +| UPerNet | R-101 | 769x769 | 80000 | - | - | V100 | 80.10 | 81.49 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r101_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_769x769_80k_cityscapes/upernet_r101_769x769_80k_cityscapes_20200607_001014-082fc334.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_769x769_80k_cityscapes/upernet_r101_769x769_80k_cityscapes_20200607_001014.log.json) | + +### ADE20K + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| UPerNet | R-50 | 512x512 | 80000 | 8.1 | 23.40 | V100 | 40.70 | 41.81 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r50_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_80k_ade20k/upernet_r50_512x512_80k_ade20k_20200614_144127-ecc8377b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_80k_ade20k/upernet_r50_512x512_80k_ade20k_20200614_144127.log.json) | +| UPerNet | R-101 | 512x512 | 80000 | 9.1 | 20.34 | V100 | 42.91 | 43.96 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r101_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_80k_ade20k/upernet_r101_512x512_80k_ade20k_20200614_185117-32e4db94.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_80k_ade20k/upernet_r101_512x512_80k_ade20k_20200614_185117.log.json) | +| UPerNet | R-50 | 512x512 | 160000 | - | - | V100 | 42.05 | 42.78 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r50_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_160k_ade20k/upernet_r50_512x512_160k_ade20k_20200615_184328-8534de8d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_160k_ade20k/upernet_r50_512x512_160k_ade20k_20200615_184328.log.json) | +| UPerNet | R-101 | 512x512 | 160000 | - | - | V100 | 43.82 | 44.85 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r101_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_160k_ade20k/upernet_r101_512x512_160k_ade20k_20200615_161951-91b32684.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_160k_ade20k/upernet_r101_512x512_160k_ade20k_20200615_161951.log.json) | + +### Pascal VOC 2012 + Aug + +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| UPerNet | R-50 | 512x512 | 20000 | 6.4 | 23.17 | V100 | 74.82 | 76.35 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r50_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_20k_voc12aug/upernet_r50_512x512_20k_voc12aug_20200617_165330-5b5890a7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_20k_voc12aug/upernet_r50_512x512_20k_voc12aug_20200617_165330.log.json) | +| UPerNet | R-101 | 512x512 | 20000 | 7.5 | 19.98 | V100 | 77.10 | 78.29 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r101_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_20k_voc12aug/upernet_r101_512x512_20k_voc12aug_20200617_165629-f14e7f27.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_20k_voc12aug/upernet_r101_512x512_20k_voc12aug_20200617_165629.log.json) | +| UPerNet | R-50 | 512x512 | 40000 | - | - | V100 | 75.92 | 77.44 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r50_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_40k_voc12aug/upernet_r50_512x512_40k_voc12aug_20200613_162257-ca9bcc6b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_40k_voc12aug/upernet_r50_512x512_40k_voc12aug_20200613_162257.log.json) | +| UPerNet | R-101 | 512x512 | 40000 | - | - | V100 | 77.43 | 78.56 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r101_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_40k_voc12aug/upernet_r101_512x512_40k_voc12aug_20200613_163549-e26476ac.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_40k_voc12aug/upernet_r101_512x512_40k_voc12aug_20200613_163549.log.json) | + ## Citation ```bibtex @@ -33,36 +66,3 @@ Humans recognize the visual world at multiple levels: we effortlessly categorize year={2018} } ``` - -## Results and models - -### Cityscapes - -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------- | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| UPerNet | R-50 | 512x1024 | 40000 | 6.4 | 4.25 | 77.10 | 78.37 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r50_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x1024_40k_cityscapes/upernet_r50_512x1024_40k_cityscapes_20200605_094827-aa54cb54.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x1024_40k_cityscapes/upernet_r50_512x1024_40k_cityscapes_20200605_094827.log.json) | -| UPerNet | R-101 | 512x1024 | 40000 | 7.4 | 3.79 | 78.69 | 80.11 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r101_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x1024_40k_cityscapes/upernet_r101_512x1024_40k_cityscapes_20200605_094933-ebce3b10.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x1024_40k_cityscapes/upernet_r101_512x1024_40k_cityscapes_20200605_094933.log.json) | -| UPerNet | R-50 | 769x769 | 40000 | 7.2 | 1.76 | 77.98 | 79.70 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r50_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_769x769_40k_cityscapes/upernet_r50_769x769_40k_cityscapes_20200530_033048-92d21539.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_769x769_40k_cityscapes/upernet_r50_769x769_40k_cityscapes_20200530_033048.log.json) | -| UPerNet | R-101 | 769x769 | 40000 | 8.4 | 1.56 | 79.03 | 80.77 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r101_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_769x769_40k_cityscapes/upernet_r101_769x769_40k_cityscapes_20200530_040819-83c95d01.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_769x769_40k_cityscapes/upernet_r101_769x769_40k_cityscapes_20200530_040819.log.json) | -| UPerNet | R-50 | 512x1024 | 80000 | - | - | 78.19 | 79.19 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r50_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x1024_80k_cityscapes/upernet_r50_512x1024_80k_cityscapes_20200607_052207-848beca8.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x1024_80k_cityscapes/upernet_r50_512x1024_80k_cityscapes_20200607_052207.log.json) | -| UPerNet | R-101 | 512x1024 | 80000 | - | - | 79.40 | 80.46 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r101_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x1024_80k_cityscapes/upernet_r101_512x1024_80k_cityscapes_20200607_002403-f05f2345.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x1024_80k_cityscapes/upernet_r101_512x1024_80k_cityscapes_20200607_002403.log.json) | -| UPerNet | R-50 | 769x769 | 80000 | - | - | 79.39 | 80.92 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r50_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_769x769_80k_cityscapes/upernet_r50_769x769_80k_cityscapes_20200607_005107-82ae7d15.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_769x769_80k_cityscapes/upernet_r50_769x769_80k_cityscapes_20200607_005107.log.json) | -| UPerNet | R-101 | 769x769 | 80000 | - | - | 80.10 | 81.49 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r101_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_769x769_80k_cityscapes/upernet_r101_769x769_80k_cityscapes_20200607_001014-082fc334.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_769x769_80k_cityscapes/upernet_r101_769x769_80k_cityscapes_20200607_001014.log.json) | - -### ADE20K - -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------- | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| UPerNet | R-50 | 512x512 | 80000 | 8.1 | 23.40 | 40.70 | 41.81 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r50_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_80k_ade20k/upernet_r50_512x512_80k_ade20k_20200614_144127-ecc8377b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_80k_ade20k/upernet_r50_512x512_80k_ade20k_20200614_144127.log.json) | -| UPerNet | R-101 | 512x512 | 80000 | 9.1 | 20.34 | 42.91 | 43.96 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r101_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_80k_ade20k/upernet_r101_512x512_80k_ade20k_20200614_185117-32e4db94.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_80k_ade20k/upernet_r101_512x512_80k_ade20k_20200614_185117.log.json) | -| UPerNet | R-50 | 512x512 | 160000 | - | - | 42.05 | 42.78 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r50_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_160k_ade20k/upernet_r50_512x512_160k_ade20k_20200615_184328-8534de8d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_160k_ade20k/upernet_r50_512x512_160k_ade20k_20200615_184328.log.json) | -| UPerNet | R-101 | 512x512 | 160000 | - | - | 43.82 | 44.85 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r101_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_160k_ade20k/upernet_r101_512x512_160k_ade20k_20200615_161951-91b32684.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_160k_ade20k/upernet_r101_512x512_160k_ade20k_20200615_161951.log.json) | - -### Pascal VOC 2012 + Aug - -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------- | -------- | --------- | ------: | -------- | -------------- | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| UPerNet | R-50 | 512x512 | 20000 | 6.4 | 23.17 | 74.82 | 76.35 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r50_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_20k_voc12aug/upernet_r50_512x512_20k_voc12aug_20200617_165330-5b5890a7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_20k_voc12aug/upernet_r50_512x512_20k_voc12aug_20200617_165330.log.json) | -| UPerNet | R-101 | 512x512 | 20000 | 7.5 | 19.98 | 77.10 | 78.29 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r101_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_20k_voc12aug/upernet_r101_512x512_20k_voc12aug_20200617_165629-f14e7f27.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_20k_voc12aug/upernet_r101_512x512_20k_voc12aug_20200617_165629.log.json) | -| UPerNet | R-50 | 512x512 | 40000 | - | - | 75.92 | 77.44 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r50_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_40k_voc12aug/upernet_r50_512x512_40k_voc12aug_20200613_162257-ca9bcc6b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_40k_voc12aug/upernet_r50_512x512_40k_voc12aug_20200613_162257.log.json) | -| UPerNet | R-101 | 512x512 | 40000 | - | - | 77.43 | 78.56 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r101_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_40k_voc12aug/upernet_r101_512x512_40k_voc12aug_20200613_163549-e26476ac.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_40k_voc12aug/upernet_r101_512x512_40k_voc12aug_20200613_163549.log.json) | diff --git a/configs/upernet/metafile.yaml b/configs/upernet/metafile.yaml new file mode 100644 index 0000000000..f6ad8187f2 --- /dev/null +++ b/configs/upernet/metafile.yaml @@ -0,0 +1,391 @@ +Collections: +- Name: UPerNet + License: Apache License 2.0 + Metadata: + Training Data: + - Cityscapes + - ADE20K + - Pascal VOC 2012 + Aug + Paper: + Title: Unified Perceptual Parsing for Scene Understanding + URL: https://arxiv.org/pdf/1807.10221.pdf + README: configs/upernet/README.md + Frameworks: + - PyTorch +Models: +- Name: upernet_r50_4xb2-40k_cityscapes-512x1024 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 77.1 + mIoU(ms+flip): 78.37 + Config: configs/upernet/upernet_r50_4xb2-40k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50 + - UPerNet + Training Resources: 4x V100 GPUS + Memory (GB): 6.4 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x1024_40k_cityscapes/upernet_r50_512x1024_40k_cityscapes_20200605_094827-aa54cb54.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x1024_40k_cityscapes/upernet_r50_512x1024_40k_cityscapes_20200605_094827.log.json + Paper: + Title: Unified Perceptual Parsing for Scene Understanding + URL: https://arxiv.org/pdf/1807.10221.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/uper_head.py#L13 + Framework: PyTorch +- Name: upernet_r101_4xb2-40k_cityscapes-512x1024 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.69 + mIoU(ms+flip): 80.11 + Config: configs/upernet/upernet_r101_4xb2-40k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101 + - UPerNet + Training Resources: 4x V100 GPUS + Memory (GB): 7.4 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x1024_40k_cityscapes/upernet_r101_512x1024_40k_cityscapes_20200605_094933-ebce3b10.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x1024_40k_cityscapes/upernet_r101_512x1024_40k_cityscapes_20200605_094933.log.json + Paper: + Title: Unified Perceptual Parsing for Scene Understanding + URL: https://arxiv.org/pdf/1807.10221.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/uper_head.py#L13 + Framework: PyTorch +- Name: upernet_r50_4xb2-40k_cityscapes-769x769 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 77.98 + mIoU(ms+flip): 79.7 + Config: configs/upernet/upernet_r50_4xb2-40k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50 + - UPerNet + Training Resources: 4x V100 GPUS + Memory (GB): 7.2 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_769x769_40k_cityscapes/upernet_r50_769x769_40k_cityscapes_20200530_033048-92d21539.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_769x769_40k_cityscapes/upernet_r50_769x769_40k_cityscapes_20200530_033048.log.json + Paper: + Title: Unified Perceptual Parsing for Scene Understanding + URL: https://arxiv.org/pdf/1807.10221.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/uper_head.py#L13 + Framework: PyTorch +- Name: upernet_r101_4xb2-40k_cityscapes-769x769 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.03 + mIoU(ms+flip): 80.77 + Config: configs/upernet/upernet_r101_4xb2-40k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101 + - UPerNet + Training Resources: 4x V100 GPUS + Memory (GB): 8.4 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_769x769_40k_cityscapes/upernet_r101_769x769_40k_cityscapes_20200530_040819-83c95d01.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_769x769_40k_cityscapes/upernet_r101_769x769_40k_cityscapes_20200530_040819.log.json + Paper: + Title: Unified Perceptual Parsing for Scene Understanding + URL: https://arxiv.org/pdf/1807.10221.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/uper_head.py#L13 + Framework: PyTorch +- Name: upernet_r50_4xb2-80k_cityscapes-512x1024 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 78.19 + mIoU(ms+flip): 79.19 + Config: configs/upernet/upernet_r50_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50 + - UPerNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x1024_80k_cityscapes/upernet_r50_512x1024_80k_cityscapes_20200607_052207-848beca8.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x1024_80k_cityscapes/upernet_r50_512x1024_80k_cityscapes_20200607_052207.log.json + Paper: + Title: Unified Perceptual Parsing for Scene Understanding + URL: https://arxiv.org/pdf/1807.10221.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/uper_head.py#L13 + Framework: PyTorch +- Name: upernet_r101_4xb2-80k_cityscapes-512x1024 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.4 + mIoU(ms+flip): 80.46 + Config: configs/upernet/upernet_r101_4xb2-80k_cityscapes-512x1024.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101 + - UPerNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x1024_80k_cityscapes/upernet_r101_512x1024_80k_cityscapes_20200607_002403-f05f2345.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x1024_80k_cityscapes/upernet_r101_512x1024_80k_cityscapes_20200607_002403.log.json + Paper: + Title: Unified Perceptual Parsing for Scene Understanding + URL: https://arxiv.org/pdf/1807.10221.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/uper_head.py#L13 + Framework: PyTorch +- Name: upernet_r50_4xb2-80k_cityscapes-769x769 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 79.39 + mIoU(ms+flip): 80.92 + Config: configs/upernet/upernet_r50_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-50 + - UPerNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_769x769_80k_cityscapes/upernet_r50_769x769_80k_cityscapes_20200607_005107-82ae7d15.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_769x769_80k_cityscapes/upernet_r50_769x769_80k_cityscapes_20200607_005107.log.json + Paper: + Title: Unified Perceptual Parsing for Scene Understanding + URL: https://arxiv.org/pdf/1807.10221.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/uper_head.py#L13 + Framework: PyTorch +- Name: upernet_r101_4xb2-80k_cityscapes-769x769 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: Cityscapes + Metrics: + mIoU: 80.1 + mIoU(ms+flip): 81.49 + Config: configs/upernet/upernet_r101_4xb2-80k_cityscapes-769x769.py + Metadata: + Training Data: Cityscapes + Batch Size: 8 + Architecture: + - R-101 + - UPerNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_769x769_80k_cityscapes/upernet_r101_769x769_80k_cityscapes_20200607_001014-082fc334.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_769x769_80k_cityscapes/upernet_r101_769x769_80k_cityscapes_20200607_001014.log.json + Paper: + Title: Unified Perceptual Parsing for Scene Understanding + URL: https://arxiv.org/pdf/1807.10221.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/uper_head.py#L13 + Framework: PyTorch +- Name: upernet_r50_4xb4-80k_ade20k-512x512 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 40.7 + mIoU(ms+flip): 41.81 + Config: configs/upernet/upernet_r50_4xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50 + - UPerNet + Training Resources: 4x V100 GPUS + Memory (GB): 8.1 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_80k_ade20k/upernet_r50_512x512_80k_ade20k_20200614_144127-ecc8377b.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_80k_ade20k/upernet_r50_512x512_80k_ade20k_20200614_144127.log.json + Paper: + Title: Unified Perceptual Parsing for Scene Understanding + URL: https://arxiv.org/pdf/1807.10221.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/uper_head.py#L13 + Framework: PyTorch +- Name: upernet_r101_4xb4-80k_ade20k-512x512 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 42.91 + mIoU(ms+flip): 43.96 + Config: configs/upernet/upernet_r101_4xb4-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-101 + - UPerNet + Training Resources: 4x V100 GPUS + Memory (GB): 9.1 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_80k_ade20k/upernet_r101_512x512_80k_ade20k_20200614_185117-32e4db94.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_80k_ade20k/upernet_r101_512x512_80k_ade20k_20200614_185117.log.json + Paper: + Title: Unified Perceptual Parsing for Scene Understanding + URL: https://arxiv.org/pdf/1807.10221.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/uper_head.py#L13 + Framework: PyTorch +- Name: upernet_r50_4xb4-160k_ade20k-512x512 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 42.05 + mIoU(ms+flip): 42.78 + Config: configs/upernet/upernet_r50_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-50 + - UPerNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_160k_ade20k/upernet_r50_512x512_160k_ade20k_20200615_184328-8534de8d.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_160k_ade20k/upernet_r50_512x512_160k_ade20k_20200615_184328.log.json + Paper: + Title: Unified Perceptual Parsing for Scene Understanding + URL: https://arxiv.org/pdf/1807.10221.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/uper_head.py#L13 + Framework: PyTorch +- Name: upernet_r101_4xb4-160k_ade20k-512x512 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 43.82 + mIoU(ms+flip): 44.85 + Config: configs/upernet/upernet_r101_4xb4-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - R-101 + - UPerNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_160k_ade20k/upernet_r101_512x512_160k_ade20k_20200615_161951-91b32684.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_160k_ade20k/upernet_r101_512x512_160k_ade20k_20200615_161951.log.json + Paper: + Title: Unified Perceptual Parsing for Scene Understanding + URL: https://arxiv.org/pdf/1807.10221.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/uper_head.py#L13 + Framework: PyTorch +- Name: upernet_r50_4xb4-20k_voc12aug-512x512 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 74.82 + mIoU(ms+flip): 76.35 + Config: configs/upernet/upernet_r50_4xb4-20k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - R-50 + - UPerNet + Training Resources: 4x V100 GPUS + Memory (GB): 6.4 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_20k_voc12aug/upernet_r50_512x512_20k_voc12aug_20200617_165330-5b5890a7.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_20k_voc12aug/upernet_r50_512x512_20k_voc12aug_20200617_165330.log.json + Paper: + Title: Unified Perceptual Parsing for Scene Understanding + URL: https://arxiv.org/pdf/1807.10221.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/uper_head.py#L13 + Framework: PyTorch +- Name: upernet_r101_4xb4-20k_voc12aug-512x512 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 77.1 + mIoU(ms+flip): 78.29 + Config: configs/upernet/upernet_r101_4xb4-20k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - R-101 + - UPerNet + Training Resources: 4x V100 GPUS + Memory (GB): 7.5 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_20k_voc12aug/upernet_r101_512x512_20k_voc12aug_20200617_165629-f14e7f27.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_20k_voc12aug/upernet_r101_512x512_20k_voc12aug_20200617_165629.log.json + Paper: + Title: Unified Perceptual Parsing for Scene Understanding + URL: https://arxiv.org/pdf/1807.10221.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/uper_head.py#L13 + Framework: PyTorch +- Name: upernet_r50_4xb4-40k_voc12aug-512x512 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 75.92 + mIoU(ms+flip): 77.44 + Config: configs/upernet/upernet_r50_4xb4-40k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - R-50 + - UPerNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_40k_voc12aug/upernet_r50_512x512_40k_voc12aug_20200613_162257-ca9bcc6b.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_40k_voc12aug/upernet_r50_512x512_40k_voc12aug_20200613_162257.log.json + Paper: + Title: Unified Perceptual Parsing for Scene Understanding + URL: https://arxiv.org/pdf/1807.10221.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/uper_head.py#L13 + Framework: PyTorch +- Name: upernet_r101_4xb4-40k_voc12aug-512x512 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: Pascal VOC 2012 + Aug + Metrics: + mIoU: 77.43 + mIoU(ms+flip): 78.56 + Config: configs/upernet/upernet_r101_4xb4-40k_voc12aug-512x512.py + Metadata: + Training Data: Pascal VOC 2012 + Aug + Batch Size: 16 + Architecture: + - R-101 + - UPerNet + Training Resources: 4x V100 GPUS + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_40k_voc12aug/upernet_r101_512x512_40k_voc12aug_20200613_163549-e26476ac.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_40k_voc12aug/upernet_r101_512x512_40k_voc12aug_20200613_163549.log.json + Paper: + Title: Unified Perceptual Parsing for Scene Understanding + URL: https://arxiv.org/pdf/1807.10221.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/uper_head.py#L13 + Framework: PyTorch diff --git a/configs/upernet/upernet.yml b/configs/upernet/upernet.yml deleted file mode 100644 index 6892fcf06a..0000000000 --- a/configs/upernet/upernet.yml +++ /dev/null @@ -1,305 +0,0 @@ -Collections: -- Name: UPerNet - Metadata: - Training Data: - - Cityscapes - - ADE20K - - Pascal VOC 2012 + Aug - Paper: - URL: https://arxiv.org/pdf/1807.10221.pdf - Title: Unified Perceptual Parsing for Scene Understanding - README: configs/upernet/README.md - Code: - URL: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/decode_heads/uper_head.py#L13 - Version: v0.17.0 - Converted From: - Code: https://github.com/CSAILVision/unifiedparsing -Models: -- Name: upernet_r50_4xb2-40k_cityscapes-512x1024 - In Collection: UPerNet - Metadata: - backbone: R-50 - crop size: (512,1024) - lr schd: 40000 - inference time (ms/im): - - value: 235.29 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 6.4 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 77.1 - mIoU(ms+flip): 78.37 - Config: configs/upernet/upernet_r50_4xb2-40k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x1024_40k_cityscapes/upernet_r50_512x1024_40k_cityscapes_20200605_094827-aa54cb54.pth -- Name: upernet_r101_4xb2-40k_cityscapes-512x1024 - In Collection: UPerNet - Metadata: - backbone: R-101 - crop size: (512,1024) - lr schd: 40000 - inference time (ms/im): - - value: 263.85 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,1024) - Training Memory (GB): 7.4 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.69 - mIoU(ms+flip): 80.11 - Config: configs/upernet/upernet_r101_4xb2-40k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x1024_40k_cityscapes/upernet_r101_512x1024_40k_cityscapes_20200605_094933-ebce3b10.pth -- Name: upernet_r50_4xb2-40k_cityscapes-769x769 - In Collection: UPerNet - Metadata: - backbone: R-50 - crop size: (769,769) - lr schd: 40000 - inference time (ms/im): - - value: 568.18 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 7.2 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 77.98 - mIoU(ms+flip): 79.7 - Config: configs/upernet/upernet_r50_4xb2-40k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_769x769_40k_cityscapes/upernet_r50_769x769_40k_cityscapes_20200530_033048-92d21539.pth -- Name: upernet_r101_4xb2-40k_cityscapes-769x769 - In Collection: UPerNet - Metadata: - backbone: R-101 - crop size: (769,769) - lr schd: 40000 - inference time (ms/im): - - value: 641.03 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (769,769) - Training Memory (GB): 8.4 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.03 - mIoU(ms+flip): 80.77 - Config: configs/upernet/upernet_r101_4xb2-40k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_769x769_40k_cityscapes/upernet_r101_769x769_40k_cityscapes_20200530_040819-83c95d01.pth -- Name: upernet_r50_4xb2-80k_cityscapes-512x1024 - In Collection: UPerNet - Metadata: - backbone: R-50 - crop size: (512,1024) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 78.19 - mIoU(ms+flip): 79.19 - Config: configs/upernet/upernet_r50_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x1024_80k_cityscapes/upernet_r50_512x1024_80k_cityscapes_20200607_052207-848beca8.pth -- Name: upernet_r101_4xb2-80k_cityscapes-512x1024 - In Collection: UPerNet - Metadata: - backbone: R-101 - crop size: (512,1024) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.4 - mIoU(ms+flip): 80.46 - Config: configs/upernet/upernet_r101_4xb2-80k_cityscapes-512x1024.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x1024_80k_cityscapes/upernet_r101_512x1024_80k_cityscapes_20200607_002403-f05f2345.pth -- Name: upernet_r50_4xb2-80k_cityscapes-769x769 - In Collection: UPerNet - Metadata: - backbone: R-50 - crop size: (769,769) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 79.39 - mIoU(ms+flip): 80.92 - Config: configs/upernet/upernet_r50_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_769x769_80k_cityscapes/upernet_r50_769x769_80k_cityscapes_20200607_005107-82ae7d15.pth -- Name: upernet_r101_4xb2-80k_cityscapes-769x769 - In Collection: UPerNet - Metadata: - backbone: R-101 - crop size: (769,769) - lr schd: 80000 - Results: - - Task: Semantic Segmentation - Dataset: Cityscapes - Metrics: - mIoU: 80.1 - mIoU(ms+flip): 81.49 - Config: configs/upernet/upernet_r101_4xb2-80k_cityscapes-769x769.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_769x769_80k_cityscapes/upernet_r101_769x769_80k_cityscapes_20200607_001014-082fc334.pth -- Name: upernet_r50_4xb4-80k_ade20k-512x512 - In Collection: UPerNet - Metadata: - backbone: R-50 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 42.74 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 8.1 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 40.7 - mIoU(ms+flip): 41.81 - Config: configs/upernet/upernet_r50_4xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_80k_ade20k/upernet_r50_512x512_80k_ade20k_20200614_144127-ecc8377b.pth -- Name: upernet_r101_4xb4-80k_ade20k-512x512 - In Collection: UPerNet - Metadata: - backbone: R-101 - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 49.16 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 9.1 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 42.91 - mIoU(ms+flip): 43.96 - Config: configs/upernet/upernet_r101_4xb4-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_80k_ade20k/upernet_r101_512x512_80k_ade20k_20200614_185117-32e4db94.pth -- Name: upernet_r50_4xb4-160k_ade20k-512x512 - In Collection: UPerNet - Metadata: - backbone: R-50 - crop size: (512,512) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 42.05 - mIoU(ms+flip): 42.78 - Config: configs/upernet/upernet_r50_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_160k_ade20k/upernet_r50_512x512_160k_ade20k_20200615_184328-8534de8d.pth -- Name: upernet_r101_4xb4-160k_ade20k-512x512 - In Collection: UPerNet - Metadata: - backbone: R-101 - crop size: (512,512) - lr schd: 160000 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 43.82 - mIoU(ms+flip): 44.85 - Config: configs/upernet/upernet_r101_4xb4-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_160k_ade20k/upernet_r101_512x512_160k_ade20k_20200615_161951-91b32684.pth -- Name: upernet_r50_4xb4-20k_voc12aug-512x512 - In Collection: UPerNet - Metadata: - backbone: R-50 - crop size: (512,512) - lr schd: 20000 - inference time (ms/im): - - value: 43.16 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 6.4 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 74.82 - mIoU(ms+flip): 76.35 - Config: configs/upernet/upernet_r50_4xb4-20k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_20k_voc12aug/upernet_r50_512x512_20k_voc12aug_20200617_165330-5b5890a7.pth -- Name: upernet_r101_4xb4-20k_voc12aug-512x512 - In Collection: UPerNet - Metadata: - backbone: R-101 - crop size: (512,512) - lr schd: 20000 - inference time (ms/im): - - value: 50.05 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 7.5 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 77.1 - mIoU(ms+flip): 78.29 - Config: configs/upernet/upernet_r101_4xb4-20k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_20k_voc12aug/upernet_r101_512x512_20k_voc12aug_20200617_165629-f14e7f27.pth -- Name: upernet_r50_4xb4-40k_voc12aug-512x512 - In Collection: UPerNet - Metadata: - backbone: R-50 - crop size: (512,512) - lr schd: 40000 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 75.92 - mIoU(ms+flip): 77.44 - Config: configs/upernet/upernet_r50_4xb4-40k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_40k_voc12aug/upernet_r50_512x512_40k_voc12aug_20200613_162257-ca9bcc6b.pth -- Name: upernet_r101_4xb4-40k_voc12aug-512x512 - In Collection: UPerNet - Metadata: - backbone: R-101 - crop size: (512,512) - lr schd: 40000 - Results: - - Task: Semantic Segmentation - Dataset: Pascal VOC 2012 + Aug - Metrics: - mIoU: 77.43 - mIoU(ms+flip): 78.56 - Config: configs/upernet/upernet_r101_4xb4-40k_voc12aug-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_40k_voc12aug/upernet_r101_512x512_40k_voc12aug_20200613_163549-e26476ac.pth diff --git a/configs/vit/README.md b/configs/vit/README.md index b7f242549d..26601d498f 100644 --- a/configs/vit/README.md +++ b/configs/vit/README.md @@ -1,6 +1,6 @@ # Vision Transformer -[An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale](https://arxiv.org/pdf/2010.11929.pdf) +> [An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale](https://arxiv.org/pdf/2010.11929.pdf) ## Introduction @@ -22,17 +22,6 @@ While the Transformer architecture has become the de-facto standard for natural -## Citation - -```bibtex -@article{dosoViTskiy2020, - title={An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale}, - author={DosoViTskiy, Alexey and Beyer, Lucas and Kolesnikov, Alexander and Weissenborn, Dirk and Zhai, Xiaohua and Unterthiner, Thomas and Dehghani, Mostafa and Minderer, Matthias and Heigold, Georg and Gelly, Sylvain and Uszkoreit, Jakob and Houlsby, Neil}, - journal={arXiv preprint arXiv:2010.11929}, - year={2020} -} -``` - ## Usage To use other repositories' pre-trained models, it is necessary to convert keys. @@ -55,16 +44,27 @@ This script convert model from `PRETRAIN_PATH` and store the converted model in ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | -| ------- | ----------------- | --------- | ------: | -------- | -------------- | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| UPerNet | ViT-B + MLN | 512x512 | 80000 | 9.20 | 6.94 | 47.71 | 49.51 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/vit/vit_vit-b16_mln_upernet_8xb2-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_vit-b16_mln_512x512_80k_ade20k/upernet_vit-b16_mln_512x512_80k_ade20k_20210624_130547-0403cee1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_vit-b16_mln_512x512_80k_ade20k/20210624_130547.log.json) | -| UPerNet | ViT-B + MLN | 512x512 | 160000 | 9.20 | 7.58 | 46.75 | 48.46 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/vit/vit_vit-b16_mln_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_vit-b16_mln_512x512_160k_ade20k/upernet_vit-b16_mln_512x512_160k_ade20k_20210624_130547-852fa768.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_vit-b16_mln_512x512_160k_ade20k/20210623_192432.log.json) | -| UPerNet | ViT-B + LN + MLN | 512x512 | 160000 | 9.21 | 6.82 | 47.73 | 49.95 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/vit/vit_vit-b16-ln_mln_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_vit-b16_ln_mln_512x512_160k_ade20k/upernet_vit-b16_ln_mln_512x512_160k_ade20k_20210621_172828-f444c077.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_vit-b16_ln_mln_512x512_160k_ade20k/20210621_172828.log.json) | -| UPerNet | DeiT-S | 512x512 | 80000 | 4.68 | 29.85 | 42.96 | 43.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/vit/vit_deit-s16_upernet_8xb2-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_512x512_80k_ade20k/upernet_deit-s16_512x512_80k_ade20k_20210624_095228-afc93ec2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_512x512_80k_ade20k/20210624_095228.log.json) | -| UPerNet | DeiT-S | 512x512 | 160000 | 4.68 | 29.19 | 42.87 | 43.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/vit/vit_deit-s16_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_512x512_160k_ade20k/upernet_deit-s16_512x512_160k_ade20k_20210621_160903-5110d916.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_512x512_160k_ade20k/20210621_160903.log.json) | -| UPerNet | DeiT-S + MLN | 512x512 | 160000 | 5.69 | 11.18 | 43.82 | 45.07 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/vit/vit_deit-s16_mln_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_mln_512x512_160k_ade20k/upernet_deit-s16_mln_512x512_160k_ade20k_20210621_161021-fb9a5dfb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_mln_512x512_160k_ade20k/20210621_161021.log.json) | -| UPerNet | DeiT-S + LN + MLN | 512x512 | 160000 | 5.69 | 12.39 | 43.52 | 45.01 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/vit/vit_deit-s16-ln_mln_upernet_512x512_160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_ln_mln_512x512_160k_ade20k/upernet_deit-s16_ln_mln_512x512_160k_ade20k_20210621_161021-c0cd652f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_ln_mln_512x512_160k_ade20k/20210621_161021.log.json) | -| UPerNet | DeiT-B | 512x512 | 80000 | 7.75 | 9.69 | 45.24 | 46.73 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/vit/vit_deit-b16_upernet_8xb2-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_512x512_80k_ade20k/upernet_deit-b16_512x512_80k_ade20k_20210624_130529-1e090789.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_512x512_80k_ade20k/20210624_130529.log.json) | -| UPerNet | DeiT-B | 512x512 | 160000 | 7.75 | 10.39 | 45.36 | 47.16 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/vit/vit_deit-b16_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_512x512_160k_ade20k/upernet_deit-b16_512x512_160k_ade20k_20210621_180100-828705d7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_512x512_160k_ade20k/20210621_180100.log.json) | -| UPerNet | DeiT-B + MLN | 512x512 | 160000 | 9.21 | 7.78 | 45.46 | 47.16 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/vit/vit_deit-b16_mln_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_mln_512x512_160k_ade20k/upernet_deit-b16_mln_512x512_160k_ade20k_20210621_191949-4e1450f3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_mln_512x512_160k_ade20k/20210621_191949.log.json) | -| UPerNet | DeiT-B + LN + MLN | 512x512 | 160000 | 9.21 | 7.75 | 45.37 | 47.23 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/vit/vit_deit-b16-ln_mln_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_ln_mln_512x512_160k_ade20k/upernet_deit-b16_ln_mln_512x512_160k_ade20k_20210623_153535-8a959c14.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_ln_mln_512x512_160k_ade20k/20210623_153535.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------- | ----------------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| UPerNet | ViT-B + MLN | 512x512 | 80000 | 9.20 | 6.94 | V100 | 47.71 | 49.51 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/vit/vit_vit-b16_mln_upernet_8xb2-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_vit-b16_mln_512x512_80k_ade20k/upernet_vit-b16_mln_512x512_80k_ade20k_20210624_130547-0403cee1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_vit-b16_mln_512x512_80k_ade20k/20210624_130547.log.json) | +| UPerNet | ViT-B + MLN | 512x512 | 160000 | 9.20 | 7.58 | V100 | 46.75 | 48.46 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/vit/vit_vit-b16_mln_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_vit-b16_mln_512x512_160k_ade20k/upernet_vit-b16_mln_512x512_160k_ade20k_20210624_130547-852fa768.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_vit-b16_mln_512x512_160k_ade20k/20210623_192432.log.json) | +| UPerNet | ViT-B + LN + MLN | 512x512 | 160000 | 9.21 | 6.82 | V100 | 47.73 | 49.95 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/vit/vit_vit-b16-ln_mln_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_vit-b16_ln_mln_512x512_160k_ade20k/upernet_vit-b16_ln_mln_512x512_160k_ade20k_20210621_172828-f444c077.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_vit-b16_ln_mln_512x512_160k_ade20k/20210621_172828.log.json) | +| UPerNet | DeiT-S | 512x512 | 80000 | 4.68 | 29.85 | V100 | 42.96 | 43.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/vit/vit_deit-s16_upernet_8xb2-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_512x512_80k_ade20k/upernet_deit-s16_512x512_80k_ade20k_20210624_095228-afc93ec2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_512x512_80k_ade20k/20210624_095228.log.json) | +| UPerNet | DeiT-S | 512x512 | 160000 | 4.68 | 29.19 | V100 | 42.87 | 43.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/vit/vit_deit-s16_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_512x512_160k_ade20k/upernet_deit-s16_512x512_160k_ade20k_20210621_160903-5110d916.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_512x512_160k_ade20k/20210621_160903.log.json) | +| UPerNet | DeiT-S + MLN | 512x512 | 160000 | 5.69 | 11.18 | V100 | 43.82 | 45.07 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/vit/vit_deit-s16_mln_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_mln_512x512_160k_ade20k/upernet_deit-s16_mln_512x512_160k_ade20k_20210621_161021-fb9a5dfb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_mln_512x512_160k_ade20k/20210621_161021.log.json) | +| UPerNet | DeiT-S + LN + MLN | 512x512 | 160000 | 5.69 | 12.39 | V100 | 43.52 | 45.01 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/vit/vit_deit-s16-ln_mln_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_ln_mln_512x512_160k_ade20k/upernet_deit-s16_ln_mln_512x512_160k_ade20k_20210621_161021-c0cd652f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_ln_mln_512x512_160k_ade20k/20210621_161021.log.json) | +| UPerNet | DeiT-B | 512x512 | 80000 | 7.75 | 9.69 | V100 | 45.24 | 46.73 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/vit/vit_deit-b16_upernet_8xb2-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_512x512_80k_ade20k/upernet_deit-b16_512x512_80k_ade20k_20210624_130529-1e090789.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_512x512_80k_ade20k/20210624_130529.log.json) | +| UPerNet | DeiT-B | 512x512 | 160000 | 7.75 | 10.39 | V100 | 45.36 | 47.16 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/vit/vit_deit-b16_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_512x512_160k_ade20k/upernet_deit-b16_512x512_160k_ade20k_20210621_180100-828705d7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_512x512_160k_ade20k/20210621_180100.log.json) | +| UPerNet | DeiT-B + MLN | 512x512 | 160000 | 9.21 | 7.78 | V100 | 45.46 | 47.16 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/vit/vit_deit-b16_mln_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_mln_512x512_160k_ade20k/upernet_deit-b16_mln_512x512_160k_ade20k_20210621_191949-4e1450f3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_mln_512x512_160k_ade20k/20210621_191949.log.json) | +| UPerNet | DeiT-B + LN + MLN | 512x512 | 160000 | 9.21 | 7.75 | V100 | 45.37 | 47.23 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/vit/vit_deit-b16-ln_mln_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_ln_mln_512x512_160k_ade20k/upernet_deit-b16_ln_mln_512x512_160k_ade20k_20210623_153535-8a959c14.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_ln_mln_512x512_160k_ade20k/20210623_153535.log.json) | + +## Citation + +```bibtex +@article{dosoViTskiy2020, + title={An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale}, + author={DosoViTskiy, Alexey and Beyer, Lucas and Kolesnikov, Alexander and Weissenborn, Dirk and Zhai, Xiaohua and Unterthiner, Thomas and Dehghani, Mostafa and Minderer, Matthias and Heigold, Georg and Gelly, Sylvain and Uszkoreit, Jakob and Houlsby, Neil}, + journal={arXiv preprint arXiv:2010.11929}, + year={2020} +} +``` diff --git a/configs/vit/metafile.yaml b/configs/vit/metafile.yaml new file mode 100644 index 0000000000..68e254a5f9 --- /dev/null +++ b/configs/vit/metafile.yaml @@ -0,0 +1,265 @@ +Models: +- Name: vit_vit-b16_mln_upernet_8xb2-80k_ade20k-512x512 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 47.71 + mIoU(ms+flip): 49.51 + Config: configs/vit/vit_vit-b16_mln_upernet_8xb2-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - ViT-B + - UPerNet + Training Resources: 8x V100 GPUS + Memory (GB): 9.2 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_vit-b16_mln_512x512_80k_ade20k/upernet_vit-b16_mln_512x512_80k_ade20k_20210624_130547-0403cee1.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_vit-b16_mln_512x512_80k_ade20k/20210624_130547.log.json + Paper: + Title: 'An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale' + URL: https://arxiv.org/pdf/2010.11929.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/vit.py#L98 + Framework: PyTorch +- Name: vit_vit-b16_mln_upernet_8xb2-160k_ade20k-512x512 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 46.75 + mIoU(ms+flip): 48.46 + Config: configs/vit/vit_vit-b16_mln_upernet_8xb2-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - ViT-B + - UPerNet + Training Resources: 8x V100 GPUS + Memory (GB): 9.2 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_vit-b16_mln_512x512_160k_ade20k/upernet_vit-b16_mln_512x512_160k_ade20k_20210624_130547-852fa768.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_vit-b16_mln_512x512_160k_ade20k/20210623_192432.log.json + Paper: + Title: 'An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale' + URL: https://arxiv.org/pdf/2010.11929.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/vit.py#L98 + Framework: PyTorch +- Name: vit_vit-b16-ln_mln_upernet_8xb2-160k_ade20k-512x512 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 47.73 + mIoU(ms+flip): 49.95 + Config: configs/vit/vit_vit-b16-ln_mln_upernet_8xb2-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - ViT-B + - UPerNet + Training Resources: 8x V100 GPUS + Memory (GB): 9.21 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_vit-b16_ln_mln_512x512_160k_ade20k/upernet_vit-b16_ln_mln_512x512_160k_ade20k_20210621_172828-f444c077.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_vit-b16_ln_mln_512x512_160k_ade20k/20210621_172828.log.json + Paper: + Title: 'An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale' + URL: https://arxiv.org/pdf/2010.11929.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/vit.py#L98 + Framework: PyTorch +- Name: vit_deit-s16_upernet_8xb2-80k_ade20k-512x512 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 42.96 + mIoU(ms+flip): 43.79 + Config: configs/vit/vit_deit-s16_upernet_8xb2-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - DeiT-S + - UPerNet + Training Resources: 8x V100 GPUS + Memory (GB): 4.68 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_512x512_80k_ade20k/upernet_deit-s16_512x512_80k_ade20k_20210624_095228-afc93ec2.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_512x512_80k_ade20k/20210624_095228.log.json + Paper: + Title: 'An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale' + URL: https://arxiv.org/pdf/2010.11929.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/vit.py#L98 + Framework: PyTorch +- Name: vit_deit-s16_upernet_8xb2-160k_ade20k-512x512 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 42.87 + mIoU(ms+flip): 43.79 + Config: configs/vit/vit_deit-s16_upernet_8xb2-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - DeiT-S + - UPerNet + Training Resources: 8x V100 GPUS + Memory (GB): 4.68 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_512x512_160k_ade20k/upernet_deit-s16_512x512_160k_ade20k_20210621_160903-5110d916.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_512x512_160k_ade20k/20210621_160903.log.json + Paper: + Title: 'An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale' + URL: https://arxiv.org/pdf/2010.11929.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/vit.py#L98 + Framework: PyTorch +- Name: vit_deit-s16_mln_upernet_8xb2-160k_ade20k-512x512 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 43.82 + mIoU(ms+flip): 45.07 + Config: configs/vit/vit_deit-s16_mln_upernet_8xb2-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - DeiT-S + - UPerNet + Training Resources: 8x V100 GPUS + Memory (GB): 5.69 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_mln_512x512_160k_ade20k/upernet_deit-s16_mln_512x512_160k_ade20k_20210621_161021-fb9a5dfb.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_mln_512x512_160k_ade20k/20210621_161021.log.json + Paper: + Title: 'An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale' + URL: https://arxiv.org/pdf/2010.11929.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/vit.py#L98 + Framework: PyTorch +- Name: vit_deit-s16-ln_mln_upernet_8xb2-160k_ade20k-512x512 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 43.52 + mIoU(ms+flip): 45.01 + Config: configs/vit/vit_deit-s16-ln_mln_upernet_8xb2-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - DeiT-S + - UPerNet + Training Resources: 8x V100 GPUS + Memory (GB): 5.69 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_ln_mln_512x512_160k_ade20k/upernet_deit-s16_ln_mln_512x512_160k_ade20k_20210621_161021-c0cd652f.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_ln_mln_512x512_160k_ade20k/20210621_161021.log.json + Paper: + Title: 'An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale' + URL: https://arxiv.org/pdf/2010.11929.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/vit.py#L98 + Framework: PyTorch +- Name: vit_deit-b16_upernet_8xb2-80k_ade20k-512x512 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 45.24 + mIoU(ms+flip): 46.73 + Config: configs/vit/vit_deit-b16_upernet_8xb2-80k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - DeiT-B + - UPerNet + Training Resources: 8x V100 GPUS + Memory (GB): 7.75 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_512x512_80k_ade20k/upernet_deit-b16_512x512_80k_ade20k_20210624_130529-1e090789.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_512x512_80k_ade20k/20210624_130529.log.json + Paper: + Title: 'An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale' + URL: https://arxiv.org/pdf/2010.11929.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/vit.py#L98 + Framework: PyTorch +- Name: vit_deit-b16_upernet_8xb2-160k_ade20k-512x512 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 45.36 + mIoU(ms+flip): 47.16 + Config: configs/vit/vit_deit-b16_upernet_8xb2-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - DeiT-B + - UPerNet + Training Resources: 8x V100 GPUS + Memory (GB): 7.75 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_512x512_160k_ade20k/upernet_deit-b16_512x512_160k_ade20k_20210621_180100-828705d7.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_512x512_160k_ade20k/20210621_180100.log.json + Paper: + Title: 'An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale' + URL: https://arxiv.org/pdf/2010.11929.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/vit.py#L98 + Framework: PyTorch +- Name: vit_deit-b16_mln_upernet_8xb2-160k_ade20k-512x512 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 45.46 + mIoU(ms+flip): 47.16 + Config: configs/vit/vit_deit-b16_mln_upernet_8xb2-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - DeiT-B + - UPerNet + Training Resources: 8x V100 GPUS + Memory (GB): 9.21 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_mln_512x512_160k_ade20k/upernet_deit-b16_mln_512x512_160k_ade20k_20210621_191949-4e1450f3.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_mln_512x512_160k_ade20k/20210621_191949.log.json + Paper: + Title: 'An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale' + URL: https://arxiv.org/pdf/2010.11929.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/vit.py#L98 + Framework: PyTorch +- Name: vit_deit-b16-ln_mln_upernet_8xb2-160k_ade20k-512x512 + In Collection: UPerNet + Results: + Task: Semantic Segmentation + Dataset: ADE20K + Metrics: + mIoU: 45.37 + mIoU(ms+flip): 47.23 + Config: configs/vit/vit_deit-b16-ln_mln_upernet_8xb2-160k_ade20k-512x512.py + Metadata: + Training Data: ADE20K + Batch Size: 16 + Architecture: + - DeiT-B + - UPerNet + Training Resources: 8x V100 GPUS + Memory (GB): 9.21 + Weights: https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_ln_mln_512x512_160k_ade20k/upernet_deit-b16_ln_mln_512x512_160k_ade20k_20210623_153535-8a959c14.pth + Training log: https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_ln_mln_512x512_160k_ade20k/20210623_153535.log.json + Paper: + Title: 'An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale' + URL: https://arxiv.org/pdf/2010.11929.pdf + Code: https://github.com/open-mmlab/mmsegmentation/blob/v0.17.0/mmseg/models/backbones/vit.py#L98 + Framework: PyTorch diff --git a/configs/vit/vit.yml b/configs/vit/vit.yml deleted file mode 100644 index 613d866ac4..0000000000 --- a/configs/vit/vit.yml +++ /dev/null @@ -1,243 +0,0 @@ -Models: -- Name: vit_vit-b16_mln_upernet_8xb2-80k_ade20k-512x512 - In Collection: UPerNet - Metadata: - backbone: ViT-B + MLN - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 144.09 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 9.2 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 47.71 - mIoU(ms+flip): 49.51 - Config: configs/vit/vit_vit-b16_mln_upernet_8xb2-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_vit-b16_mln_512x512_80k_ade20k/upernet_vit-b16_mln_512x512_80k_ade20k_20210624_130547-0403cee1.pth -- Name: vit_vit-b16_mln_upernet_8xb2-160k_ade20k-512x512 - In Collection: UPerNet - Metadata: - backbone: ViT-B + MLN - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 131.93 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 9.2 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 46.75 - mIoU(ms+flip): 48.46 - Config: configs/vit/vit_vit-b16_mln_upernet_8xb2-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_vit-b16_mln_512x512_160k_ade20k/upernet_vit-b16_mln_512x512_160k_ade20k_20210624_130547-852fa768.pth -- Name: vit_vit-b16-ln_mln_upernet_8xb2-160k_ade20k-512x512 - In Collection: UPerNet - Metadata: - backbone: ViT-B + LN + MLN - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 146.63 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 9.21 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 47.73 - mIoU(ms+flip): 49.95 - Config: configs/vit/vit_vit-b16-ln_mln_upernet_8xb2-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_vit-b16_ln_mln_512x512_160k_ade20k/upernet_vit-b16_ln_mln_512x512_160k_ade20k_20210621_172828-f444c077.pth -- Name: vit_deit-s16_upernet_8xb2-80k_ade20k-512x512 - In Collection: UPerNet - Metadata: - backbone: DeiT-S - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 33.5 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 4.68 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 42.96 - mIoU(ms+flip): 43.79 - Config: configs/vit/vit_deit-s16_upernet_8xb2-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_512x512_80k_ade20k/upernet_deit-s16_512x512_80k_ade20k_20210624_095228-afc93ec2.pth -- Name: vit_deit-s16_upernet_8xb2-160k_ade20k-512x512 - In Collection: UPerNet - Metadata: - backbone: DeiT-S - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 34.26 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 4.68 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 42.87 - mIoU(ms+flip): 43.79 - Config: configs/vit/vit_deit-s16_upernet_8xb2-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_512x512_160k_ade20k/upernet_deit-s16_512x512_160k_ade20k_20210621_160903-5110d916.pth -- Name: vit_deit-s16_mln_upernet_8xb2-160k_ade20k-512x512 - In Collection: UPerNet - Metadata: - backbone: DeiT-S + MLN - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 89.45 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 5.69 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 43.82 - mIoU(ms+flip): 45.07 - Config: configs/vit/vit_deit-s16_mln_upernet_8xb2-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_mln_512x512_160k_ade20k/upernet_deit-s16_mln_512x512_160k_ade20k_20210621_161021-fb9a5dfb.pth -- Name: vit_deit-s16-ln_mln_upernet_512x512_160k_ade20k-512x512 - In Collection: UPerNet - Metadata: - backbone: DeiT-S + LN + MLN - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 80.71 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 5.69 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 43.52 - mIoU(ms+flip): 45.01 - Config: configs/vit/vit_deit-s16-ln_mln_upernet_512x512_160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_ln_mln_512x512_160k_ade20k/upernet_deit-s16_ln_mln_512x512_160k_ade20k_20210621_161021-c0cd652f.pth -- Name: vit_deit-b16_upernet_8xb2-80k_ade20k-512x512 - In Collection: UPerNet - Metadata: - backbone: DeiT-B - crop size: (512,512) - lr schd: 80000 - inference time (ms/im): - - value: 103.2 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 7.75 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 45.24 - mIoU(ms+flip): 46.73 - Config: configs/vit/vit_deit-b16_upernet_8xb2-80k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_512x512_80k_ade20k/upernet_deit-b16_512x512_80k_ade20k_20210624_130529-1e090789.pth -- Name: vit_deit-b16_upernet_8xb2-160k_ade20k-512x512 - In Collection: UPerNet - Metadata: - backbone: DeiT-B - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 96.25 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 7.75 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 45.36 - mIoU(ms+flip): 47.16 - Config: configs/vit/vit_deit-b16_upernet_8xb2-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_512x512_160k_ade20k/upernet_deit-b16_512x512_160k_ade20k_20210621_180100-828705d7.pth -- Name: vit_deit-b16_mln_upernet_8xb2-160k_ade20k-512x512 - In Collection: UPerNet - Metadata: - backbone: DeiT-B + MLN - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 128.53 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 9.21 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 45.46 - mIoU(ms+flip): 47.16 - Config: configs/vit/vit_deit-b16_mln_upernet_8xb2-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_mln_512x512_160k_ade20k/upernet_deit-b16_mln_512x512_160k_ade20k_20210621_191949-4e1450f3.pth -- Name: vit_deit-b16-ln_mln_upernet_8xb2-160k_ade20k-512x512 - In Collection: UPerNet - Metadata: - backbone: DeiT-B + LN + MLN - crop size: (512,512) - lr schd: 160000 - inference time (ms/im): - - value: 129.03 - hardware: V100 - backend: PyTorch - batch size: 1 - mode: FP32 - resolution: (512,512) - Training Memory (GB): 9.21 - Results: - - Task: Semantic Segmentation - Dataset: ADE20K - Metrics: - mIoU: 45.37 - mIoU(ms+flip): 47.23 - Config: configs/vit/vit_deit-b16-ln_mln_upernet_8xb2-160k_ade20k-512x512.py - Weights: https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_ln_mln_512x512_160k_ade20k/upernet_deit-b16_ln_mln_512x512_160k_ade20k_20210623_153535-8a959c14.pth diff --git a/configs/vit/vit_deit-s16-ln_mln_upernet_512x512_160k_ade20k-512x512.py b/configs/vit/vit_deit-s16-ln_mln_upernet_8xb2-160k_ade20k-512x512.py similarity index 100% rename from configs/vit/vit_deit-s16-ln_mln_upernet_512x512_160k_ade20k-512x512.py rename to configs/vit/vit_deit-s16-ln_mln_upernet_8xb2-160k_ade20k-512x512.py diff --git a/model-index.yml b/model-index.yml index 130031a303..5e87c386dd 100644 --- a/model-index.yml +++ b/model-index.yml @@ -1,50 +1,50 @@ Import: -- configs/ann/ann.yml -- configs/apcnet/apcnet.yml -- configs/beit/beit.yml -- configs/bisenetv1/bisenetv1.yml -- configs/bisenetv2/bisenetv2.yml -- configs/ccnet/ccnet.yml -- configs/cgnet/cgnet.yml -- configs/convnext/convnext.yml -- configs/danet/danet.yml -- configs/deeplabv3/deeplabv3.yml -- configs/deeplabv3plus/deeplabv3plus.yml -- configs/dmnet/dmnet.yml -- configs/dnlnet/dnlnet.yml -- configs/dpt/dpt.yml -- configs/emanet/emanet.yml -- configs/encnet/encnet.yml -- configs/erfnet/erfnet.yml -- configs/fastfcn/fastfcn.yml -- configs/fastscnn/fastscnn.yml -- configs/fcn/fcn.yml -- configs/gcnet/gcnet.yml -- configs/hrnet/hrnet.yml -- configs/icnet/icnet.yml -- configs/isanet/isanet.yml -- configs/knet/knet.yml -- configs/mae/mae.yml -- configs/mask2former/mask2former.yml -- configs/maskformer/maskformer.yml -- configs/mobilenet_v2/mobilenet_v2.yml -- configs/mobilenet_v3/mobilenet_v3.yml -- configs/nonlocal_net/nonlocal_net.yml -- configs/ocrnet/ocrnet.yml -- configs/pidnet/pidnet.yml -- configs/point_rend/point_rend.yml -- configs/poolformer/poolformer.yml -- configs/psanet/psanet.yml -- configs/pspnet/pspnet.yml -- configs/resnest/resnest.yml -- configs/segformer/segformer.yml -- configs/segmenter/segmenter.yml -- configs/segnext/segnext.yml -- configs/sem_fpn/sem_fpn.yml -- configs/setr/setr.yml -- configs/stdc/stdc.yml -- configs/swin/swin.yml -- configs/twins/twins.yml -- configs/unet/unet.yml -- configs/upernet/upernet.yml -- configs/vit/vit.yml +- configs/ann/metafile.yaml +- configs/apcnet/metafile.yaml +- configs/beit/metafile.yaml +- configs/bisenetv1/metafile.yaml +- configs/bisenetv2/metafile.yaml +- configs/ccnet/metafile.yaml +- configs/cgnet/metafile.yaml +- configs/convnext/metafile.yaml +- configs/danet/metafile.yaml +- configs/deeplabv3/metafile.yaml +- configs/deeplabv3plus/metafile.yaml +- configs/dmnet/metafile.yaml +- configs/dnlnet/metafile.yaml +- configs/dpt/metafile.yaml +- configs/emanet/metafile.yaml +- configs/encnet/metafile.yaml +- configs/erfnet/metafile.yaml +- configs/fastfcn/metafile.yaml +- configs/fastscnn/metafile.yaml +- configs/fcn/metafile.yaml +- configs/gcnet/metafile.yaml +- configs/hrnet/metafile.yaml +- configs/icnet/metafile.yaml +- configs/isanet/metafile.yaml +- configs/knet/metafile.yaml +- configs/mae/metafile.yaml +- configs/mask2former/metafile.yaml +- configs/maskformer/metafile.yaml +- configs/mobilenet_v2/metafile.yaml +- configs/mobilenet_v3/metafile.yaml +- configs/nonlocal_net/metafile.yaml +- configs/ocrnet/metafile.yaml +- configs/pidnet/metafile.yaml +- configs/point_rend/metafile.yaml +- configs/poolformer/metafile.yaml +- configs/psanet/metafile.yaml +- configs/pspnet/metafile.yaml +- configs/resnest/metafile.yaml +- configs/segformer/metafile.yaml +- configs/segmenter/metafile.yaml +- configs/segnext/metafile.yaml +- configs/sem_fpn/metafile.yaml +- configs/setr/metafile.yaml +- configs/stdc/metafile.yaml +- configs/swin/metafile.yaml +- configs/twins/metafile.yaml +- configs/unet/metafile.yaml +- configs/upernet/metafile.yaml +- configs/vit/metafile.yaml From ff95416c3b5ce8d62b9289f743531398efce534f Mon Sep 17 00:00:00 2001 From: Miao Zheng <76149310+MeowZheng@users.noreply.github.com> Date: Fri, 17 Mar 2023 22:58:08 +0800 Subject: [PATCH 21/32] [Features]Support dump segment predition (#2712) ## Motivation 1. It is used to save the segmentation predictions as files and upload these files to a test server ## Modification 1. Add output_file and format only in `IoUMetric` ## BC-breaking (Optional) No ## Use cases (Optional) If this PR introduces a new feature, it is better to list some use cases here, and update the documentation. ## Checklist 1. Pre-commit or other linting tools are used to fix the potential lint issues. 3. The modification is covered by complete unit tests. If not, please add more unit test to ensure the correctness. 4. If the modification has potential influence on downstream projects, this PR should be tested with downstream projects, like MMDet or MMDet3D. 5. The documentation has been modified accordingly, like docstring or example tutorials. --- docs/en/migration/interface.md | 29 ++++++ docs/en/user_guides/4_train_test.md | 97 ++++++++++++++++++- docs/zh_cn/migration/interface.md | 31 +++++- docs/zh_cn/user_guides/4_train_test.md | 92 ++++++++++++++++++ mmseg/datasets/transforms/formatting.py | 2 +- mmseg/evaluation/metrics/citys_metric.py | 15 ++- mmseg/evaluation/metrics/iou_metric.py | 48 +++++++-- .../test_metrics/test_citys_metric.py | 27 ++---- .../test_metrics/test_iou_metric.py | 30 +++++- tools/test.py | 9 ++ 10 files changed, 347 insertions(+), 33 deletions(-) diff --git a/docs/en/migration/interface.md b/docs/en/migration/interface.md index 3dab125ebc..46040d911f 100644 --- a/docs/en/migration/interface.md +++ b/docs/en/migration/interface.md @@ -65,6 +65,35 @@ Compared with MMSeg0.x, MMSeg1.x provides fewer command line arguments in `tools --cfg-options randomness.deterministic=True +## Test launch + +Similar to training launch, there are only common arguments in tools/test.py of MMSegmentation 1.x. +Below is the difference in test scripts, +please refer to [this documentation](../user_guides/4_train_test.md) for more details about test launch. + + + + + + + + + + + + + + + + + + + + + + +
    Function0.x1.x
    Evaluation metrics--eval mIoU--cfg-options test_evaluator.type=IoUMetric
    Whether to use test time augmentation--aug-test--tta
    Whether save the output results without perform evaluation--format-only--cfg-options test_evaluator.format_only=True
    + ## Configuration file ### Model settings diff --git a/docs/en/user_guides/4_train_test.md b/docs/en/user_guides/4_train_test.md index 00e074ad39..9b2d17dc46 100644 --- a/docs/en/user_guides/4_train_test.md +++ b/docs/en/user_guides/4_train_test.md @@ -70,7 +70,7 @@ This tool accepts several optional arguments, including: export CUDA_VISIBLE_DEVICES=-1 ``` -And then run the script [above](#testing-on-a-single-gpu). +then run the script [above](#testing-on-a-single-gpu). ## Training and testing on multiple GPUs and multiple machines @@ -218,3 +218,98 @@ You can check [the source code](../../../tools/slurm_test.sh) to review full arg CUDA_VISIBLE_DEVICES=0,1,2,3 GPUS=4 MASTER_PORT=29500 sh tools/slurm_train.sh ${PARTITION} ${JOB_NAME} config1.py ${WORK_DIR} CUDA_VISIBLE_DEVICES=4,5,6,7 GPUS=4 MASTER_PORT=29501 sh tools/slurm_train.sh ${PARTITION} ${JOB_NAME} config2.py ${WORK_DIR} ``` + +## Testing and saving segment files + +### Basic Usage + +When you want to save the results, you can use `--out` to specify the output directory. + +```shell +python tools/test.py ${CONFIG_FILE} ${CHECKPOINT_FILE} --out ${OUTPUT_DIR} +``` + +Here is an example to save the predicted results from model `fcn_r50-d8_4xb4-80k_ade20k-512x512` on ADE20k validatation dataset. + +```shell +python tools/test.py configs/fcn/fcn_r50-d8_4xb4-80k_ade20k-512x512.py ckpt/fcn_r50-d8_512x512_80k_ade20k_20200614_144016-f8ac5082.pth --out work_dirs/format_results +``` + +You also can modify the config file to define `output_dir`. We also take +`fcn_r50-d8_4xb4-80k_ade20k-512x512` as example just add +`test_evaluator` in `configs/fcn/fcn_r50-d8_4xb4-80k_ade20k-512x512.py` + +```python +test_evaluator = dict(type='IoUMetric', iou_metrics=['mIoU'], output_dir='work_dirs/format_results') +``` + +then run command without `--out`: + +```shell +python tools/test.py configs/fcn/fcn_r50-d8_4xb4-80k_ade20k-512x512.py ckpt/fcn_r50-d8_512x512_80k_ade20k_20200614_144016-f8ac5082.pth +``` + +If you would like to only save the predicted results without evaluation as annotation is not released by the official dataset, you can set `format_only=True` and modify `test_dataloader`. +As there is no annotation in dataset, we remove `dict(type='LoadAnnotations')` from `test_dataloader` Here is the example configuration: + +```python +test_evaluator = dict( + type='IoUMetric', + iou_metrics=['mIoU'], + format_only=True, + output_dir='work_dirs/format_results') +test_dataloader = dict( + batch_size=1, + num_workers=4, + persistent_workers=True, + sampler=dict(type='DefaultSampler', shuffle=False), + dataset=dict( + type = 'ADE20KDataset' + data_root='data/ade/release_test', + data_prefix=dict(img_path='testing'), + # we don't load annotation in test transform pipeline. + pipeline=[ + dict(type='LoadImageFromFile'), + dict(type='Resize', scale=(2048, 512), keep_ratio=True), + dict(type='PackSegInputs') + ])) +``` + +then run test command: + +```shell +python tools/test.py configs/fcn/fcn_r50-d8_4xb4-80k_ade20k-512x512.py ckpt/fcn_r50-d8_512x512_80k_ade20k_20200614_144016-f8ac5082.pth +``` + +### Testing Cityscape dataset and save predicted segment files + +We recommend `CityscapesMetric` which is the wrapper of Cityscapes'sdk, when you want to +save the predicted results of Cityscape test dataset to submit them in [Cityscape test server](https://www.cityscapes-dataset.com/submit/). Here is the example configuration: + +```python +test_evaluator = dict( + type='CityscapesMetric', + format_only=True, + keep_results=True, + output_dir='work_dirs/format_results') +test_dataloader = dict( + batch_size=1, + num_workers=4, + persistent_workers=True, + sampler=dict(type='DefaultSampler', shuffle=False), + dataset=dict( + type='CityscapesDataset', + data_root='data/cityscapes/', + data_prefix=dict(img_path='leftImg8bit/test'), + pipeline=[ + dict(type='LoadImageFromFile'), + dict(type='Resize', scale=(2048, 1024), keep_ratio=True), + dict(type='PackSegInputs') + ])) +``` + +then run test command, for example: + +```shell +python tools/test.py configs/fcn/fcn_r18-d8_4xb2-80k_cityscapes-512x1024.py ckpt/fcn_r18-d8_512x1024_80k_cityscapes_20201225_021327-6c50f8b4.pth +``` diff --git a/docs/zh_cn/migration/interface.md b/docs/zh_cn/migration/interface.md index a329ce38a8..cd16d2cbc6 100644 --- a/docs/zh_cn/migration/interface.md +++ b/docs/zh_cn/migration/interface.md @@ -65,6 +65,33 @@ OpenMMLab 2.0 的主要改进是发布了 MMEngine,它为启动训练任务的 --cfg-options randomness.deterministic=True +## 测试启动 + +与训练启动类似,MMSegmentation 1.x 的测试启动脚本在 tools/test.py 中仅提供关键命令行参数,以下是测试启动脚本的区别,更多关于测试启动的细节请参考[这里](../user_guides/4_train_test.md)。 + + + + + + + + + + + + + + + + + + + + + + +
    功能0.x1.x
    指定评测指标--eval mIoU--cfg-options test_evaluator.type=IoUMetric
    测试时数据增强--aug-test--tta
    测试时是否只保存预测结果不计算评测指标--format-only--cfg-options test_evaluator.format_only=True
    + ## 配置文件 ### 模型设置 @@ -98,7 +125,7 @@ OpenMMLab 2.0 的主要改进是发布了 MMEngine,它为启动训练任务的 **data** 的更改: -原版 `data` 字段被拆分为 `train_dataloader`、`val_dataloader` 和 `test_dataloader`。这允许我们以细粒度配置它们。例如,您可以在训练和测试期间指定不同的采样器和批次大小。 +原版 `data` 字段被拆分为 `train_dataloader`、`val_dataloader` 和 `test_dataloader`,允许我们以细粒度配置它们。例如,您可以在训练和测试期间指定不同的采样器和批次大小。 `samples_per_gpu` 重命名为 `batch_size`。 `workers_per_gpu` 重命名为 `num_workers`。 @@ -144,7 +171,7 @@ test_dataloader = val_dataloader -**流程**变更 +**数据增强变换流程**变更 - 原始格式转换 **`ToTensor`**、**`ImageToTensor`**、**`Collect`** 组合为 [`PackSegInputs`](mmseg.datasets.transforms.PackSegInputs) - 我们不建议在数据集流程中执行 **`Normalize`** 和 **Pad**。请将其从流程中删除,并将其设置在 `data_preprocessor` 字段中。 diff --git a/docs/zh_cn/user_guides/4_train_test.md b/docs/zh_cn/user_guides/4_train_test.md index 309e046b2d..f821acaf52 100644 --- a/docs/zh_cn/user_guides/4_train_test.md +++ b/docs/zh_cn/user_guides/4_train_test.md @@ -223,3 +223,95 @@ GPUS=4 sh tools/slurm_train.sh dev pspnet configs/pspnet/pspnet_r50-d8_512x1024_ CUDA_VISIBLE_DEVICES=0,1,2,3 GPUS=4 MASTER_PORT=29500 sh tools/slurm_train.sh ${分区} ${任务名} config1.py ${工作路径} CUDA_VISIBLE_DEVICES=4,5,6,7 GPUS=4 MASTER_PORT=29501 sh tools/slurm_train.sh ${分区} ${任务名} config2.py ${工作路径} ``` + +## 测试并保存分割结果 + +### 基础使用 + +当需要保存测试输出的分割结果,用 `--out` 指定分割结果输出路径 + +```shell +python tools/test.py ${CONFIG_FILE} ${CHECKPOINT_FILE} --out ${OUTPUT_DIR} +``` + +以保存模型 `fcn_r50-d8_4xb4-80k_ade20k-512x512` 在 ADE20K 验证数据集上的结果为例: + +```shell +python tools/test.py configs/fcn/fcn_r50-d8_4xb4-80k_ade20k-512x512.py ckpt/fcn_r50-d8_512x512_80k_ade20k_20200614_144016-f8ac5082.pth --out work_dirs/format_results +``` + +或者通过配置文件定义 `output_dir`。例如在 `configs/fcn/fcn_r50-d8_4xb4-80k_ade20k-512x512.py` 添加 `test_evaluator` 定义: + +```python +test_evaluator = dict(type='IoUMetric', iou_metrics=['mIoU'], output_dir='work_dirs/format_results') +``` + +然后执行相同功能的命令不需要再使用 `--out`: + +```shell +python tools/test.py configs/fcn/fcn_r50-d8_4xb4-80k_ade20k-512x512.py ckpt/fcn_r50-d8_512x512_80k_ade20k_20200614_144016-f8ac5082.pth +``` + +当测试的数据集没有提供标注,评测时没有真值可以参与计算,因此需要设置 `format_only=True`, +同时需要修改 `test_dataloader`,由于没有标注,我们需要在数据增强变换中删掉 `dict(type='LoadAnnotations')`,以下是一个配置示例: + +```python +test_evaluator = dict( + type='IoUMetric', + iou_metrics=['mIoU'], + format_only=True, + output_dir='work_dirs/format_results') +test_dataloader = dict( + batch_size=1, + num_workers=4, + persistent_workers=True, + sampler=dict(type='DefaultSampler', shuffle=False), + dataset=dict( + type = 'ADE20KDataset' + data_root='data/ade/release_test', + data_prefix=dict(img_path='testing'), + # 测试数据变换中没有加载标注 + pipeline=[ + dict(type='LoadImageFromFile'), + dict(type='Resize', scale=(2048, 512), keep_ratio=True), + dict(type='PackSegInputs') + ])) +``` + +然后执行测试命令: + +```shell +python tools/test.py configs/fcn/fcn_r50-d8_4xb4-80k_ade20k-512x512.py ckpt/fcn_r50-d8_512x512_80k_ade20k_20200614_144016-f8ac5082.pth +``` + +### 测试 Cityscapes 数据集并保存输出分割结果 + +推荐使用 `CityscapesMetric` 来保存模型在 Cityscapes 数据集上的测试结果,以下是一个配置示例: + +```python +test_evaluator = dict( + type='CityscapesMetric', + format_only=True, + keep_results=True, + output_dir='work_dirs/format_results') +test_dataloader = dict( + batch_size=1, + num_workers=4, + persistent_workers=True, + sampler=dict(type='DefaultSampler', shuffle=False), + dataset=dict( + type='CityscapesDataset', + data_root='data/cityscapes/', + data_prefix=dict(img_path='leftImg8bit/test'), + pipeline=[ + dict(type='LoadImageFromFile'), + dict(type='Resize', scale=(2048, 1024), keep_ratio=True), + dict(type='PackSegInputs') + ])) +``` + +然后执行相同的命令,例如: + +```shell +python tools/test.py configs/fcn/fcn_r18-d8_4xb2-80k_cityscapes-512x1024.py ckpt/fcn_r18-d8_512x1024_80k_cityscapes_20201225_021327-6c50f8b4.pth +``` diff --git a/mmseg/datasets/transforms/formatting.py b/mmseg/datasets/transforms/formatting.py index 46171d64f5..89fd883791 100644 --- a/mmseg/datasets/transforms/formatting.py +++ b/mmseg/datasets/transforms/formatting.py @@ -44,7 +44,7 @@ class PackSegInputs(BaseTransform): def __init__(self, meta_keys=('img_path', 'seg_map_path', 'ori_shape', 'img_shape', 'pad_shape', 'scale_factor', 'flip', - 'flip_direction')): + 'flip_direction', 'reduce_zero_label')): self.meta_keys = meta_keys def transform(self, results: dict) -> dict: diff --git a/mmseg/evaluation/metrics/citys_metric.py b/mmseg/evaluation/metrics/citys_metric.py index a2c008b99d..32984653c3 100644 --- a/mmseg/evaluation/metrics/citys_metric.py +++ b/mmseg/evaluation/metrics/citys_metric.py @@ -51,7 +51,8 @@ def __init__(self, format_only: bool = False, keep_results: bool = False, collect_device: str = 'cpu', - prefix: Optional[str] = None) -> None: + prefix: Optional[str] = None, + **kwargs) -> None: super().__init__(collect_device=collect_device, prefix=prefix) if CSEval is None: raise ImportError('Please run "pip install cityscapesscripts" to ' @@ -97,10 +98,14 @@ def process(self, data_batch: dict, data_samples: Sequence[dict]) -> None: osp.join(self.output_dir, f'{basename}.png')) output = Image.fromarray(pred_label.astype(np.uint8)).convert('P') output.save(png_filename) - # when evaluating with official cityscapesscripts, - # **_gtFine_labelIds.png is used - gt_filename = data_sample['seg_map_path'].replace( - 'labelTrainIds.png', 'labelIds.png') + if self.format_only: + # format_only always for test dataset without ground truth + gt_filename = '' + else: + # when evaluating with official cityscapesscripts, + # **_gtFine_labelIds.png is used + gt_filename = data_sample['seg_map_path'].replace( + 'labelTrainIds.png', 'labelIds.png') self.results.append((png_filename, gt_filename)) def compute_metrics(self, results: list) -> Dict[str, float]: diff --git a/mmseg/evaluation/metrics/iou_metric.py b/mmseg/evaluation/metrics/iou_metric.py index a152ef9dd6..16014c7400 100644 --- a/mmseg/evaluation/metrics/iou_metric.py +++ b/mmseg/evaluation/metrics/iou_metric.py @@ -1,11 +1,15 @@ # Copyright (c) OpenMMLab. All rights reserved. +import os.path as osp from collections import OrderedDict from typing import Dict, List, Optional, Sequence import numpy as np import torch +from mmengine.dist import is_main_process from mmengine.evaluator import BaseMetric from mmengine.logging import MMLogger, print_log +from mmengine.utils import mkdir_or_exist +from PIL import Image from prettytable import PrettyTable from mmseg.registry import METRICS @@ -27,6 +31,12 @@ class IoUMetric(BaseMetric): collect_device (str): Device name used for collecting results from different ranks during distributed training. Must be 'cpu' or 'gpu'. Defaults to 'cpu'. + output_dir (str): The directory for output prediction. Defaults to + None. + format_only (bool): Only format result for results commit without + perform evaluation. It is useful when you want to save the result + to a specific format and submit it to the test server. + Defaults to False. prefix (str, optional): The prefix that will be added in the metric names to disambiguate homonymous metrics of different evaluators. If prefix is not provided in the argument, self.default_prefix @@ -39,13 +49,20 @@ def __init__(self, nan_to_num: Optional[int] = None, beta: int = 1, collect_device: str = 'cpu', - prefix: Optional[str] = None) -> None: + output_dir: Optional[str] = None, + format_only: bool = False, + prefix: Optional[str] = None, + **kwargs) -> None: super().__init__(collect_device=collect_device, prefix=prefix) self.ignore_index = ignore_index self.metrics = iou_metrics self.nan_to_num = nan_to_num self.beta = beta + self.output_dir = output_dir + if self.output_dir and is_main_process(): + mkdir_or_exist(self.output_dir) + self.format_only = format_only def process(self, data_batch: dict, data_samples: Sequence[dict]) -> None: """Process one batch of data and data_samples. @@ -60,10 +77,27 @@ def process(self, data_batch: dict, data_samples: Sequence[dict]) -> None: num_classes = len(self.dataset_meta['classes']) for data_sample in data_samples: pred_label = data_sample['pred_sem_seg']['data'].squeeze() - label = data_sample['gt_sem_seg']['data'].squeeze().to(pred_label) - self.results.append( - self.intersect_and_union(pred_label, label, num_classes, - self.ignore_index)) + # format_only always for test dataset without ground truth + if not self.format_only: + label = data_sample['gt_sem_seg']['data'].squeeze().to( + pred_label) + self.results.append( + self.intersect_and_union(pred_label, label, num_classes, + self.ignore_index)) + # format_result + if self.output_dir is not None: + basename = osp.splitext(osp.basename( + data_sample['img_path']))[0] + png_filename = osp.abspath( + osp.join(self.output_dir, f'{basename}.png')) + output_mask = pred_label.cpu().numpy() + # The index range of official ADE20k dataset is from 0 to 150. + # But the index range of output is from 0 to 149. + # That is because we set reduce_zero_label=True. + if data_sample.get('reduce_zero_label', False): + output_mask = output_mask + 1 + output = Image.fromarray(output_mask.astype(np.uint8)) + output.save(png_filename) def compute_metrics(self, results: list) -> Dict[str, float]: """Compute the metrics from processed results. @@ -78,7 +112,9 @@ def compute_metrics(self, results: list) -> Dict[str, float]: mRecall. """ logger: MMLogger = MMLogger.get_current_instance() - + if self.format_only: + logger.info(f'results are saved to {osp.dirname(self.output_dir)}') + return OrderedDict() # convert list of tuples to tuple of lists, e.g. # [(A_1, B_1, C_1, D_1), ..., (A_n, B_n, C_n, D_n)] to # ([A_1, ..., A_n], ..., [D_1, ..., D_n]) diff --git a/tests/test_evaluation/test_metrics/test_citys_metric.py b/tests/test_evaluation/test_metrics/test_citys_metric.py index 0a20b41aee..06f956f54a 100644 --- a/tests/test_evaluation/test_metrics/test_citys_metric.py +++ b/tests/test_evaluation/test_metrics/test_citys_metric.py @@ -1,11 +1,12 @@ # Copyright (c) OpenMMLab. All rights reserved. import os.path as osp +import shutil from unittest import TestCase import numpy as np import pytest import torch -from mmengine.structures import BaseDataElement, PixelData +from mmengine.structures import PixelData from mmseg.evaluation import CityscapesMetric from mmseg.structures import SegDataSample @@ -36,20 +37,16 @@ def _demo_mm_inputs(self, image_shape = image_shapes[idx] _, h, w = image_shape - mm_inputs = dict() data_sample = SegDataSample() gt_semantic_seg = np.random.randint( 0, num_classes, (1, h, w), dtype=np.uint8) gt_semantic_seg = torch.LongTensor(gt_semantic_seg) gt_sem_seg_data = dict(data=gt_semantic_seg) data_sample.gt_sem_seg = PixelData(**gt_sem_seg_data) - mm_inputs['data_sample'] = data_sample.to_dict() - mm_inputs['data_sample'][ + data_sample = data_sample.to_dict() + data_sample[ 'seg_map_path'] = 'tests/data/pseudo_cityscapes_dataset/gtFine/val/frankfurt/frankfurt_000000_000294_gtFine_labelTrainIds.png' # noqa - - mm_inputs['seg_map_path'] = mm_inputs['data_sample'][ - 'seg_map_path'] - packed_inputs.append(mm_inputs) + packed_inputs.append(data_sample) return packed_inputs @@ -85,14 +82,11 @@ def _demo_mm_model_output(self, _predictions = [] for pred in batch_datasampes: - if isinstance(pred, BaseDataElement): - test_data = pred.to_dict() - test_data[ - 'img_path'] = 'tests/data/pseudo_cityscapes_dataset/leftImg8bit/val/frankfurt/frankfurt_000000_000294_leftImg8bit.png' # noqa - - _predictions.append(test_data) - else: - _predictions.append(pred) + test_data = pred.to_dict() + test_data[ + 'img_path'] = 'tests/data/pseudo_cityscapes_dataset/leftImg8bit/val/frankfurt/frankfurt_000000_000294_leftImg8bit.png' # noqa + _predictions.append(test_data) + return _predictions def test_evaluate(self): @@ -122,5 +116,4 @@ def test_evaluate(self): metric.evaluate(2) assert osp.exists('tmp') assert osp.isfile('tmp/frankfurt_000000_000294_leftImg8bit.png') - import shutil shutil.rmtree('tmp') diff --git a/tests/test_evaluation/test_metrics/test_iou_metric.py b/tests/test_evaluation/test_metrics/test_iou_metric.py index a0bc922c31..7a0e9d53e3 100644 --- a/tests/test_evaluation/test_metrics/test_iou_metric.py +++ b/tests/test_evaluation/test_metrics/test_iou_metric.py @@ -1,4 +1,6 @@ # Copyright (c) OpenMMLab. All rights reserved. +import os.path as osp +import shutil from unittest import TestCase import numpy as np @@ -58,6 +60,8 @@ def _demo_mm_model_output(self, data=torch.randn(num_classes, h, w)) data_sample['pred_sem_seg'] = dict( data=torch.randint(0, num_classes, (1, h, w))) + data_sample[ + 'img_path'] = 'tests/data/pseudo_dataset/imgs/00000_img.jpg' return data_samples def test_evaluate(self): @@ -72,5 +76,29 @@ def test_evaluate(self): label_map=dict(), reduce_zero_label=False) iou_metric.process([0] * len(data_samples), data_samples) - res = iou_metric.evaluate(6) + res = iou_metric.evaluate(2) self.assertIsInstance(res, dict) + + # test save segment file in output_dir + iou_metric = IoUMetric(iou_metrics=['mIoU'], output_dir='tmp') + iou_metric.dataset_meta = dict( + classes=['wall', 'building', 'sky', 'floor', 'tree'], + label_map=dict(), + reduce_zero_label=False) + iou_metric.process([0] * len(data_samples), data_samples) + assert osp.exists('tmp') + assert osp.isfile('tmp/00000_img.png') + shutil.rmtree('tmp') + + # test format_only + iou_metric = IoUMetric( + iou_metrics=['mIoU'], output_dir='tmp', format_only=True) + iou_metric.dataset_meta = dict( + classes=['wall', 'building', 'sky', 'floor', 'tree'], + label_map=dict(), + reduce_zero_label=False) + iou_metric.process([0] * len(data_samples), data_samples) + assert iou_metric.results == [] + assert osp.exists('tmp') + assert osp.isfile('tmp/00000_img.png') + shutil.rmtree('tmp') diff --git a/tools/test.py b/tools/test.py index 7bfde58206..64da2bc261 100644 --- a/tools/test.py +++ b/tools/test.py @@ -17,6 +17,10 @@ def parse_args(): '--work-dir', help=('if specified, the evaluation metric results will be dumped' 'into the directory as json')) + parser.add_argument( + '--out', + type=str, + help='The directory to save output prediction for offline evaluation') parser.add_argument( '--show', action='store_true', help='show prediction results') parser.add_argument( @@ -100,6 +104,11 @@ def main(): cfg.tta_model.module = cfg.model cfg.model = cfg.tta_model + # add output_dir in metric + if args.out is not None: + cfg.test_evaluator['output_dir'] = args.out + cfg.test_evaluator['keep_results'] = True + # build the runner from config runner = Runner.from_cfg(cfg) From 1896344e04ad3a919194b394d44da4e0b69d026b Mon Sep 17 00:00:00 2001 From: Tianlong Ai <50650583+AI-Tianlong@users.noreply.github.com> Date: Tue, 21 Mar 2023 21:33:40 +0800 Subject: [PATCH 22/32] [Docs] Update zh_CN faq.md (#2769) As title #2750 --- docs/zh_cn/notes/faq.md | 116 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 113 insertions(+), 3 deletions(-) diff --git a/docs/zh_cn/notes/faq.md b/docs/zh_cn/notes/faq.md index 09fde025fd..d90329cf22 100644 --- a/docs/zh_cn/notes/faq.md +++ b/docs/zh_cn/notes/faq.md @@ -1,8 +1,118 @@ -# 常见问题解答(FAQ)(待更新) +# 常见问题解答(FAQ) -我们在这里列出了使用时的一些常见问题及其相应的解决方案。 如果您发现有一些问题被遗漏,请随时提 PR 丰富这个列表。 如果您无法在此获得帮助,请使用 [issue模板](https://github.com/open-mmlab/mmsegmentation/blob/master/.github/ISSUE_TEMPLATE/error-report.md/)创建问题,但是请在模板中填写所有必填信息,这有助于我们更快定位问题。 +我们在这里列出了使用时的一些常见问题及其相应的解决方案。 如果您发现有一些问题被遗漏,请随时提 PR 丰富这个列表。 如果您无法在此获得帮助,请使用 [issue模板](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/.github/ISSUE_TEMPLATE/error-report.md/)创建问题,但是请在模板中填写所有必填信息,这有助于我们更快定位问题。 + +## 安装 + +兼容的MMSegmentation和MMCV版本如下。请安装正确版本的MMCV以避免安装问题。 + +| MMSegmentation version | MMCV version | MMEngine version | MMClassification (optional) version | MMDetection (optional) version | +| :--------------------: | :----------------------------: | :---------------: | :---------------------------------: | :----------------------------: | +| dev-1.x branch | mmcv >= 2.0.0rc4 | MMEngine >= 0.5.0 | mmcls>=1.0.0rc0 | mmdet >= 3.0.0rc6 | +| 1.x branch | mmcv >= 2.0.0rc4 | MMEngine >= 0.5.0 | mmcls>=1.0.0rc0 | mmdet >= 3.0.0rc6 | +| 1.0.0rc6 | mmcv >= 2.0.0rc4 | MMEngine >= 0.5.0 | mmcls>=1.0.0rc0 | mmdet >= 3.0.0rc6 | +| 1.0.0rc5 | mmcv >= 2.0.0rc4 | MMEngine >= 0.2.0 | mmcls>=1.0.0rc0 | mmdet>=3.0.0rc6 | +| 1.0.0rc4 | mmcv == 2.0.0rc3 | MMEngine >= 0.1.0 | mmcls>=1.0.0rc0 | mmdet>=3.0.0rc4, \<=3.0.0rc5 | +| 1.0.0rc3 | mmcv == 2.0.0rc3 | MMEngine >= 0.1.0 | mmcls>=1.0.0rc0 | mmdet>=3.0.0rc4 \<=3.0.0rc5 | +| 1.0.0rc2 | mmcv == 2.0.0rc3 | MMEngine >= 0.1.0 | mmcls>=1.0.0rc0 | mmdet>=3.0.0rc4 \<=3.0.0rc5 | +| 1.0.0rc1 | mmcv >= 2.0.0rc1, \<=2.0.0rc3> | MMEngine >= 0.1.0 | mmcls>=1.0.0rc0 | Not required | +| 1.0.0rc0 | mmcv >= 2.0.0rc1, \<=2.0.0rc3> | MMEngine >= 0.1.0 | mmcls>=1.0.0rc0 | Not required | + +如果您已经安装了版本不合适的 mmcv,请先运行`pip uninstall mmcv`卸载已安装的 mmcv,如您先前安装的为 mmcv-full(存在于 OpenMMLab 1.x),请运行`pip uninstall mmcv-full`进行卸载。 + +- 如出现"No module named 'mmcv'"; + 1. 使用`pip uninstall mmcv`卸载环境中现有的mmcv。 + 2. 按照[安装说明](../get_started#best-practices)安装对应的mmcv。 ## 如何获知模型训练时需要的显卡数量 -- 看模型的config文件的命名。可以参考[学习配置文件](https://github.com/open-mmlab/mmsegmentation/blob/master/docs/zh_cn/tutorials/config.md)中的`配置文件命名风格`部分。比如,对于名字为`segformer_mit-b0_8x1_1024x1024_160k_cityscapes.py`的config文件,`8x1`代表训练其对应的模型需要的卡数为8,每张卡中的batch size为1。 +- 看模型的config文件的命名。可以参考[学习配置文件](../user_guides/1_config.md)中的`配置文件命名风格`部分。比如,对于名字为`segformer_mit-b0_8xb1-160k_cityscapes-1024x1024.py`的config文件,`8xb1`代表训练其对应的模型需要的卡数为8,每张卡中的batch size为1。 - 看模型的log文件。点开该模型的log文件,并在其中搜索`nGPU`,在`nGPU`后的数字个数即训练时所需的卡数。比如,在log文件中搜索`nGPU`得到`nGPU 0,1,2,3,4,5,6,7`的记录,则说明训练该模型需要使用八张卡。 + +## auxiliary head 是什么 + +简单来说,这是一个提高准确率的深度监督技术。在训练阶段,`decode_head` 用于输出语义分割的结果,`auxiliary_head` 只是增加了一个辅助损失,其产生的分割结果对你的模型结果没有影响,仅在在训练中起作用。您可以阅读这篇[论文](https://arxiv.org/pdf/1612.01105.pdf)了解更多信息。 + +## 运行测试脚本时如何输出绘制分割掩膜的图像 + +在测试脚本中,我们提供了`--out`参数来控制是否输出保存预测的分割掩膜图像。您可以运行以下命令输出测试结果: + +```shell +python tools/test.py ${CONFIG_FILE} ${CHECKPOINT_FILE} --out ${OUTPUT_DIR} +``` + +更多用例细节可查阅[文档](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/zh_cn/user_guides/4_train_test.md#%E6%B5%8B%E8%AF%95%E5%B9%B6%E4%BF%9D%E5%AD%98%E5%88%86%E5%89%B2%E7%BB%93%E6%9E%9C),[PR #2712](https://github.com/open-mmlab/mmsegmentation/pull/2712)以及[迁移文档](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/zh_cn/migration/interface.md#%E6%B5%8B%E8%AF%95%E5%90%AF%E5%8A%A8)了解相关说明 + +## 如何处理二值分割任务? + +MMSegmentation 使用 `num_classes` 和 `out_channels` 来控制模型最后一层 `self.conv_seg` 的输出. 更多细节可以参考 [这里](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/models/decode_heads/decode_head.py). + +`num_classes` 应该和数据集本身类别个数一致,当是二值分割时,数据集只有前景和背景两类, 所以 `num_classes` 为 2. `out_channels` 控制模型最后一层的输出的通道数,通常和 `num_classes` 相等, 但当二值分割时候, 可以有两种处理方法, 分别是: + +- 设置 `out_channels=2`, 在训练时以 Cross Entropy Loss 作为损失函数, 在推理时使用 `F.softmax()` 归一化 logits 值, 然后通过 `argmax()` 得到每个像素的预测结果. + +- 设置 `out_channels=1`, 在训练时以 Binary Cross Entropy Loss 作为损失函数, 在推理时使用 `F.sigmoid()` 和 `threshold` 得到预测结果, `threshold` 默认为 0.3. + +对于实现上述两种计算二值分割的方法, 需要在 `decode_head` 和 `auxiliary_head` 的配置里修改. 下面是对样例 [pspnet_unet_s5-d16.py](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/_base_/models/pspnet_unet_s5-d16.py) 做出的对应修改. + +- (1) `num_classes=2`, `out_channels=2` 并在 `CrossEntropyLoss` 里面设置 `use_sigmoid=False`. + +```python +decode_head=dict( + type='PSPHead', + in_channels=64, + in_index=4, + num_classes=2, + out_channels=2, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), +auxiliary_head=dict( + type='FCNHead', + in_channels=128, + in_index=3, + num_classes=2, + out_channels=2, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4)), +``` + +- (2) `num_classes=2`, `out_channels=1` 并在 `CrossEntropyLoss` 里面设置 `use_sigmoid=True`. + +```python +decode_head=dict( + type='PSPHead', + in_channels=64, + in_index=4, + num_classes=2, + out_channels=1, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0)), +auxiliary_head=dict( + type='FCNHead', + in_channels=128, + in_index=3, + num_classes=2, + out_channels=1, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=0.4)), +``` + +## `reduce_zero_label` 的作用 + +数据集中 `reduce_zero_label` 参数类型为布尔类型, 默认为 False, 它的功能是为了忽略数据集 label 0. 具体做法是将 label 0 改为 255, 其余 label 相应编号减 1, 同时 decode head 里将 255 设为 ignore index, 即不参与 loss 计算. +以下是 `reduce_zero_label` 具体实现逻辑: + +```python +if self.reduce_zero_label: + # avoid using underflow conversion + gt_semantic_seg[gt_semantic_seg == 0] = 255 + gt_semantic_seg = gt_semantic_seg - 1 + gt_semantic_seg[gt_semantic_seg == 254] = 255 +``` + +关于您的数据集是否需要使用reduce_zero_label,有以下两类情况: + +- 例如在Potsdam数据集上,有 0-不透水面、1-建筑、2-低矮植被、3-树、4-汽车、5-杂乱,六类。但该数据集提供了两种RGB标签,一种为图像边缘处有黑色像素的标签,另一种是没有黑色边缘的标签。对于有黑色边缘的标签,在 [dataset_converters.py](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/tools/dataset_converters/potsdam.py)中,其将黑色边缘转换为label 0,其余标签分别为 1-不透水面、2-建筑、3-低矮植被、4-树、5-汽车、6-杂乱,那么此时,就应该在数据集[potsdam.py](https://github.com/open-mmlab/mmsegmentation/blob/ff95416c3b5ce8d62b9289f743531398efce534f/mmseg/datasets/potsdam.py#L23)中将`reduce_zero_label=True`。如果使用的是没有黑色边缘的标签,那么mask label中只有0-5,此时就应该使`reduce_zero_label=False`。需要结合您的实际情况来使用。 +- 例如在第0类为background类别的数据集上,如果您最终是需要将背景和您的其余类别分开时,是不需要使用`reduce_zero_label`的,此时在数据集中应该将其设置为`reduce_zero_label=False` + +**注意:** 使用 `reduce_zero_label` 请确认数据集原始类别个数, 如果只有两类, 需要关闭 `reduce_zero_label` 即设置 `reduce_zero_label=False`. From 1ea397509e6498c3a4142438941f067283374ebd Mon Sep 17 00:00:00 2001 From: Miao Zheng <76149310+MeowZheng@users.noreply.github.com> Date: Wed, 22 Mar 2023 14:37:54 +0800 Subject: [PATCH 23/32] [Doc] Refine training tricks documentation (#2755) --- docs/en/advanced_guides/training_tricks.md | 43 ++++++---------- docs/zh_cn/advanced_guides/training_tricks.md | 49 ++++++------------- 2 files changed, 28 insertions(+), 64 deletions(-) diff --git a/docs/en/advanced_guides/training_tricks.md b/docs/en/advanced_guides/training_tricks.md index 8fa89131d5..bc4f72257d 100644 --- a/docs/en/advanced_guides/training_tricks.md +++ b/docs/en/advanced_guides/training_tricks.md @@ -1,4 +1,4 @@ -# \[WIP\] Training Tricks +# Training Tricks MMSegmentation support following training tricks out of box. @@ -9,18 +9,19 @@ In semantic segmentation, some methods make the LR of heads larger than backbone In MMSegmentation, you may add following lines to config to make the LR of heads 10 times of backbone. ```python -optimizer=dict( +optim_wrapper=dict( paramwise_cfg = dict( custom_keys={ 'head': dict(lr_mult=10.)})) ``` With this modification, the LR of any parameter group with `'head'` in name will be multiplied by 10. -You may refer to [MMCV doc](https://mmcv.readthedocs.io/en/latest/api.html#mmcv.runner.DefaultOptimizerConstructor) for further details. +You may refer to [MMEngine documentation](https://mmengine.readthedocs.io/en/latest/tutorials/optim_wrapper.html#advanced-usages) for further details. ## Online Hard Example Mining (OHEM) -We implement pixel sampler [here](https://github.com/open-mmlab/mmsegmentation/tree/master/mmseg/core/seg/sampler) for training sampling. +We implement pixel sampler for training sampling, like OHEM (Online Hard Example Mining), +which is used for remove the "easy" examples for model training. Here is an example config of training PSPNet with OHEM enabled. ```python @@ -58,33 +59,17 @@ For loss calculation, we support multiple losses training concurrently. Here is ```python _base_ = './fcn_unet_s5-d16_64x64_40k_drive.py' model = dict( - decode_head=dict(loss_decode=[dict(type='CrossEntropyLoss', loss_name='loss_ce', loss_weight=1.0), - dict(type='DiceLoss', loss_name='loss_dice', loss_weight=3.0)]), - auxiliary_head=dict(loss_decode=[dict(type='CrossEntropyLoss', loss_name='loss_ce',loss_weight=1.0), - dict(type='DiceLoss', loss_name='loss_dice', loss_weight=3.0)]), - ) + decode_head=dict(loss_decode=[ + dict(type='CrossEntropyLoss', loss_name='loss_ce', loss_weight=1.0), + dict(type='DiceLoss', loss_name='loss_dice', loss_weight=3.0) + ]), + auxiliary_head=dict(loss_decode=[ + dict(type='CrossEntropyLoss', loss_name='loss_ce', loss_weight=1.0), + dict(type='DiceLoss', loss_name='loss_dice', loss_weight=3.0) + ]), +) ``` In this way, `loss_weight` and `loss_name` will be weight and name in training log of corresponding loss, respectively. Note: If you want this loss item to be included into the backward graph, `loss_` must be the prefix of the name. - -## Ignore specified label index in loss calculation - -In default setting, `avg_non_ignore=False` which means each pixel counts for loss calculation although some of them belong to ignore-index labels. - -For loss calculation, we support ignore index of certain label by `avg_non_ignore` and `ignore_index`. In this way, the average loss would only be calculated in non-ignored labels which may achieve better performance, and here is the [reference](https://github.com/open-mmlab/mmsegmentation/pull/1409). Here is an example config of training `unet` on `Cityscapes` dataset: in loss calculation it would ignore label 0 which is background and loss average is only calculated on non-ignore labels: - -```python -_base_ = './unet-s5-d16_fcn_4xb4-160k_cityscapes-512x1024.py' -model = dict( - decode_head=dict( - ignore_index=0, - loss_decode=dict( - type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0, avg_non_ignore=True), - auxiliary_head=dict( - ignore_index=0, - loss_decode=dict( - type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0, avg_non_ignore=True)), - )) -``` diff --git a/docs/zh_cn/advanced_guides/training_tricks.md b/docs/zh_cn/advanced_guides/training_tricks.md index a33c0ea9cf..e5b8e4dae1 100644 --- a/docs/zh_cn/advanced_guides/training_tricks.md +++ b/docs/zh_cn/advanced_guides/training_tricks.md @@ -1,4 +1,4 @@ -# 训练技巧(待更新) +# 训练技巧 MMSegmentation 支持如下训练技巧: @@ -9,17 +9,17 @@ MMSegmentation 支持如下训练技巧: 在 MMSegmentation 里面,您也可以在配置文件里添加如下行来让解码头组件的学习率是主干组件的10倍。 ```python -optimizer=dict( +optim_wrapper=dict( paramwise_cfg = dict( custom_keys={ 'head': dict(lr_mult=10.)})) ``` -通过这种修改,任何被分组到 `'head'` 的参数的学习率都将乘以10。您也可以参照 [MMCV 文档](https://mmcv.readthedocs.io/en/latest/api.html#mmcv.runner.DefaultOptimizerConstructor) 获取更详细的信息。 +通过这种修改,任何被分组到 `'head'` 的参数的学习率都将乘以10。您也可以参照 [MMEngine 文档](https://mmengine.readthedocs.io/zh_CN/latest/tutorials/optim_wrapper.html#id6) 获取更详细的信息。 ## 在线难样本挖掘 (Online Hard Example Mining, OHEM) -对于训练时采样,我们在 [这里](https://github.com/open-mmlab/mmsegmentation/tree/master/mmseg/core/seg/sampler) 做了像素采样器。 +MMSegmentation 中实现了像素采样器,训练时可以对特定像素进行采样,例如 OHEM(Online Hard Example Mining),可以解决样本不平衡问题, 如下例子是使用 PSPNet 训练并采用 OHEM 策略的配置: ```python @@ -58,38 +58,17 @@ model=dict( ```python _base_ = './fcn_unet_s5-d16_64x64_40k_drive.py' model = dict( - decode_head=dict(loss_decode=[dict(type='CrossEntropyLoss', loss_name='loss_ce', loss_weight=1.0), - dict(type='DiceLoss', loss_name='loss_dice', loss_weight=3.0)]), - auxiliary_head=dict(loss_decode=[dict(type='CrossEntropyLoss', loss_name='loss_ce',loss_weight=1.0), - dict(type='DiceLoss', loss_name='loss_dice', loss_weight=3.0)]), - ) + decode_head=dict(loss_decode=[ + dict(type='CrossEntropyLoss', loss_name='loss_ce', loss_weight=1.0), + dict(type='DiceLoss', loss_name='loss_dice', loss_weight=3.0) + ]), + auxiliary_head=dict(loss_decode=[ + dict(type='CrossEntropyLoss', loss_name='loss_ce', loss_weight=1.0), + dict(type='DiceLoss', loss_name='loss_dice', loss_weight=3.0) + ]), +) ``` 通过这种方式,确定训练过程中损失函数的权重 `loss_weight` 和在训练日志里的名字 `loss_name`。 -注意: `loss_name` 的名字必须带有 `loss_` 前缀,这样它才能被包括在反传的图里。 - -## 在损失函数中忽略特定的 label 类别 - -默认设置 `avg_non_ignore=False`, 即每个像素都用来计算损失函数。尽管其中的一些像素属于需要被忽略的类别。 - -对于训练时损失函数的计算,我们目前支持使用 `avg_non_ignore` 和 `ignore_index` 来忽略 label 特定的类别。 这样损失函数将只在非忽略类别像素中求平均值,会获得更好的表现。这里是[相关 PR](https://github.com/open-mmlab/mmsegmentation/pull/1409)。以 `unet` 使用 `Cityscapes` 数据集训练为例, -在计算损失函数时,忽略 label 为0的背景,并且仅在不被忽略的像素上计算均值。配置文件写为: - -```python -_base_ = './fcn_unet_s5-d16_4x4_512x1024_160k_cityscapes.py' -model = dict( - decode_head=dict( - ignore_index=0, - loss_decode=dict( - type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0, avg_non_ignore=True), - auxiliary_head=dict( - ignore_index=0, - loss_decode=dict( - type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0, avg_non_ignore=True)), - )) -``` - -通过这种方式,确定训练过程中损失函数的权重 `loss_weight` 和在训练日志里的名字 `loss_name`。 - -注意: `loss_name` 的名字必须带有 `loss_` 前缀,这样它才能被包括在反传的图里。 +注意: `loss_name` 的名字必须带有 `loss_` 前缀,这样它才能被包括在计算图里。 From 3c26531e699c3977f2f9267f79cd7551de88c244 Mon Sep 17 00:00:00 2001 From: CSH <40987381+csatsurnh@users.noreply.github.com> Date: Thu, 23 Mar 2023 15:42:16 +0800 Subject: [PATCH 24/32] [Doc] Update add_datasets docs (#2745) --- docs/en/advanced_guides/add_datasets.md | 103 +++++++---- docs/zh_cn/advanced_guides/add_datasets.md | 194 ++++++++++----------- 2 files changed, 165 insertions(+), 132 deletions(-) diff --git a/docs/en/advanced_guides/add_datasets.md b/docs/en/advanced_guides/add_datasets.md index f33f3d32c6..fbfa36940c 100644 --- a/docs/en/advanced_guides/add_datasets.md +++ b/docs/en/advanced_guides/add_datasets.md @@ -1,4 +1,62 @@ -# \[WIP\] Add New Datasets +# Add New Datasets + +## Add new custom dataset + +Here we show how to develop a new custom dataset. + +1. Create a new file `mmseg/datasets/example.py` + + ```python + from mmseg.registry import DATASETS + from .basesegdataset import BaseSegDataset + + + @DATASETS.register_module() + class ExampleDataset(BaseSegDataset): + + METAINFO = dict( + classes=('xxx', 'xxx', ...), + palette=[[x, x, x], [x, x, x], ...]) + + def __init__(self, aeg1, arg2): + pass + ``` + +2. Import the module in `mmseg/datasets/__init__.py` + + ```python + from .example import ExampleDataset + ``` + +3. Use it by creating a new new dataset config file `configs/_base_/datasets/example_dataset.py` + + ```python + dataset_type = 'ExampleDataset' + data_root = 'data/example/' + ... + ``` + +4. Add dataset meta information in `mmseg/utils/class_names.py` + + ```python + def example_classes(): + return [ + 'xxx', 'xxx', + ... + ] + + def example_palette(): + return [ + [x, x, x], [x, x, x], + ... + ] + dataset_aliases ={ + 'example': ['example', ...], + ... + } + ``` + +**Note:** If the new dataset does not satisfy the mmseg requirements, a data preprocessing script needs to be prepared in `tools/dataset_converters/` ## Customize datasets by reorganizing data @@ -26,26 +84,12 @@ An example of file structure is as followed. A training pair will consist of the files with same suffix in img_dir/ann_dir. -If `split` argument is given, only part of the files in img_dir/ann_dir will be loaded. -We may specify the prefix of files we would like to be included in the split txt. +Some datasets don't release the test set or don't release the ground truth of the test set, and we cannot evaluate models locally without the ground truth of the test set, so we set the validation set as the default test set in config files. -More specifically, for a split txt like following, +About how to build your own datasets or implement a new dataset class please refer to the [datasets guide](./datasets.md) for more detailed information. -```none -xxx -zzz -``` - -Only -`data/my_dataset/img_dir/train/xxx{img_suffix}`, -`data/my_dataset/img_dir/train/zzz{img_suffix}`, -`data/my_dataset/ann_dir/train/xxx{seg_map_suffix}`, -`data/my_dataset/ann_dir/train/zzz{seg_map_suffix}` will be loaded. - -:::{note} -The annotations are images of shape (H, W), the value pixel should fall in range `[0, num_classes - 1]`. +**Note:** The annotations are images of shape (H, W), the value pixel should fall in range `[0, num_classes - 1]`. You may use `'P'` mode of [pillow](https://pillow.readthedocs.io/en/stable/handbook/concepts.html#palette) to create your annotation image with color. -::: ## Customize datasets by mixing dataset @@ -59,14 +103,14 @@ For example, suppose the original dataset is `Dataset_A`, to repeat it, the conf ```python dataset_A_train = dict( - type='RepeatDataset', - times=N, - dataset=dict( # This is the original config of Dataset_A - type='Dataset_A', - ... - pipeline=train_pipeline - ) + type='RepeatDataset', + times=N, + dataset=dict( # This is the original config of Dataset_A + type='Dataset_A', + ... + pipeline=train_pipeline ) +) ``` ### Concatenate dataset @@ -111,7 +155,9 @@ dataset_B_train = dict( ) ) train_dataloader = dict( - dataset=dict('ConcatDataset', datasets=[dataset_A_train, dataset_B_train])) + dataset=dict( + type='ConcatDataset', + datasets=[dataset_A_train, dataset_B_train])) val_dataloader = dict(dataset=dataset_A_val) test_dataloader = dict(dataset=dataset_A_test) @@ -123,8 +169,7 @@ You can refer base dataset [tutorial](https://mmengine.readthedocs.io/en/latest/ ### Multi-image Mix Dataset We use `MultiImageMixDataset` as a wrapper to mix images from multiple datasets. -`MultiImageMixDataset` can be used by multiple images mixed data augmentation -like mosaic and mixup. +`MultiImageMixDataset` can be used by multiple images mixed data augmentation like mosaic and mixup. An example of using `MultiImageMixDataset` with `Mosaic` data augmentation: @@ -139,8 +184,6 @@ train_pipeline = [ train_dataset = dict( type='MultiImageMixDataset', dataset=dict( - classes=classes, - palette=palette, type=dataset_type, reduce_zero_label=False, img_dir=data_root + "images/train", diff --git a/docs/zh_cn/advanced_guides/add_datasets.md b/docs/zh_cn/advanced_guides/add_datasets.md index 4ea14934ed..22fbf3462f 100644 --- a/docs/zh_cn/advanced_guides/add_datasets.md +++ b/docs/zh_cn/advanced_guides/add_datasets.md @@ -1,4 +1,62 @@ -# 新增自定义数据集(待更新) +# 新增自定义数据集 + +## 新增自定义数据集 + +在这里,我们展示如何构建一个新的数据集。 + +1. 创建一个新文件 `mmseg/datasets/example.py` + + ```python + from mmseg.registry import DATASETS + from .basesegdataset import BaseSegDataset + + + @DATASETS.register_module() + class ExampleDataset(BaseSegDataset): + + METAINFO = dict( + classes=('xxx', 'xxx', ...), + palette=[[x, x, x], [x, x, x], ...]) + + def __init__(self, aeg1, arg2): + pass + ``` + +2. 在 `mmseg/datasets/__init__.py` 中导入模块 + + ```python + from .example import ExampleDataset + ``` + +3. 通过创建一个新的数据集配置文件 `configs/_base_/datasets/example_dataset.py` 来使用它 + + ```python + dataset_type = 'ExampleDataset' + data_root = 'data/example/' + ... + ``` + +4. 在 `mmseg/utils/class_names.py` 中补充数据集元信息 + + ```python + def example_classes(): + return [ + 'xxx', 'xxx', + ... + ] + + def example_palette(): + return [ + [x, x, x], [x, x, x], + ... + ] + dataset_aliases ={ + 'example': ['example', ...], + ... + } + ``` + +**注意:** 如果新数据集不满足 mmseg 的要求,则需要在 `tools/dataset_converters/` 中准备一个数据集预处理脚本 ## 通过重新组织数据来定制数据集 @@ -26,30 +84,17 @@ 一个训练对将由 img_dir/ann_dir 里同样首缀的文件组成。 -如果给定 `split` 参数,只有部分在 img_dir/ann_dir 里的文件会被加载。 -我们可以对被包括在 split 文本里的文件指定前缀。 +有些数据集不会发布测试集或测试集的标注,如果没有测试集的标注,我们就无法在本地进行评估模型,因此我们在配置文件中将验证集设置为默认测试集。 -除此以外,一个 split 文本如下所示: - -```none -xxx -zzz -``` +关于如何构建自己的数据集或实现新的数据集类,请参阅[数据集指南](./datasets.md)以获取更多详细信息。 -只有 - -`data/my_dataset/img_dir/train/xxx{img_suffix}`, -`data/my_dataset/img_dir/train/zzz{img_suffix}`, -`data/my_dataset/ann_dir/train/xxx{seg_map_suffix}`, -`data/my_dataset/ann_dir/train/zzz{seg_map_suffix}` 将被加载。 - -注意:标注是跟图像同样的形状 (H, W),其中的像素值的范围是 `[0, num_classes - 1]`。 +**注意:** 标注是跟图像同样的形状 (H, W),其中的像素值的范围是 `[0, num_classes - 1]`。 您也可以使用 [pillow](https://pillow.readthedocs.io/en/stable/handbook/concepts.html#palette) 的 `'P'` 模式去创建包含颜色的标注。 ## 通过混合数据去定制数据集 MMSegmentation 同样支持混合数据集去训练。 -当前它支持拼接 (concat), 重复 (repeat) 和多图混合 (multi-image mix)数据集。 +当前它支持拼接 (concat), 重复 (repeat) 和多图混合 (multi-image mix) 数据集。 ### 重复数据集 @@ -58,79 +103,29 @@ MMSegmentation 同样支持混合数据集去训练。 ```python dataset_A_train = dict( - type='RepeatDataset', - times=N, - dataset=dict( # 这是 Dataset_A 数据集的原始配置 - type='Dataset_A', - ... - pipeline=train_pipeline - ) + type='RepeatDataset', + times=N, + dataset=dict( # 这是 Dataset_A 数据集的原始配置 + type='Dataset_A', + ... + pipeline=train_pipeline ) +) ``` ### 拼接数据集 -有2种方式去拼接数据集。 - -1. 如果您想拼接的数据集是同样的类型,但有不同的标注文件, - 您可以按如下操作去拼接数据集的配置文件: - - 1. 您也许可以拼接两个标注文件夹 `ann_dir` - - ```python - dataset_A_train = dict( - type='Dataset_A', - img_dir = 'img_dir', - ann_dir = ['anno_dir_1', 'anno_dir_2'], - pipeline=train_pipeline - ) - ``` - - 2. 您也可以去拼接两个 `split` 文件列表 - - ```python - dataset_A_train = dict( - type='Dataset_A', - img_dir = 'img_dir', - ann_dir = 'anno_dir', - split = ['split_1.txt', 'split_2.txt'], - pipeline=train_pipeline - ) - ``` +如果要拼接不同的数据集,可以按如下方式连接数据集配置。 - 3. 您也可以同时拼接 `ann_dir` 文件夹和 `split` 文件列表 - - ```python - dataset_A_train = dict( - type='Dataset_A', - img_dir = 'img_dir', - ann_dir = ['anno_dir_1', 'anno_dir_2'], - split = ['split_1.txt', 'split_2.txt'], - pipeline=train_pipeline - ) - ``` - - 在这样的情况下, `ann_dir_1` 和 `ann_dir_2` 分别对应于 `split_1.txt` 和 `split_2.txt` - -2. 如果您想拼接不同的数据集,您可以如下去拼接数据集的配置文件: - - ```python - dataset_A_train = dict() - dataset_B_train = dict() - - data = dict( - imgs_per_gpu=2, - workers_per_gpu=2, - train = [ - dataset_A_train, - dataset_B_train - ], - val = dataset_A_val, - test = dataset_A_test - ) - ``` +```python +dataset_A_train = dict() +dataset_B_train = dict() +concatenate_dataset = dict( + type='ConcatDataset', + datasets=[dataset_A_train, dataset_B_train]) +``` -一个更复杂的例子如下:分别重复 `Dataset_A` 和 `Dataset_B` N 次和 M 次,然后再去拼接重复后的数据集 +下面是一个更复杂的示例,它分别重复 `Dataset_A` 和 `Dataset_B` N 次和 M 次,然后连接重复的数据集。 ```python dataset_A_train = dict( @@ -159,41 +154,36 @@ dataset_B_train = dict( pipeline=train_pipeline ) ) -data = dict( - imgs_per_gpu=2, - workers_per_gpu=2, - train = [ - dataset_A_train, - dataset_B_train - ], - val = dataset_A_val, - test = dataset_A_test -) +train_dataloader = dict( + dataset=dict( + type='ConcatDataset', + datasets=[dataset_A_train, dataset_B_train])) + +val_dataloader = dict(dataset=dataset_A_val) +test_dataloader = dict(dataset=dataset_A_test) ``` +您可以参考 mmengine 的基础数据集[教程](https://mmengine.readthedocs.io/zh_CN/latest/advanced_tutorials/basedataset.html)以了解更多详细信息 + ### 多图混合集 -我们使用 `MultiImageMixDataset` 作为包装(wrapper)去混合多个数据集的图片。 -`MultiImageMixDataset`可以被类似mosaic和mixup的多图混合数据増广使用。 +我们使用 `MultiImageMixDataset` 作为包装(wrapper)去混合多个数据集的图片。 +`MultiImageMixDataset`可以被类似 mosaic 和 mixup 的多图混合数据増广使用。 -`MultiImageMixDataset`与`Mosaic`数据増广一起使用的例子: +`MultiImageMixDataset` 与 `Mosaic` 数据増广一起使用的例子: ```python train_pipeline = [ dict(type='RandomMosaic', prob=1), dict(type='Resize', img_scale=(1024, 512), keep_ratio=True), dict(type='RandomFlip', prob=0.5), - dict(type='Normalize', **img_norm_cfg), - dict(type='DefaultFormatBundle'), - dict(type='Collect', keys=['img', 'gt_semantic_seg']), + dict(type='PackSegInputs') ] train_dataset = dict( type='MultiImageMixDataset', dataset=dict( - classes=classes, - palette=palette, type=dataset_type, reduce_zero_label=False, img_dir=data_root + "images/train", From 1dd65813f996c910a73c61cf01c3e474a0bc1a03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E6=98=95=E8=BE=B0?= Date: Thu, 30 Mar 2023 14:19:13 +0800 Subject: [PATCH 25/32] [Doc] Add English version document of the Training Engine (#2797) --- docs/en/advanced_guides/engine.md | 280 ++++++++++++++++++++++++++- docs/zh_cn/advanced_guides/engine.md | 12 +- 2 files changed, 286 insertions(+), 6 deletions(-) diff --git a/docs/en/advanced_guides/engine.md b/docs/en/advanced_guides/engine.md index eaa55b0c8c..0ed08fa4b5 100644 --- a/docs/en/advanced_guides/engine.md +++ b/docs/en/advanced_guides/engine.md @@ -1 +1,279 @@ -# Engine +# Training Engine + +MMEngine defined some [basic loop controllers](https://github.com/open-mmlab/mmengine/blob/main/mmengine/runner/loops.py) such as epoch-based training loop (`EpochBasedTrainLoop`), iteration-based training loop (`IterBasedTrainLoop`), standard validation loop (`ValLoop`), and standard testing loop (`TestLoop`). + +OpenMMLab's algorithm libraries like MMSegmentation abstract model training, testing, and inference as `Runner` to handle. Users can use the default `Runner` in MMEngine directly or modify the `Runner` to meet customized needs. This document mainly introduces how users can configure existing running settings, hooks, and optimizers' basic concepts and usage methods. + +## Configuring Runtime Settings + +### Configuring Training Iterations + +Loop controllers refer to the execution process during training, validation, and testing. `train_cfg`, `val_cfg`, and `test_cfg` are used to build these processes in the configuration file. MMSegmentation sets commonly used training iterations in `train_cfg` under the `configs/_base_/schedules` folder. +For example, to train for 80,000 iterations using the iteration-based training loop (`IterBasedTrainLoop`) and perform validation every 8,000 iterations, you can set it as follows: + +```python +train_cfg = dict(type='IterBasedTrainLoop', max_iters=80000, val_interval=8000) +``` + +### Configuring Training Optimizers + +Here's an example of a SGD optimizer: + +```python +optim_wrapper = dict( + type='OptimWrapper', + optimizer=dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0005), + clip_grad=None) +``` + +OpenMMLab supports all optimizers in PyTorch. For more details, please refer to the [MMEngine optimizer documentation](https://github.com/open-mmlab/mmengine/blob/main/docs/en/tutorials/optim_wrapper.md). + +It is worth emphasizing that `optim_wrapper` is a variable of `runner`, so when configuring the optimizer, the field to configure is the `optim_wrapper` field. For more information on using optimizers, see the [Optimizer](#Optimizer) section below. + +### Configuring Training Parameter Schedulers + +Before configuring the training parameter scheduler, it is recommended to first understand the basic concepts of parameter schedulers in the [MMEngine documentation](https://github.com/open-mmlab/mmengine/blob/main/docs/en/tutorials/param_scheduler.md). + +Here's an example of a parameter scheduler. During training, a linearly changing learning rate strategy is used for warm-up in the first 1,000 iterations. After the first 1,000 iterations until the 16,000 iterations in the end, the default polynomial learning rate decay is used: + +```python +param_scheduler = [ + dict(type='LinearLR', by_epoch=False, start_factor=0.1, begin=0, end=1000), + dict( + type='PolyLR', + eta_min=1e-4, + power=0.9, + begin=1000, + end=160000, + by_epoch=False, + ) +] +``` + +Note: When modifying the `max_iters` in `train_cfg`, make sure the parameters in the parameter scheduler `param_scheduler` are also modified accordingly. + +## Hook + +### Introduction + +OpenMMLab abstracts the model training and testing process as `Runner`. Inserting hooks can implement the corresponding functionality needed at different training and testing stages (such as "before and after each training iter", "before and after each validation iter", etc.) in `Runner`. For more introduction on hook mechanisms, please refer to [here](https://www.calltutors.com/blog/what-is-hook). + +Hooks used in `Runner` are divided into two categories: + +- Default hooks: + +They implement essential functions during training and are defined in the configuration file by `default_hooks` and passed to `Runner`. `Runner` registers them through the [`register_default_hooks`](https://github.com/open-mmlab/mmengine/blob/main/mmengine/runner/runner.py#L1780) method. + +Hooks have corresponding priorities; the higher the priority, the earlier the runner calls them. If the priorities are the same, the calling order is consistent with the hook registration order. + +It is not recommended for users to modify the default hook priorities. Please refer to the [MMEngine hooks documentation](https://github.com/open-mmlab/mmengine/blob/main/docs/en/tutorials/hook.md) to understand the hook priority definitions. + +The following are the default hooks used in MMSegmentation: + +| Hook | Function | Priority | +| :-----------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------: | :---------------: | +| [IterTimerHook](https://github.com/open-mmlab/mmengine/blob/main/mmengine/hooks/iter_timer_hook.py) | Record the time spent on each iteration. | NORMAL (50) | +| [LoggerHook](https://github.com/open-mmlab/mmengine/blob/main/mmengine/hooks/logger_hook.py) | Collect log records from different components in `Runner` and output them to terminal, JSON file, tensorboard, wandb, etc. | BELOW_NORMAL (60) | +| [ParamSchedulerHook](https://github.com/open-mmlab/mmengine/blob/main/mmengine/hooks/param_scheduler_hook.py) | Update some hyperparameters in the optimizer, such as learning rate momentum. | LOW (70) | +| [CheckpointHook](https://github.com/open-mmlab/mmengine/blob/main/mmengine/hooks/checkpoint_hook.py) | Regularly save checkpoint files. | VERY_LOW (90) | +| [DistSamplerSeedHook](https://github.com/open-mmlab/mmengine/blob/main/mmengine/hooks/sampler_seed_hook.py) | Ensure the distributed sampler shuffle is enabled. | NORMAL (50) | +| [SegVisualizationHook](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/visualization/local_visualizer.py) | Visualize prediction results during validation and testing. | NORMAL (50) | + +MMSegmentation registers some hooks with essential training functions in `default_hooks`: + +```python +default_hooks = dict( + timer=dict(type='IterTimerHook'), + logger=dict(type='LoggerHook', interval=50, log_metric_by_epoch=False), + param_scheduler=dict(type='ParamSchedulerHook'), + checkpoint=dict(type='CheckpointHook', by_epoch=False, interval=32000), + sampler_seed=dict(type='DistSamplerSeedHook'), + visualization=dict(type='SegVisualizationHook')) +``` + +All the default hooks mentioned above, except for `SegVisualizationHook`, are implemented in MMEngine. The `SegVisualizationHook` is a hook implemented in MMSegmentation, which will be introduced later. + +- Modifying default hooks + +We will use the `logger` and `checkpoint` in `default_hooks` as examples to demonstrate how to modify the default hooks in `default_hooks`. + +(1) Model saving configuration + +`default_hooks` uses the `checkpoint` field to initialize the [model saving hook (CheckpointHook)](https://github.com/open-mmlab/mmengine/blob/main/mmengine/hooks/checkpoint_hook.py#L19). + +```python +checkpoint = dict(type='CheckpointHook', interval=1) +``` + +Users can set `max_keep_ckpts` to save only a small number of checkpoints or use `save_optimizer` to determine whether to save optimizer information. More details on related parameters can be found [here](https://mmengine.readthedocs.io/en/latest/api/generated/mmengine.hooks.CheckpointHook.html#checkpointhook). + +(2) Logging configuration + +The `LoggerHook` is used to collect log information from different components in `Runner` and write it to terminal, JSON files, tensorboard, wandb, etc. + +```python +logger=dict(type='LoggerHook', interval=10) +``` + +In the latest 1.x version of MMSegmentation, some logger hooks (LoggerHook) such as `TextLoggerHook`, `WandbLoggerHook`, and `TensorboardLoggerHook` will no longer be used. Instead, MMEngine uses `LogProcessor` to handle the information processed by the aforementioned hooks, which are now in [`MessageHub`](https://github.com/open-mmlab/mmengine/blob/main/mmengine/logging/message_hub.py#L17), [`WandbVisBackend`](https://github.com/open-mmlab/mmengine/blob/main/mmengine/visualization/vis_backend.py#L324), and [`TensorboardVisBackend`](https://github.com/open-mmlab/mmengine/blob/main/mmengine/visualization/vis_backend.py#L472). + +Detailed usage is as follows, configuring the visualizer and specifying the visualization backend at the same time, here using Tensorboard as the visualizer's backend: + +```python +# TensorboardVisBackend +visualizer = dict( + type='SegLocalVisualizer', vis_backends=[dict(type='TensorboardVisBackend')], name='visualizer') +``` + +For more related usage, please refer to [MMEngine Visualization Backend User Tutorial](https://github.com/open-mmlab/mmengine/blob/main/docs/en/advanced_tutorials/visualization.md). + +- Custom hooks + +Custom hooks are defined in the configuration through `custom_hooks`, and `Runner` registers them using the [`register_custom_hooks`](https://github.com/open-mmlab/mmengine/blob/main/mmengine/runner/runner.py#L1820) method. + +The priority of custom hooks needs to be set in the configuration file; if not, it will be set to `NORMAL` by default. The following are some custom hooks implemented in MMEngine: + +| Hook | Usage | +| :----------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------: | +| [EMAHook](https://github.com/open-mmlab/mmengine/blob/main/mmengine/hooks/ema_hook.py) | Use Exponential Moving Average (EMA) during model training. | +| [EmptyCacheHook](https://github.com/open-mmlab/mmengine/blob/main/mmengine/hooks/empty_cache_hook.py) | Release all GPU memory not occupied by the cache during training | +| [SyncBuffersHook](https://github.com/open-mmlab/mmengine/blob/main/mmengine/hooks/sync_buffer_hook.py) | Synchronize the parameters in the model buffer, such as `running_mean` and `running_var` in BN, at the end of each training epoch. | + +The following is a use case for `EMAHook`, where the config file includes the configuration of the implemented custom hooks as members of the `custom_hooks` list. + +```python +custom_hooks = [ + dict(type='EMAHook', start_iters=500, priority='NORMAL') +] +``` + +### SegVisualizationHook + +MMSegmentation implemented [`SegVisualizationHook`](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/engine/hooks/visualization_hook.py#L17), which is used to visualize prediction results during validation and testing. +`SegVisualizationHook` overrides the `_after_iter` method in the base class `Hook`. During validation or testing, it calls the `add_datasample` method of `visualizer` to draw semantic segmentation results according to the specified iteration interval. The specific implementation is as follows: + +```python +... +@HOOKS.register_module() +class SegVisualizationHook(Hook): +... + def _after_iter(self, + runner: Runner, + batch_idx: int, + data_batch: dict, + outputs: Sequence[SegDataSample], + mode: str = 'val') -> None: +... + # If it's a training phase or self.draw is False, then skip it + if self.draw is False or mode == 'train': + return +... + if self.every_n_inner_iters(batch_idx, self.interval): + for output in outputs: + img_path = output.img_path + img_bytes = self.file_client.get(img_path) + img = mmcv.imfrombytes(img_bytes, channel_order='rgb') + window_name = f'{mode}_{osp.basename(img_path)}' + + self._visualizer.add_datasample( + window_name, + img, + data_sample=output, + show=self.show, + wait_time=self.wait_time, + step=runner.iter) + +``` + +For more details about visualization, you can check [here](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/en/user_guides/visualization.md). + +## Optimizer + +In the previous configuration and runtime settings, we provided a simple example of configuring the training optimizer. This section will further detailly introduce how to configure optimizers in MMSegmentation. + +## Optimizer Wrapper + +OpenMMLab 2.0 introduces an optimizer wrapper that supports different training strategies, including mixed-precision training, gradient accumulation, and gradient clipping. Users can choose the appropriate training strategy according to their needs. The optimizer wrapper also defines a standard parameter update process, allowing users to switch between different training strategies within the same code. For more information, please refer to the [MMEngine optimizer wrapper documentation](https://github.com/open-mmlab/mmengine/blob/main/docs/en/tutorials/optim_wrapper.md). + +Here are some common usage methods in MMSegmentation: + +#### Configuring PyTorch Supported Optimizers + +OpenMMLab 2.0 supports all native PyTorch optimizers, as referenced [here](https://github.com/open-mmlab/mmengine/blob/main/docs/en/tutorials/optim_wrapper.md). + +To set the optimizer used by the `Runner` during training in the configuration file, you need to define `optim_wrapper` instead of `optimizer`. Below is an example of configuring an optimizer during training: + +```python +optim_wrapper = dict( + type='OptimWrapper', + optimizer=dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0005), + clip_grad=None) +``` + +#### Configuring Gradient Clipping + +When the model training requires gradient clipping, you can configure it as shown in the following example: + +```python +optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) +optim_wrapper = dict(type='OptimWrapper', optimizer=optimizer, + clip_grad=dict(max_norm=0.01, norm_type=2)) +``` + +Here, `max_norm` refers to the maximum value of the gradient after clipping, and `norm_type` refers to the norm used when clipping the gradient. Related methods can be found in [torch.nn.utils.clip_grad_norm\_](https://pytorch.org/docs/stable/generated/torch.nn.utils.clip_grad_norm_.html). + +#### Configuring Mixed Precision Training + +When mixed precision training is needed to reduce memory usage, you can use `AmpOptimWrapper`. The specific configuration is as follows: + +```python +optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) +optim_wrapper = dict(type='AmpOptimWrapper', optimizer=optimizer) +``` + +The default setting for `loss_scale` in [`AmpOptimWrapper`](https://github.com/open-mmlab/mmengine/blob/main/mmengine/optim/optimizer/amp_optimizer_wrapper.py#L20) is `dynamic`. + +#### Configuring Hyperparameters for Different Layers of the Model Network + +In model training, if you want to set different optimization strategies for different parameters in the optimizer, such as setting different learning rates, weight decay, and other hyperparameters, you can achieve this by setting `paramwise_cfg` in the `optim_wrapper` of the configuration file. + +The following config file uses the [ViT `optim_wrapper`](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/vit/vit_vit-b16-ln_mln_upernet_8xb2-160k_ade20k-512x512.py#L15-L27) as an example to introduce the use of `paramwise_cfg` parameters. During training, the weight decay parameter coefficients for the `pos_embed`, `mask_token`, and `norm` modules are set to 0. That is, during training, the weight decay for these modules will be changed to `weight_decay * decay_mult`=0. + +```python +optimizer = dict( + type='AdamW', lr=0.00006, betas=(0.9, 0.999), weight_decay=0.01) +optim_wrapper = dict( + type='OptimWrapper', + optimizer=optimizer, + paramwise_cfg=dict( + custom_keys={ + 'pos_embed': dict(decay_mult=0.), + 'cls_token': dict(decay_mult=0.), + 'norm': dict(decay_mult=0.) + })) +``` + +Here, `decay_mult` refers to the weight decay coefficient for the corresponding parameters. For more information on the usage of `paramwise_cfg`, please refer to the [MMEngine optimizer wrapper documentation](https://github.com/open-mmlab/mmengine/blob/main/docs/en/tutorials/optim_wrapper.md). + +### Optimizer Wrapper Constructor + +The default optimizer wrapper constructor [`DefaultOptimWrapperConstructor`](https://github.com/open-mmlab/mmengine/blob/main/mmengine/optim/optimizer/default_constructor.py#L19) builds the optimizer used in training based on the input `optim_wrapper` and `paramwise_cfg` defined in the `optim_wrapper`. When the functionality of [`DefaultOptimWrapperConstructor`](https://github.com/open-mmlab/mmengine/blob/main/mmengine/optim/optimizer/default_constructor.py#L19) does not meet the requirements, you can customize the optimizer wrapper constructor to implement the configuration of hyperparameters. + +MMSegmentation has implemented the [`LearningRateDecayOptimizerConstructor`](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/engine/optimizers/layer_decay_optimizer_constructor.py#L104), which can decay the learning rate of model parameters in the backbone networks of ConvNeXt, BEiT, and MAE models during training according to the defined decay ratio (`decay_rate`). The configuration in the configuration file is as follows: + +```python +optim_wrapper = dict( + _delete_=True, + type='AmpOptimWrapper', + optimizer=dict( + type='AdamW', lr=0.0001, betas=(0.9, 0.999), weight_decay=0.05), + paramwise_cfg={ + 'decay_rate': 0.9, + 'decay_type': 'stage_wise', + 'num_layers': 12 + }, + constructor='LearningRateDecayOptimizerConstructor', + loss_scale='dynamic') +``` + +The purpose of `_delete_=True` is to ignore the inherited configuration in the OpenMMLab Config. In this code snippet, the inherited `optim_wrapper` configuration is ignored. For more information on `_delete_` fields, please refer to the [MMEngine documentation](https://github.com/open-mmlab/mmengine/blob/main/docs/en/advanced_tutorials/config.md#delete-key-in-dict). diff --git a/docs/zh_cn/advanced_guides/engine.md b/docs/zh_cn/advanced_guides/engine.md index a5746fcec8..7920ecfd87 100644 --- a/docs/zh_cn/advanced_guides/engine.md +++ b/docs/zh_cn/advanced_guides/engine.md @@ -61,7 +61,7 @@ OpenMMLab 将模型训练和测试过程抽象为 `Runner`, 插入钩子可以 - 默认钩子 (default hooks) -它们实现了训练时所必需的功能, 在配置文件中用 `default_hooks` 定义传给 `Runner`, `Runner` 通过 [`register_default_hooks`](https://github.com/open-mmlab/mmengine/blob/090104df21acd05a8aadae5a0d743a7da3314f6f/mmengine/runner/runner.py#L1780) 方法注册. +它们实现了训练时所必需的功能, 在配置文件中用 `default_hooks` 定义传给 `Runner`, `Runner` 通过 [`register_default_hooks`](https://github.com/open-mmlab/mmengine/blob/main/mmengine/runner/runner.py#L1780) 方法注册. 钩子有对应的优先级, 优先级越高, 越早被执行器调用. 如果优先级一样, 被调用的顺序和钩子注册的顺序一致. 不建议用户修改默认钩子的优先级, 可以参考 [mmengine hooks 文档](https://github.com/open-mmlab/mmengine/blob/main/docs/zh_cn/tutorials/hook.md) 了解钩子优先级的定义. 下面是 MMSegmentation 中所用到的默认钩子: @@ -94,6 +94,7 @@ default_hooks = dict( 以 `default_hooks` 里面的 `logger` 和 `checkpoint` 为例, 我们来介绍如何修改 `default_hooks` 中默认的钩子. (1) 模型保存配置 + `default_hooks` 使用 `checkpoint` 字段来初始化[模型保存钩子 (CheckpointHook)](https://github.com/open-mmlab/mmengine/blob/main/mmengine/hooks/checkpoint_hook.py#L19). ```python @@ -104,6 +105,7 @@ checkpoint = dict(type='CheckpointHook', interval=1) 更多相关参数的细节可以参考[这里](https://mmengine.readthedocs.io/zh_CN/latest/api/generated/mmengine.hooks.CheckpointHook.html#checkpointhook). (2) 日志配置 + `日志钩子 (LoggerHook)` 被用来收集 `执行器 (Runner)` 里面不同组件的日志信息然后写入终端, JSON 文件, tensorboard 和 wandb 等地方. ```python @@ -126,7 +128,7 @@ visualizer = dict( - 自定义钩子 (custom hooks) -自定义钩子在配置通过 `custom_hooks` 定义, `Runner` 通过 [`register_custom_hooks`](https://github.com/open-mmlab/mmengine/blob/090104df21acd05a8aadae5a0d743a7da3314f6f/mmengine/runner/runner.py#L1852) 方法注册. +自定义钩子在配置通过 `custom_hooks` 定义, `Runner` 通过 [`register_custom_hooks`](https://github.com/open-mmlab/mmengine/blob/main/mmengine/runner/runner.py#L1820) 方法注册. 自定义钩子优先级需要在配置文件里设置, 如果没有设置, 则会被默认设置为 `NORMAL`. 下面是部分 MMEngine 中实现的自定义钩子: | 钩子 | 用法 | @@ -181,7 +183,7 @@ class SegVisualizationHook(Hook): ``` -关于可视化更多的细节可以查看[这里](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/en/user_guides/visualization.md). +关于可视化更多的细节可以查看[这里](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/zh_cn/user_guides/visualization.md). ## 优化器 @@ -257,9 +259,9 @@ optim_wrapper = dict( ### 优化器封装构造器 -默认的优化器封装构造器 [`DefaultOptimWrapperConstructor`](https://github.com/open-mmlab/mmengine/blob/376251961da47ea8254ab808ae5c51e1430f18dc/mmengine/optim/optimizer/default_constructor.py#L19) 根据输入的 `optim_wrapper` 和 `optim_wrapper` 中定义的 `paramwise_cfg` 来构建训练中使用的优化器. 当 [`DefaultOptimWrapperConstructor`](https://github.com/open-mmlab/mmengine/blob/376251961da47ea8254ab808ae5c51e1430f18dc/mmengine/optim/optimizer/default_constructor.py#L19) 功能不能满足需求时, 可以自定义优化器封装构造器来实现超参数的配置. +默认的优化器封装构造器 [`DefaultOptimWrapperConstructor`](https://github.com/open-mmlab/mmengine/blob/main/mmengine/optim/optimizer/default_constructor.py#L19) 根据输入的 `optim_wrapper` 和 `optim_wrapper` 中定义的 `paramwise_cfg` 来构建训练中使用的优化器. 当 [`DefaultOptimWrapperConstructor`](https://github.com/open-mmlab/mmengine/blob/main/mmengine/optim/optimizer/default_constructor.py#L19) 功能不能满足需求时, 可以自定义优化器封装构造器来实现超参数的配置. -MMSegmentation 中的实现了 [`LearningRateDecayOptimizerConstructor`](https://github.com/open-mmlab/mmsegmentation/blob/b21df463d47447f33c28d9a4f46136ad64d34a40/mmseg/engine/optimizers/layer_decay_optimizer_constructor.py#L104), 可以对以 ConvNeXt, BEiT 和 MAE 为骨干网络的模型训练时, 骨干网络的模型参数的学习率按照定义的衰减比例(`decay_rate`)逐层递减, 在配置文件中的配置如下: +MMSegmentation 中的实现了 [`LearningRateDecayOptimizerConstructor`](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/engine/optimizers/layer_decay_optimizer_constructor.py#L104), 可以对以 ConvNeXt, BEiT 和 MAE 为骨干网络的模型训练时, 骨干网络的模型参数的学习率按照定义的衰减比例(`decay_rate`)逐层递减, 在配置文件中的配置如下: ```python optim_wrapper = dict( From 871e7ac1ff6bc5118b21c2d26507232094a98c41 Mon Sep 17 00:00:00 2001 From: Tianlong Ai <50650583+AI-Tianlong@users.noreply.github.com> Date: Thu, 30 Mar 2023 14:50:13 +0800 Subject: [PATCH 26/32] [Doc] Fix invalid links and standardize Chinese and English punctuation marks at zh_CN faq.md (#2790) --- docs/zh_cn/notes/faq.md | 44 ++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/docs/zh_cn/notes/faq.md b/docs/zh_cn/notes/faq.md index d90329cf22..6c5264c378 100644 --- a/docs/zh_cn/notes/faq.md +++ b/docs/zh_cn/notes/faq.md @@ -1,10 +1,10 @@ # 常见问题解答(FAQ) -我们在这里列出了使用时的一些常见问题及其相应的解决方案。 如果您发现有一些问题被遗漏,请随时提 PR 丰富这个列表。 如果您无法在此获得帮助,请使用 [issue模板](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/.github/ISSUE_TEMPLATE/error-report.md/)创建问题,但是请在模板中填写所有必填信息,这有助于我们更快定位问题。 +我们在这里列出了使用时的一些常见问题及其相应的解决方案。 如果您发现有一些问题被遗漏,请随时提 PR 丰富这个列表。 如果您无法在此获得帮助,请使用 [issue 模板](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/.github/ISSUE_TEMPLATE/error-report.md/)创建问题,但是请在模板中填写所有必填信息,这有助于我们更快定位问题。 ## 安装 -兼容的MMSegmentation和MMCV版本如下。请安装正确版本的MMCV以避免安装问题。 +兼容的 MMSegmentation 和 MMCV 版本如下。请安装正确版本的 MMCV 以避免安装问题。 | MMSegmentation version | MMCV version | MMEngine version | MMClassification (optional) version | MMDetection (optional) version | | :--------------------: | :----------------------------: | :---------------: | :---------------------------------: | :----------------------------: | @@ -18,44 +18,44 @@ | 1.0.0rc1 | mmcv >= 2.0.0rc1, \<=2.0.0rc3> | MMEngine >= 0.1.0 | mmcls>=1.0.0rc0 | Not required | | 1.0.0rc0 | mmcv >= 2.0.0rc1, \<=2.0.0rc3> | MMEngine >= 0.1.0 | mmcls>=1.0.0rc0 | Not required | -如果您已经安装了版本不合适的 mmcv,请先运行`pip uninstall mmcv`卸载已安装的 mmcv,如您先前安装的为 mmcv-full(存在于 OpenMMLab 1.x),请运行`pip uninstall mmcv-full`进行卸载。 +如果您已经安装了版本不合适的 mmcv,请先运行`pip uninstall mmcv`卸载已安装的 mmcv,如您先前安装的为 mmcv-full(存在于 OpenMMLab 1.x),请运行`pip uninstall mmcv-full`进行卸载。 -- 如出现"No module named 'mmcv'"; - 1. 使用`pip uninstall mmcv`卸载环境中现有的mmcv。 - 2. 按照[安装说明](../get_started#best-practices)安装对应的mmcv。 +- 如出现 "No module named 'mmcv'" + 1. 使用`pip uninstall mmcv`卸载环境中现有的 mmcv + 2. 按照[安装说明](../get_started.md)安装对应的 mmcv ## 如何获知模型训练时需要的显卡数量 -- 看模型的config文件的命名。可以参考[学习配置文件](../user_guides/1_config.md)中的`配置文件命名风格`部分。比如,对于名字为`segformer_mit-b0_8xb1-160k_cityscapes-1024x1024.py`的config文件,`8xb1`代表训练其对应的模型需要的卡数为8,每张卡中的batch size为1。 -- 看模型的log文件。点开该模型的log文件,并在其中搜索`nGPU`,在`nGPU`后的数字个数即训练时所需的卡数。比如,在log文件中搜索`nGPU`得到`nGPU 0,1,2,3,4,5,6,7`的记录,则说明训练该模型需要使用八张卡。 +- 看模型的 config 文件命名。可以参考[了解配置文件](../user_guides/1_config.md)中的`配置文件命名风格`部分。比如,对于名字为`segformer_mit-b0_8xb1-160k_cityscapes-1024x1024.py`的 config 文件,`8xb1`代表训练其对应的模型需要的卡数为 8,每张卡中的 batch size 为 1。 +- 看模型的 log 文件。点开该模型的 log 文件,并在其中搜索`nGPU`,在`nGPU`后的数字个数即训练时所需的卡数。比如,在 log 文件中搜索`nGPU`得到`nGPU 0,1,2,3,4,5,6,7`的记录,则说明训练该模型需要使用八张卡。 ## auxiliary head 是什么 -简单来说,这是一个提高准确率的深度监督技术。在训练阶段,`decode_head` 用于输出语义分割的结果,`auxiliary_head` 只是增加了一个辅助损失,其产生的分割结果对你的模型结果没有影响,仅在在训练中起作用。您可以阅读这篇[论文](https://arxiv.org/pdf/1612.01105.pdf)了解更多信息。 +简单来说,这是一个提高准确率的深度监督技术。在训练阶段,`decode_head`用于输出语义分割的结果,`auxiliary_head` 只是增加了一个辅助损失,其产生的分割结果对你的模型结果没有影响,仅在在训练中起作用。您可以阅读这篇[论文](https://arxiv.org/pdf/1612.01105.pdf)了解更多信息。 ## 运行测试脚本时如何输出绘制分割掩膜的图像 -在测试脚本中,我们提供了`--out`参数来控制是否输出保存预测的分割掩膜图像。您可以运行以下命令输出测试结果: +在测试脚本中,我们提供了`--out`参数来控制是否输出保存预测的分割掩膜图像。您可以运行以下命令输出测试结果: ```shell python tools/test.py ${CONFIG_FILE} ${CHECKPOINT_FILE} --out ${OUTPUT_DIR} ``` -更多用例细节可查阅[文档](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/zh_cn/user_guides/4_train_test.md#%E6%B5%8B%E8%AF%95%E5%B9%B6%E4%BF%9D%E5%AD%98%E5%88%86%E5%89%B2%E7%BB%93%E6%9E%9C),[PR #2712](https://github.com/open-mmlab/mmsegmentation/pull/2712)以及[迁移文档](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/zh_cn/migration/interface.md#%E6%B5%8B%E8%AF%95%E5%90%AF%E5%8A%A8)了解相关说明 +更多用例细节可查阅[文档](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/zh_cn/user_guides/4_train_test.md#%E6%B5%8B%E8%AF%95%E5%B9%B6%E4%BF%9D%E5%AD%98%E5%88%86%E5%89%B2%E7%BB%93%E6%9E%9C),[PR #2712](https://github.com/open-mmlab/mmsegmentation/pull/2712) 以及[迁移文档](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/zh_cn/migration/interface.md#%E6%B5%8B%E8%AF%95%E5%90%AF%E5%8A%A8)了解相关说明。 ## 如何处理二值分割任务? -MMSegmentation 使用 `num_classes` 和 `out_channels` 来控制模型最后一层 `self.conv_seg` 的输出. 更多细节可以参考 [这里](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/models/decode_heads/decode_head.py). +MMSegmentation 使用 `num_classes` 和 `out_channels` 来控制模型最后一层 `self.conv_seg` 的输出。更多细节可以参考 [这里](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/models/decode_heads/decode_head.py)。 -`num_classes` 应该和数据集本身类别个数一致,当是二值分割时,数据集只有前景和背景两类, 所以 `num_classes` 为 2. `out_channels` 控制模型最后一层的输出的通道数,通常和 `num_classes` 相等, 但当二值分割时候, 可以有两种处理方法, 分别是: +`num_classes` 应该和数据集本身类别个数一致,当是二值分割时,数据集只有前景和背景两类,所以 `num_classes` 为 2. `out_channels` 控制模型最后一层的输出的通道数,通常和 `num_classes` 相等,但当二值分割时候,可以有两种处理方法, 分别是: -- 设置 `out_channels=2`, 在训练时以 Cross Entropy Loss 作为损失函数, 在推理时使用 `F.softmax()` 归一化 logits 值, 然后通过 `argmax()` 得到每个像素的预测结果. +- 设置 `out_channels=2`,在训练时以 Cross Entropy Loss 作为损失函数,在推理时使用 `F.softmax()` 归一化 logits 值,然后通过 `argmax()` 得到每个像素的预测结果。 -- 设置 `out_channels=1`, 在训练时以 Binary Cross Entropy Loss 作为损失函数, 在推理时使用 `F.sigmoid()` 和 `threshold` 得到预测结果, `threshold` 默认为 0.3. +- 设置 `out_channels=1`,在训练时以 Binary Cross Entropy Loss 作为损失函数,在推理时使用 `F.sigmoid()` 和 `threshold` 得到预测结果,`threshold` 默认为 0.3。 -对于实现上述两种计算二值分割的方法, 需要在 `decode_head` 和 `auxiliary_head` 的配置里修改. 下面是对样例 [pspnet_unet_s5-d16.py](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/_base_/models/pspnet_unet_s5-d16.py) 做出的对应修改. +对于实现上述两种计算二值分割的方法,需要在 `decode_head` 和 `auxiliary_head` 的配置里修改。下面是对样例 [pspnet_unet_s5-d16.py](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/_base_/models/pspnet_unet_s5-d16.py) 做出的对应修改。 -- (1) `num_classes=2`, `out_channels=2` 并在 `CrossEntropyLoss` 里面设置 `use_sigmoid=False`. +- (1) `num_classes=2`, `out_channels=2` 并在 `CrossEntropyLoss` 里面设置 `use_sigmoid=False`。 ```python decode_head=dict( @@ -99,7 +99,7 @@ auxiliary_head=dict( ## `reduce_zero_label` 的作用 -数据集中 `reduce_zero_label` 参数类型为布尔类型, 默认为 False, 它的功能是为了忽略数据集 label 0. 具体做法是将 label 0 改为 255, 其余 label 相应编号减 1, 同时 decode head 里将 255 设为 ignore index, 即不参与 loss 计算. +数据集中 `reduce_zero_label` 参数类型为布尔类型,默认为 False,它的功能是为了忽略数据集 label 0。具体做法是将 label 0 改为 255,其余 label 相应编号减 1,同时 decode head 里将 255 设为 ignore index,即不参与 loss 计算。 以下是 `reduce_zero_label` 具体实现逻辑: ```python @@ -110,9 +110,9 @@ if self.reduce_zero_label: gt_semantic_seg[gt_semantic_seg == 254] = 255 ``` -关于您的数据集是否需要使用reduce_zero_label,有以下两类情况: +关于您的数据集是否需要使用 reduce_zero_label,有以下两类情况: -- 例如在Potsdam数据集上,有 0-不透水面、1-建筑、2-低矮植被、3-树、4-汽车、5-杂乱,六类。但该数据集提供了两种RGB标签,一种为图像边缘处有黑色像素的标签,另一种是没有黑色边缘的标签。对于有黑色边缘的标签,在 [dataset_converters.py](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/tools/dataset_converters/potsdam.py)中,其将黑色边缘转换为label 0,其余标签分别为 1-不透水面、2-建筑、3-低矮植被、4-树、5-汽车、6-杂乱,那么此时,就应该在数据集[potsdam.py](https://github.com/open-mmlab/mmsegmentation/blob/ff95416c3b5ce8d62b9289f743531398efce534f/mmseg/datasets/potsdam.py#L23)中将`reduce_zero_label=True`。如果使用的是没有黑色边缘的标签,那么mask label中只有0-5,此时就应该使`reduce_zero_label=False`。需要结合您的实际情况来使用。 -- 例如在第0类为background类别的数据集上,如果您最终是需要将背景和您的其余类别分开时,是不需要使用`reduce_zero_label`的,此时在数据集中应该将其设置为`reduce_zero_label=False` +- 例如在 [Potsdam](https://github.com/open-mmlab/mmsegmentation/blob/1.x/docs/en/user_guides/2_dataset_prepare.md#isprs-potsdam) 数据集上,有 0-不透水面、1-建筑、2-低矮植被、3-树、4-汽车、5-杂乱,六类。但该数据集提供了两种RGB标签,一种为图像边缘处有黑色像素的标签,另一种是没有黑色边缘的标签。对于有黑色边缘的标签,在 [dataset_converters.py](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/tools/dataset_converters/potsdam.py)中,其将黑色边缘转换为 label 0,其余标签分别为 1-不透水面、2-建筑、3-低矮植被、4-树、5-汽车、6-杂乱,那么此时,就应该在数据集 [potsdam.py](https://github.com/open-mmlab/mmsegmentation/blob/ff95416c3b5ce8d62b9289f743531398efce534f/mmseg/datasets/potsdam.py#L23) 中将`reduce_zero_label=True`。如果使用的是没有黑色边缘的标签,那么 mask label 中只有 0-5,此时就应该使`reduce_zero_label=False`。需要结合您的实际情况来使用。 +- 例如在第 0 类为background类别的数据集上,如果您最终是需要将背景和您的其余类别分开时,是不需要使用`reduce_zero_label`的,此时在数据集中应该将其设置为`reduce_zero_label=False` -**注意:** 使用 `reduce_zero_label` 请确认数据集原始类别个数, 如果只有两类, 需要关闭 `reduce_zero_label` 即设置 `reduce_zero_label=False`. +**注意:** 使用 `reduce_zero_label` 请确认数据集原始类别个数,如果只有两类,需要关闭 `reduce_zero_label` 即设置 `reduce_zero_label=False`。 From a7d2e28dcab70166663c61e26074939834d43fe8 Mon Sep 17 00:00:00 2001 From: CSH <40987381+csatsurnh@users.noreply.github.com> Date: Thu, 30 Mar 2023 15:01:27 +0800 Subject: [PATCH 27/32] [Doc] Update dataset_prepare & inference (#2798) --- docs/en/user_guides/2_dataset_prepare.md | 73 ++- docs/en/user_guides/3_inference.md | 34 +- docs/zh_cn/user_guides/2_dataset_prepare.md | 619 +++++++++++++++++++- docs/zh_cn/user_guides/3_inference.md | 245 +++++++- 4 files changed, 907 insertions(+), 64 deletions(-) diff --git a/docs/en/user_guides/2_dataset_prepare.md b/docs/en/user_guides/2_dataset_prepare.md index 6c81d60f41..63a1a8bb4a 100644 --- a/docs/en/user_guides/2_dataset_prepare.md +++ b/docs/en/user_guides/2_dataset_prepare.md @@ -1,4 +1,4 @@ -## Prepare datasets +# Tutorial 2: Prepare datasets It is recommended to symlink the dataset root to `$MMSEGMENTATION/data`. If your folder structure is different, you may need to change the corresponding paths in config files. @@ -179,20 +179,19 @@ mmsegmentation | │   │   │ └── polygons ``` -### Cityscapes +## Cityscapes The data could be found [here](https://www.cityscapes-dataset.com/downloads/) after registration. By convention, `**labelTrainIds.png` are used for cityscapes training. -We provided a [scripts](https://github.com/open-mmlab/mmsegmentation/blob/1.x/tools/dataset_converters/cityscapes.py) based on [cityscapesscripts](https://github.com/mcordts/cityscapesScripts) -to generate `**labelTrainIds.png`. +We provided a [script](https://github.com/open-mmlab/mmsegmentation/blob/1.x/tools/dataset_converters/cityscapes.py) based on [cityscapesscripts](https://github.com/mcordts/cityscapesScripts)to generate `**labelTrainIds.png`. ```shell # --nproc means 8 process for conversion, which could be omitted as well. python tools/dataset_converters/cityscapes.py data/cityscapes --nproc 8 ``` -### Pascal VOC +## Pascal VOC Pascal VOC 2012 could be downloaded from [here](http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar). Beside, most recent works on Pascal VOC dataset usually exploit extra augmentation data, which could be found [here](http://www.eecs.berkeley.edu/Research/Projects/CS/vision/grouping/semantic_contours/benchmark.tgz). @@ -204,14 +203,14 @@ If you would like to use augmented VOC dataset, please run following command to python tools/dataset_converters/voc_aug.py data/VOCdevkit data/VOCdevkit/VOCaug --nproc 8 ``` -Please refer to [concat dataset](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/en/advanced_guides/datasets.md) for details about how to concatenate them and train them together. +Please refer to [concat dataset](../advanced_guides/add_datasets.md#concatenate-dataset) and [voc_aug config example](../../../configs/_base_/datasets/pascal_voc12_aug.py) for details about how to concatenate them and train them together. -### ADE20K +## ADE20K The training and validation set of ADE20K could be download from this [link](http://data.csail.mit.edu/places/ADEchallenge/ADEChallengeData2016.zip). We may also download test set from [here](http://data.csail.mit.edu/places/ADEchallenge/release_test.zip). -### Pascal Context +## Pascal Context The training and validation set of Pascal Context could be download from [here](http://host.robots.ox.ac.uk/pascal/VOC/voc2010/VOCtrainval_03-May-2010.tar). You may also download test set from [here](http://host.robots.ox.ac.uk:8080/eval/downloads/VOC2010test.tar) after registration. @@ -223,7 +222,7 @@ If you would like to use Pascal Context dataset, please install [Detail](https:/ python tools/dataset_converters/pascal_context.py data/VOCdevkit data/VOCdevkit/VOC2010/trainval_merged.json ``` -### COCO Stuff 10k +## COCO Stuff 10k The data could be downloaded [here](http://calvin.inf.ed.ac.uk/wp-content/uploads/data/cocostuffdataset/cocostuff-10k-v1.1.zip) by wget. @@ -243,7 +242,7 @@ python tools/dataset_converters/coco_stuff10k.py /path/to/coco_stuff10k --nproc By convention, mask labels in `/path/to/coco_stuff164k/annotations/*2014/*_labelTrainIds.png` are used for COCO Stuff 10k training and testing. -### COCO Stuff 164k +## COCO Stuff 164k For COCO Stuff 164k dataset, please run the following commands to download and convert the augmented dataset. @@ -267,7 +266,7 @@ By convention, mask labels in `/path/to/coco_stuff164k/annotations/*2017/*_label The details of this dataset could be found at [here](https://github.com/nightrome/cocostuff#downloads). -### CHASE DB1 +## CHASE DB1 The training and validation set of CHASE DB1 could be download from [here](https://staffnet.kingston.ac.uk/~ku15565/CHASE_DB1/assets/CHASEDB1.zip). @@ -279,7 +278,7 @@ python tools/dataset_converters/chase_db1.py /path/to/CHASEDB1.zip The script will make directory structure automatically. -### DRIVE +## DRIVE The training and validation set of DRIVE could be download from [here](https://drive.grand-challenge.org/). Before that, you should register an account. Currently '1st_manual' is not provided officially. @@ -291,7 +290,7 @@ python tools/dataset_converters/drive.py /path/to/training.zip /path/to/test.zip The script will make directory structure automatically. -### HRF +## HRF First, download [healthy.zip](https://www5.cs.fau.de/fileadmin/research/datasets/fundus-images/healthy.zip), [glaucoma.zip](https://www5.cs.fau.de/fileadmin/research/datasets/fundus-images/glaucoma.zip), [diabetic_retinopathy.zip](https://www5.cs.fau.de/fileadmin/research/datasets/fundus-images/diabetic_retinopathy.zip), [healthy_manualsegm.zip](https://www5.cs.fau.de/fileadmin/research/datasets/fundus-images/healthy_manualsegm.zip), [glaucoma_manualsegm.zip](https://www5.cs.fau.de/fileadmin/research/datasets/fundus-images/glaucoma_manualsegm.zip) and [diabetic_retinopathy_manualsegm.zip](https://www5.cs.fau.de/fileadmin/research/datasets/fundus-images/diabetic_retinopathy_manualsegm.zip). @@ -303,7 +302,7 @@ python tools/dataset_converters/hrf.py /path/to/healthy.zip /path/to/healthy_man The script will make directory structure automatically. -### STARE +## STARE First, download [stare-images.tar](http://cecas.clemson.edu/~ahoover/stare/probing/stare-images.tar), [labels-ah.tar](http://cecas.clemson.edu/~ahoover/stare/probing/labels-ah.tar) and [labels-vk.tar](http://cecas.clemson.edu/~ahoover/stare/probing/labels-vk.tar). @@ -315,15 +314,15 @@ python tools/dataset_converters/stare.py /path/to/stare-images.tar /path/to/labe The script will make directory structure automatically. -### Dark Zurich +## Dark Zurich Since we only support test models on this dataset, you may only download [the validation set](https://data.vision.ee.ethz.ch/csakarid/shared/GCMA_UIoU/Dark_Zurich_val_anon.zip). -### Nighttime Driving +## Nighttime Driving Since we only support test models on this dataset, you may only download [the test set](http://data.vision.ee.ethz.ch/daid/NighttimeDriving/NighttimeDrivingTest.zip). -### LoveDA +## LoveDA The data could be downloaded from Google Drive [here](https://drive.google.com/drive/folders/1ibYV0qwn4yuuh068Rnc-w4tPi0U0c-ti?usp=sharing). @@ -338,25 +337,24 @@ wget https://zenodo.org/record/5706578/files/Val.zip wget https://zenodo.org/record/5706578/files/Test.zip ``` -For LoveDA dataset, please run the following command to download and re-organize the dataset. +For LoveDA dataset, please run the following command to re-organize the dataset. ```shell python tools/dataset_converters/loveda.py /path/to/loveDA ``` -Using trained model to predict test set of LoveDA and submit it to server can be found [here](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/en/user_guides/3_inference.md). +Using trained model to predict test set of LoveDA and submit it to server can be found [here](https://codalab.lisn.upsaclay.fr/competitions/421). More details about LoveDA can be found [here](https://github.com/Junjue-Wang/LoveDA). -### ISPRS Potsdam +## ISPRS Potsdam -The [Potsdam](https://www2.isprs.org/commissions/comm2/wg4/benchmark/2d-sem-label-potsdam/) -dataset is for urban semantic segmentation used in the 2D Semantic Labeling Contest - Potsdam. +The [Potsdam](https://www2.isprs.org/commissions/comm2/wg4/benchmark/2d-sem-label-potsdam/) dataset is for urban semantic segmentation used in the 2D Semantic Labeling Contest - Potsdam. The dataset can be requested at the challenge [homepage](https://www2.isprs.org/commissions/comm2/wg4/benchmark/data-request-form/). The '2_Ortho_RGB.zip' and '5_Labels_all_noBoundary.zip' are required. -For Potsdam dataset, please run the following command to download and re-organize the dataset. +For Potsdam dataset, please run the following command to re-organize the dataset. ```shell python tools/dataset_converters/potsdam.py /path/to/potsdam @@ -364,29 +362,28 @@ python tools/dataset_converters/potsdam.py /path/to/potsdam In our default setting, it will generate 3456 images for training and 2016 images for validation. -### ISPRS Vaihingen +## ISPRS Vaihingen -The [Vaihingen](https://www2.isprs.org/commissions/comm2/wg4/benchmark/2d-sem-label-vaihingen/) -dataset is for urban semantic segmentation used in the 2D Semantic Labeling Contest - Vaihingen. +The [Vaihingen](https://www2.isprs.org/commissions/comm2/wg4/benchmark/2d-sem-label-vaihingen/) dataset is for urban semantic segmentation used in the 2D Semantic Labeling Contest - Vaihingen. The dataset can be requested at the challenge [homepage](https://www2.isprs.org/commissions/comm2/wg4/benchmark/data-request-form/). The 'ISPRS_semantic_labeling_Vaihingen.zip' and 'ISPRS_semantic_labeling_Vaihingen_ground_truth_eroded_COMPLETE.zip' are required. -For Vaihingen dataset, please run the following command to download and re-organize the dataset. +For Vaihingen dataset, please run the following command to re-organize the dataset. ```shell python tools/dataset_converters/vaihingen.py /path/to/vaihingen ``` -In our default setting (`clip_size` =512, `stride_size`=256), it will generate 344 images for training and 398 images for validation. +In our default setting (`clip_size`=512, `stride_size`=256), it will generate 344 images for training and 398 images for validation. -### iSAID +## iSAID The data images could be download from [DOTA-v1.0](https://captain-whu.github.io/DOTA/dataset.html) (train/val/test) The data annotations could be download from [iSAID](https://captain-whu.github.io/iSAID/dataset.html) (train/val) -The dataset is a Large-scale Dataset for Instance Segmentation (also have segmantic segmentation) in Aerial Images. +The dataset is a Large-scale Dataset for Instance Segmentation (also have semantic segmentation) in Aerial Images. You may need to follow the following structure for dataset preparation after downloading iSAID dataset. @@ -415,7 +412,7 @@ You may need to follow the following structure for dataset preparation after dow python tools/dataset_converters/isaid.py /path/to/iSAID ``` -In our default setting (`patch_width`=896, `patch_height`=896, `overlap_area`=384), it will generate 33978 images for training and 11644 images for validation. +In our default setting (`patch_width`=896, `patch_height`=896, `overlap_area`=384), it will generate 33978 images for training and 11644 images for validation. ## LIP(Look Into Person) dataset @@ -435,7 +432,7 @@ mv val_segmentations ../ cd .. ``` -The contents of LIP datasets include: +The contents of LIP datasets include: ```none ├── data @@ -456,10 +453,9 @@ The contents of LIP datasets include: ## Synapse dataset -This dataset could be download from [this page](https://www.synapse.org/#!Synapse:syn3193805/wiki/) +This dataset could be download from [this page](https://www.synapse.org/#!Synapse:syn3193805/wiki/). -To follow the data preparation setting of [TransUNet](https://arxiv.org/abs/2102.04306), which splits original training set (30 scans) -into new training (18 scans) and validation set (12 scans). Please run the following command to prepare the dataset. +To follow the data preparation setting of [TransUNet](https://arxiv.org/abs/2102.04306), which splits original training set (30 scans) into new training (18 scans) and validation set (12 scans). Please run the following command to prepare the dataset. ```shell unzip RawData.zip @@ -532,10 +528,9 @@ Then, use this command to convert synapse dataset. python tools/dataset_converters/synapse.py --dataset-path /path/to/synapse ``` -Noted that MMSegmentation default evaluation metric (such as mean dice value) is calculated on 2D slice image, -which is not comparable to results of 3D scan in some paper such as [TransUNet](https://arxiv.org/abs/2102.04306). +Noted that MMSegmentation default evaluation metric (such as mean dice value) is calculated on 2D slice image, which is not comparable to results of 3D scan in some paper such as [TransUNet](https://arxiv.org/abs/2102.04306). -### REFUGE +## REFUGE Register in [REFUGE Challenge](https://refuge.grand-challenge.org) and download [REFUGE dataset](https://refuge.grand-challenge.org/REFUGE2Download). @@ -624,4 +619,4 @@ It includes 400 images for training, 400 images for validation and 400 images fo ``` - You could set Datasets version with `MapillaryDataset_v1` and `MapillaryDataset_v2` in your configs. - View the Mapillary Vistas Datasets config file here [V1.2](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/_base_/datasets/mapillary_v1.py) and [V2.0](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/_base_/datasets/mapillary_v2.py) + View the Mapillary Vistas Datasets config file here [V1.2](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/_base_/datasets/mapillary_v1.py) and [V2.0](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/_base_/datasets/mapillary_v2.py) diff --git a/docs/en/user_guides/3_inference.md b/docs/en/user_guides/3_inference.md index c9f4e62f10..6650b2ed39 100644 --- a/docs/en/user_guides/3_inference.md +++ b/docs/en/user_guides/3_inference.md @@ -19,7 +19,7 @@ MMSegmentation provides several interfaces for users to easily use pre-trained m ## Inferencer -We provides the most **convenient** way to use the model in MMSegmentation `MMSegInferencer`. You can get segmentation mask for an image with only 3 lines of code. +We provide the most **convenient** way to use the model in MMSegmentation `MMSegInferencer`. You can get segmentation mask for an image with only 3 lines of code. ### Basic Usage @@ -36,7 +36,7 @@ The following example shows how to use `MMSegInferencer` to perform inference on The visualization result should look like:
    -https://user-images.githubusercontent.com/76149310/221507927-ae01e3a7-016f-4425-b966-7b19cbbe494e.png +
    Moreover, you can use `MMSegInferencer` to process a list of images: @@ -44,7 +44,7 @@ Moreover, you can use `MMSegInferencer` to process a list of images: ``` # Input a list of images >>> images = [image1, image2, ...] # image1 can be a file path or a np.ndarray ->>> inferencer(images, show=True, wait_time=0.5) # wait_time is delay time, and 0 means forever. +>>> inferencer(images, show=True, wait_time=0.5) # wait_time is delay time, and 0 means forever # Or input image directory >>> images = $IMAGESDIR @@ -56,13 +56,12 @@ Moreover, you can use `MMSegInferencer` to process a list of images: >>> inferencer(images, out_dir='outputs', img_out_dir='vis', pred_out_dir='pred') ``` -There is a optional parameter of inferencer, `return_datasamples`, whose default value is False, and -return value of inferencer is a `dict` type by default, including 2 keys 'visualization' and 'predictions'. +There is a optional parameter of inferencer, `return_datasamples`, whose default value is False, and return value of inferencer is a `dict` type by default, including 2 keys 'visualization' and 'predictions'. If `return_datasamples=True` inferencer will return [`SegDataSample`](../advanced_guides/structures.md), or list of it. ``` result = inferencer('demo/demo.png') -# result is a `dict` including 2 keys 'visualization' and 'predictions'. +# result is a `dict` including 2 keys 'visualization' and 'predictions' # 'visualization' includes color segmentation map print(result['visualization'].shape) # (512, 683, 3) @@ -92,18 +91,12 @@ print(type(results[0])) ### Initialization `MMSegInferencer` must be initialized from a `model`, which can be a model name or a `Config` even a path of config file. -The model names can be found in models' metafile, like one model name of maskformer is `maskformer_r50-d32_8xb2-160k_ade20k-512x512`, and if input model name and the weights of the model will be download automatically. Below are other input parameters: - -- weights (str, optional) - Path to the checkpoint. If it is not specified and model is a model name of metafile, the weights will be loaded - from metafile. Defaults to None. -- classes (list, optional) - Input classes for result rendering, as the prediction of segmentation - model is a segment map with label indices, `classes` is a list which includes - items responding to the label indices. If classes is not defined, visualizer will take `cityscapes` classes by default. Defaults to None. -- palette (list, optional) - Input palette for result rendering, which is a list of color palette - responding to the classes. If palette is not defined, visualizer will take `cityscapes` palette by default. Defaults to None. -- dataset_name (str, optional)[Dataset name or alias](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/utils/class_names.py#L302-L317) - visulizer will use the meta information of the dataset i.e. classes and palette, - but the `classes` and `palette` have higher priority. Defaults to None. +The model names can be found in models' metafile (configs/xxx/metafile.yaml), like one model name of maskformer is `maskformer_r50-d32_8xb2-160k_ade20k-512x512`, and if input model name and the weights of the model will be download automatically. Below are other input parameters: + +- weights (str, optional) - Path to the checkpoint. If it is not specified and model is a model name of metafile, the weights will be loaded from metafile. Defaults to None. +- classes (list, optional) - Input classes for result rendering, as the prediction of segmentation model is a segment map with label indices, `classes` is a list which includes items responding to the label indices. If classes is not defined, visualizer will take `cityscapes` classes by default. Defaults to None. +- palette (list, optional) - Input palette for result rendering, which is a list of colors responding to the classes. If the palette is not defined, the visualizer will take the palette of `cityscapes` by default. Defaults to None. +- dataset_name (str, optional) - [Dataset name or alias](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/utils/class_names.py#L302-L317), visualizer will use the meta information of the dataset i.e. classes and palette, but the `classes` and `palette` have higher priority. Defaults to None. - device (str, optional) - Device to run inference. If None, the available device will be automatically used. Defaults to None. - scope (str, optional) - The scope of the model. Defaults to 'mmseg'. @@ -113,8 +106,7 @@ The model names can be found in models' metafile, like one model name of maskfor - show (bool) - Whether to display the image in a popup window. Defaults to False. - wait_time (float) - The interval of show (s). Defaults to 0. -- img_out_dir (str) - Subdirectory of `out_dir`, used to save rendering color segmentation mask, so `out_dir` must be defined - if you would like to save predicted mask. Defaults to 'vis'. +- img_out_dir (str) - Subdirectory of `out_dir`, used to save rendering color segmentation mask, so `out_dir` must be defined if you would like to save predicted mask. Defaults to 'vis'. - opacity (int, float) - The transparency of segmentation mask. Defaults to 0.8. The examples of these parameters is in [Basic Usage](#basic-usage) @@ -245,7 +237,7 @@ vis_image = show_result_pyplot(model, img_path, result) # save the visualization result, the output image would be found at the path `work_dirs/result.png` vis_iamge = show_result_pyplot(model, img_path, result, out_file='work_dirs/result.png') -# Modify the time of displaying images, note that 0 is the special value that means "forever". +# Modify the time of displaying images, note that 0 is the special value that means "forever" vis_image = show_result_pyplot(model, img_path, result, wait_time=5) ``` diff --git a/docs/zh_cn/user_guides/2_dataset_prepare.md b/docs/zh_cn/user_guides/2_dataset_prepare.md index c9c3606977..6d8cb18681 100644 --- a/docs/zh_cn/user_guides/2_dataset_prepare.md +++ b/docs/zh_cn/user_guides/2_dataset_prepare.md @@ -1,3 +1,618 @@ -## 准备数据集(待更新) +# 教程2:准备数据集 -中文版文档支持中,请先阅读[英文版本](../../en/user_guides/2_dataset_prepare.md) +我们建议将数据集根目录符号链接到 `$MMSEGMENTATION/data`。 +如果您的目录结构不同,您可能需要更改配置文件中相应的路径。 + +```none +mmsegmentation +├── mmseg +├── tools +├── configs +├── data +│ ├── cityscapes +│ │ ├── leftImg8bit +│ │ │ ├── train +│ │ │ ├── val +│ │ ├── gtFine +│ │ │ ├── train +│ │ │ ├── val +│ ├── VOCdevkit +│ │ ├── VOC2012 +│ │ │ ├── JPEGImages +│ │ │ ├── SegmentationClass +│ │ │ ├── ImageSets +│ │ │ │ ├── Segmentation +│ │ ├── VOC2010 +│ │ │ ├── JPEGImages +│ │ │ ├── SegmentationClassContext +│ │ │ ├── ImageSets +│ │ │ │ ├── SegmentationContext +│ │ │ │ │ ├── train.txt +│ │ │ │ │ ├── val.txt +│ │ │ ├── trainval_merged.json +│ │ ├── VOCaug +│ │ │ ├── dataset +│ │ │ │ ├── cls +│ ├── ade +│ │ ├── ADEChallengeData2016 +│ │ │ ├── annotations +│ │ │ │ ├── training +│ │ │ │ ├── validation +│ │ │ ├── images +│ │ │ │ ├── training +│ │ │ │ ├── validation +│ ├── coco_stuff10k +│ │ ├── images +│ │ │ ├── train2014 +│ │ │ ├── test2014 +│ │ ├── annotations +│ │ │ ├── train2014 +│ │ │ ├── test2014 +│ │ ├── imagesLists +│ │ │ ├── train.txt +│ │ │ ├── test.txt +│ │ │ ├── all.txt +│ ├── coco_stuff164k +│ │ ├── images +│ │ │ ├── train2017 +│ │ │ ├── val2017 +│ │ ├── annotations +│ │ │ ├── train2017 +│ │ │ ├── val2017 +│ ├── CHASE_DB1 +│ │ ├── images +│ │ │ ├── training +│ │ │ ├── validation +│ │ ├── annotations +│ │ │ ├── training +│ │ │ ├── validation +│ ├── DRIVE +│ │ ├── images +│ │ │ ├── training +│ │ │ ├── validation +│ │ ├── annotations +│ │ │ ├── training +│ │ │ ├── validation +│ ├── HRF +│ │ ├── images +│ │ │ ├── training +│ │ │ ├── validation +│ │ ├── annotations +│ │ │ ├── training +│ │ │ ├── validation +│ ├── STARE +│ │ ├── images +│ │ │ ├── training +│ │ │ ├── validation +│ │ ├── annotations +│ │ │ ├── training +│ │ │ ├── validation +| ├── dark_zurich +| │   ├── gps +| │   │   ├── val +| │   │   └── val_ref +| │   ├── gt +| │   │   └── val +| │   ├── LICENSE.txt +| │   ├── lists_file_names +| │   │   ├── val_filenames.txt +| │   │   └── val_ref_filenames.txt +| │   ├── README.md +| │   └── rgb_anon +| │   | ├── val +| │   | └── val_ref +| ├── NighttimeDrivingTest +| | ├── gtCoarse_daytime_trainvaltest +| | │   └── test +| | │   └── night +| | └── leftImg8bit +| | | └── test +| | | └── night +│ ├── loveDA +│ │ ├── img_dir +│ │ │ ├── train +│ │ │ ├── val +│ │ │ ├── test +│ │ ├── ann_dir +│ │ │ ├── train +│ │ │ ├── val +│ ├── potsdam +│ │ ├── img_dir +│ │ │ ├── train +│ │ │ ├── val +│ │ ├── ann_dir +│ │ │ ├── train +│ │ │ ├── val +│ ├── vaihingen +│ │ ├── img_dir +│ │ │ ├── train +│ │ │ ├── val +│ │ ├── ann_dir +│ │ │ ├── train +│ │ │ ├── val +│ ├── iSAID +│ │ ├── img_dir +│ │ │ ├── train +│ │ │ ├── val +│ │ │ ├── test +│ │ ├── ann_dir +│ │ │ ├── train +│ │ │ ├── val +│ ├── synapse +│ │ ├── img_dir +│ │ │ ├── train +│ │ │ ├── val +│ │ ├── ann_dir +│ │ │ ├── train +│ │ │ ├── val +│ ├── REFUGE +│ │ ├── images +│ │ │ ├── training +│ │ │ ├── validation +│ │ │ ├── test +│ │ ├── annotations +│ │ │ ├── training +│ │ │ ├── validation +│ │ │ ├── test +│ ├── mapillary +│ │ ├── training +│ │ │ ├── images +│ │ │ ├── v1.2 +| │ │ │ ├── instances +| │ │ │ ├── labels +| │   │   │ └── panoptic +│ │ │ ├── v2.0 +| │ │ │ ├── instances +| │ │ │ ├── labels +| │ │ │ ├── panoptic +| │   │   │ └── polygons +│ │ ├── validation +│ │ │ ├── images +| │ │ ├── v1.2 +| │ │ │ ├── instances +| │ │ │ ├── labels +| │   │   │ └── panoptic +│ │ │ ├── v2.0 +| │ │ │ ├── instances +| │ │ │ ├── labels +| │ │ │ ├── panoptic +| │   │   │ └── polygons +``` + +## Cityscapes + +Cityscapes [官方网站](https://www.cityscapes-dataset.com/)可以下载 Cityscapes 数据集,按照官网要求注册并登陆后,数据可以在[这里](https://www.cityscapes-dataset.com/downloads/)找到。 + +按照惯例,`**labelTrainIds.png` 用于 cityscapes 训练。 +我们提供了一个基于 [cityscapesscripts](https://github.com/mcordts/cityscapesScripts) 的[脚本](https://github.com/open-mmlab/mmsegmentation/blob/1.x/tools/dataset_converters/cityscapes.py)用于生成 `**labelTrainIds.png`。 + +```shell +# --nproc 表示 8 个转换进程,也可以省略。 +python tools/dataset_converters/cityscapes.py data/cityscapes --nproc 8 +``` + +## Pascal VOC + +Pascal VOC 2012 可从[此处](http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar)下载。 +此外,Pascal VOC 数据集的最新工作通常利用额外的增强数据,可以在[这里](http://www.eecs.berkeley.edu/Research/Projects/CS/vision/grouping/semantic_contours/benchmark.tgz)找到。 + +如果您想使用增强的 VOC 数据集,请运行以下命令将增强数据的标注转换为正确的格式。 + +```shell +# --nproc 表示 8 个转换进程,也可以省略。 +python tools/dataset_converters/voc_aug.py data/VOCdevkit data/VOCdevkit/VOCaug --nproc 8 +``` + +请参考[拼接数据集文档](../advanced_guides/add_datasets.md#拼接数据集)及 [voc_aug 配置示例](../../../configs/_base_/datasets/pascal_voc12_aug.py)以详细了解如何将它们拼接并合并训练。 + +## ADE20K + +ADE20K 的训练和验证集可以从这个[链接](http://data.csail.mit.edu/places/ADEchallenge/ADEChallengeData2016.zip)下载。 +如果需要下载测试数据集,可以在[官网](http://host.robots.ox.ac.uk/)注册后,下载[测试集](http://host.robots.ox.ac.uk:8080/eval/downloads/VOC2010test.tar)。 + +## Pascal Context + +Pascal Context 的训练和验证集可以从[此处](http://host.robots.ox.ac.uk/pascal/VOC/voc2010/VOCtrainval_03-May-2010.tar)下载。注册后,您也可以从[此处](http://host.robots.ox.ac.uk:8080/eval/downloads/VOC2010test.tar)下载测试集。 + +从原始数据集中抽出部分数据作为验证集,您可以从[此处](https://codalabuser.blob.core.windows.net/public/trainval_merged.json)下载 trainval_merged.json 文件。 + +请先安装 [Detail](https://github.com/zhanghang1989/detail-api) 工具然后运行以下命令将标注转换为正确的格式。 + +```shell +python tools/dataset_converters/pascal_context.py data/VOCdevkit data/VOCdevkit/VOC2010/trainval_merged.json +``` + +## COCO Stuff 10k + +数据可以通过 wget 在[这里](http://calvin.inf.ed.ac.uk/wp-content/uploads/data/cocostuffdataset/cocostuff-10k-v1.1.zip)下载。 + +对于 COCO Stuff 10k 数据集,请运行以下命令下载并转换数据集。 + +```shell +# 下载 +mkdir coco_stuff10k && cd coco_stuff10k +wget http://calvin.inf.ed.ac.uk/wp-content/uploads/data/cocostuffdataset/cocostuff-10k-v1.1.zip + +# 解压 +unzip cocostuff-10k-v1.1.zip + +# --nproc 表示 8 个转换进程,也可以省略。 +python tools/dataset_converters/coco_stuff10k.py /path/to/coco_stuff10k --nproc 8 +``` + +按照惯例,`/path/to/coco_stuff164k/annotations/*2014/*_labelTrainIds.png` 中的 mask 标注用于 COCO Stuff 10k 的训练和测试。 + +## COCO Stuff 164k + +对于 COCO Stuff 164k 数据集,请运行以下命令下载并转换增强的数据集。 + +```shell +# 下载 +mkdir coco_stuff164k && cd coco_stuff164k +wget http://images.cocodataset.org/zips/train2017.zip +wget http://images.cocodataset.org/zips/val2017.zip +wget http://calvin.inf.ed.ac.uk/wp-content/uploads/data/cocostuffdataset/stuffthingmaps_trainval2017.zip + +# 解压 +unzip train2017.zip -d images/ +unzip val2017.zip -d images/ +unzip stuffthingmaps_trainval2017.zip -d annotations/ + +# --nproc 表示 8 个转换进程,也可以省略。 +python tools/dataset_converters/coco_stuff164k.py /path/to/coco_stuff164k --nproc 8 +``` + +按照惯例,`/path/to/coco_stuff164k/annotations/*2017/*_labelTrainIds.png` 中的 mask 标注用于 COCO Stuff 164k 的训练和测试。 + +此数据集的详细信息可在[此处](https://github.com/nightrome/cocostuff#downloads)找到。 + +## CHASE DB1 + +CHASE DB1 的训练和验证集可以从[此处](https://staffnet.kingston.ac.uk/~ku15565/CHASE_DB1/assets/CHASEDB1.zip)下载。 + +请运行以下命令,准备 CHASE DB1 数据集: + +```shell +python tools/dataset_converters/chase_db1.py /path/to/CHASEDB1.zip +``` + +该脚本将自动调整数据集目录结构,使其满足 MMSegmentation 数据集加载要求。 + +## DRIVE + +按照[官网](https://drive.grand-challenge.org/)要求,注册并登陆后,便可以下载 DRIVE 的训练和验证数据集。 + +要将 DRIVE 数据集转换为 MMSegmentation 的格式,请运行以下命令: + +```shell +python tools/dataset_converters/drive.py /path/to/training.zip /path/to/test.zip +``` + +该脚本将自动调整数据集目录结构,使其满足 MMSegmentation 数据集加载要求。 + +## HRF + +请下载 [health.zip](https://www5.cs.fau.de/fileadmin/research/datasets/fundus-images/healthy.zip)、[glaucoma.zip](https://www5.cs.fau.de/fileadmin/research/datasets/fundus-images/glaucoma.zip)、[diabetic_retinopathy.zip](https://www5.cs.fau.de/fileadmin/research/datasets/fundus-images/diabetic_retinopathy.zip)、[healthy_manualsegm.zip](https://www5.cs.fau.de/fileadmin/research/datasets/fundus-images/healthy_manualsegm.zip)、[glaucoma_manualsegm.zip](https://www5.cs.fau.de/fileadmin/research/datasets/fundus-images/glaucoma_manualsegm.zip) 和 [diabetic_retinopathy_manualsegm.zip](https://www5.cs.fau.de/fileadmin/research/datasets/fundus-images/diabetic_retinopathy_manualsegm.zip),无需解压,可以直接运行以下命令,准备 HRF 数据集: + +```shell +python tools/dataset_converters/hrf.py /path/to/healthy.zip /path/to/healthy_manualsegm.zip /path/to/glaucoma.zip /path/to/glaucoma_manualsegm.zip /path/to/diabetic_retinopathy.zip /path/to/diabetic_retinopathy_manualsegm.zip +``` + +该脚本将自动调整数据集目录结构,使其满足 MMSegmentation 数据集加载要求。 + +## STARE + +请下载 [stare images.tar](http://cecas.clemson.edu/~ahoover/stare/probing/stare-images.tar)、[labels-ah.tar](http://cecas.clemson.edu/~ahoover/stare/probing/labels-ah.tar) 和 [labels-vk.tar](http://cecas.clemson.edu/~ahoover/stare/probing/labels-vk.tar),无需解压,可以直接运行以下命令,准备 STARE 数据集: + +```shell +python tools/dataset_converters/stare.py /path/to/stare-images.tar /path/to/labels-ah.tar /path/to/labels-vk.tar +``` + +该脚本将自动调整数据集目录结构,使其满足 MMSegmentation 数据集加载要求。 + +## Dark Zurich + +由于我们只支持在此数据集上的模型测试,因此您只需要下载并解压[验证数据集](https://data.vision.ee.ethz.ch/csakarid/shared/GCMA_UIoU/Dark_Zurich_val_anon.zip)。 + +## Nighttime Driving + +由于我们只支持在此数据集上的模型测试,因此您只需要下载并解压[验证数据集](http://data.vision.ee.ethz.ch/daid/NighttimeDriving/NighttimeDrivingTest.zip)。 + +## LoveDA + +数据可以从[此处](https://drive.google.com/drive/folders/1ibYV0qwn4yuuh068Rnc-w4tPi0U0c-ti?usp=sharing)下载 LaveDA 数据集。 + +或者可以从 [zenodo](https://zenodo.org/record/5706578#.YZvN7SYRXdF) 下载。下载后,无需解压,直接运行以下命令: + +```shell +# 下载 Train.zip +wget https://zenodo.org/record/5706578/files/Train.zip +# 下载 Val.zip +wget https://zenodo.org/record/5706578/files/Val.zip +# 下载 Test.zip +wget https://zenodo.org/record/5706578/files/Test.zip +``` + +请对于 LoveDA 数据集,请运行以下命令调整数据集目录。 + +```shell +python tools/dataset_converters/loveda.py /path/to/loveDA +``` + +可将模型对 LoveDA 的测试集的预测结果上传至到数据集[测试服务器](https://codalab.lisn.upsaclay.fr/competitions/421),查看评测结果。 + +有关 LoveDA 的更多详细信息,可查看[此处](https://github.com/Junjue-Wang/LoveDA). + +## ISPRS Potsdam + +[Potsdam](https://www2.isprs.org/commissions/comm2/wg4/benchmark/2d-sem-label-potsdam/) 城市语义分割数据集用于 2D 语义分割竞赛 —— Potsdam。 + +数据集可以在竞赛[主页](https://www2.isprs.org/commissions/comm2/wg4/benchmark/data-request-form/)上请求获得。 +实验中需要下载 '2_Ortho_RGB.zip' 和 '5_Labels_all_noBoundary.zip'。 + +对于 Potsdam 数据集,请运行以下命令调整数据集目录。 + +```shell +python tools/dataset_converters/potsdam.py /path/to/potsdam +``` + +在我们的默认设置中,将生成 3456 张图像用于训练和 2016 张图像用于验证。 + +## ISPRS Vaihingen + +[Vaihingen](https://www2.isprs.org/commissions/comm2/wg4/benchmark/2d-sem-label-vaihingen/) 城市语义分割数据集用于 2D 语义分割竞赛 —— Vaihingen。 + +数据集可以在竞赛[主页](https://www2.isprs.org/commissions/comm2/wg4/benchmark/data-request-form/)上请求获得。 +实验中需要下载 'ISPRS_semantic_labeling_Vaihingen.zip' 和 'ISPRS_semantic_labeling_Vaihingen_ground_truth_eroded_COMPLETE.zip'。 + +对于 Vaihingen 数据集,请运行以下命令调整数据集目录。 + +```shell +python tools/dataset_converters/vaihingen.py /path/to/vaihingen +``` + +在我们的默认设置(`clip_size`=512, `stride_size`=256)中,将生成 344 张图像用于训练和 398 张图像用于验证。 + +## iSAID + +iSAID 数据集可从 [DOTA-v1.0](https://captain-whu.github.io/DOTA/dataset.html) 下载训练/验证/测试数据集的图像数据, + +并从 [iSAID](https://captain-whu.github.io/iSAID/dataset.html)下载训练/验证数据集的标注数据。 + +该数据集是航空图像实例分割和语义分割任务的大规模数据集。 + +下载 iSAID 数据集后,您可能需要按照以下结构进行数据集准备。 + +```none +├── data +│ ├── iSAID +│ │ ├── train +│ │ │ ├── images +│ │ │ │ ├── part1.zip +│ │ │ │ ├── part2.zip +│ │ │ │ ├── part3.zip +│ │ │ ├── Semantic_masks +│ │ │ │ ├── images.zip +│ │ ├── val +│ │ │ ├── images +│ │ │ │ ├── part1.zip +│ │ │ ├── Semantic_masks +│ │ │ │ ├── images.zip +│ │ ├── test +│ │ │ ├── images +│ │ │ │ ├── part1.zip +│ │ │ │ ├── part2.zip +``` + +```shell +python tools/dataset_converters/isaid.py /path/to/iSAID +``` + +在我们的默认设置(`patch_width`=896, `patch_height`=896, `overlap_area`=384)中,将生成 33978 张图像用于训练和 11644 张图像用于验证。 + +## LIP(Look Into Person) dataset + +该数据集可以从[此页面](https://lip.sysuhcp.com/overview.php)下载。 + +请运行以下命令来解压数据集。 + +```shell +unzip LIP.zip +cd LIP +unzip TrainVal_images.zip +unzip TrainVal_parsing_annotations.zip +cd TrainVal_parsing_annotations +unzip TrainVal_parsing_annotations.zip +mv train_segmentations ../ +mv val_segmentations ../ +cd .. +``` + +LIP 数据集的内容包括: + +```none +├── data +│ ├── LIP +│ │ ├── train_images +│   │ │ ├── 1000_1234574.jpg +│   │ │ ├── ... +│ │ ├── train_segmentations +│   │ │ ├── 1000_1234574.png +│   │ │ ├── ... +│ │ ├── val_images +│   │ │ ├── 100034_483681.jpg +│   │ │ ├── ... +│ │ ├── val_segmentations +│   │ │ ├── 100034_483681.png +│   │ │ ├── ... +``` + +## Synapse dataset + +此数据集可以从[此页面](https://www.synapse.org/#!Synapse:syn3193805/wiki/)下载。 + +遵循 [TransUNet](https://arxiv.org/abs/2102.04306) 的数据准备设定,将原始训练集(30 次扫描)拆分为新的训练集(18 次扫描)和验证集(12 次扫描)。请运行以下命令来准备数据集。 + +```shell +unzip RawData.zip +cd ./RawData/Training +``` + +然后创建 `train.txt` 和 `val.txt` 以拆分数据集。 + +根据 TransUnet,以下是数据集的划分。 + +train.txt + +```none +img0005.nii.gz +img0006.nii.gz +img0007.nii.gz +img0009.nii.gz +img0010.nii.gz +img0021.nii.gz +img0023.nii.gz +img0024.nii.gz +img0026.nii.gz +img0027.nii.gz +img0028.nii.gz +img0030.nii.gz +img0031.nii.gz +img0033.nii.gz +img0034.nii.gz +img0037.nii.gz +img0039.nii.gz +img0040.nii.gz +``` + +val.txt + +```none +img0008.nii.gz +img0022.nii.gz +img0038.nii.gz +img0036.nii.gz +img0032.nii.gz +img0002.nii.gz +img0029.nii.gz +img0003.nii.gz +img0001.nii.gz +img0004.nii.gz +img0025.nii.gz +img0035.nii.gz +``` + +synapse 数据集的内容包括: + +```none +├── Training +│ ├── img +│ │ ├── img0001.nii.gz +│ │ ├── img0002.nii.gz +│ │ ├── ... +│ ├── label +│ │ ├── label0001.nii.gz +│ │ ├── label0002.nii.gz +│ │ ├── ... +│ ├── train.txt +│ ├── val.txt +``` + +然后,使用此命令转换 synapse 数据集。 + +```shell +python tools/dataset_converters/synapse.py --dataset-path /path/to/synapse +``` + +注意,MMSegmentation 的默认评估指标(例如 mean dice value)是在 2D 切片图像上计算的,这与 [TransUNet](https://arxiv.org/abs/2102.04306) 等一些论文中的 3D 扫描结果是不同的。 + +## REFUGE + +在 [REFUGE Challenge](https://refuge.grand-challenge.org) 官网上注册并下载 [REFUGE 数据集](https://refuge.grand-challenge.org/REFUGE2Download)。 + +然后,解压 `REFUGE2.zip`,原始数据集的内容包括: + +```none +├── REFUGE2 +│ ├── REFUGE2 +│ │ ├── Annotation-Training400.zip +│ │ ├── REFUGE-Test400.zip +│ │ ├── REFUGE-Test-GT.zip +│ │ ├── REFUGE-Training400.zip +│ │ ├── REFUGE-Validation400.zip +│ │ ├── REFUGE-Validation400-GT.zip +│ ├── __MACOSX +``` + +请运行以下命令转换 REFUGE 数据集: + +```shell +python tools/convert_datasets/refuge.py --raw_data_root=/path/to/refuge/REFUGE2/REFUGE2 +``` + +脚本会将目录结构转换如下: + +```none +│ ├── REFUGE +│ │ ├── images +│ │ │ ├── training +│ │ │ ├── validation +│ │ │ ├── test +│ │ ├── annotations +│ │ │ ├── training +│ │ │ ├── validation +│ │ │ ├── test +``` + +包含 400 张用于训练的图像、400 张用于验证的图像和 400 张用于测试的图像,这与 REFUGE 2018 数据集相同。 + +## Mapillary Vistas Datasets + +- Mapillary Vistas [官方网站](https://www.mapillary.com/dataset/vistas) 可以下载 Mapillary Vistas 数据集,按照官网要求注册并登陆后,数据可以在[这里](https://www.mapillary.com/dataset/vistas)找到。 + +- Mapillary Vistas 数据集使用 8-bit with color-palette 来存储标签。不需要进行转换操作。 + +- 假设您已将数据集 zip 文件放在 `mmsegmentation/data/mapillary` 中 + +- 请运行以下命令来解压数据集。 + + ```bash + cd data/mapillary + unzip An-ZjB1Zm61yAZG0ozTymz8I8NqI4x0MrYrh26dq7kPgfu8vf9ImrdaOAVOFYbJ2pNAgUnVGBmbue9lTgdBOb5BbKXIpFs0fpYWqACbrQDChAA2fdX0zS9PcHu7fY8c-FOvyBVxPNYNFQuM.zip + ``` + +- 解压后,您将获得类似于此结构的 Mapillary Vistas 数据集。语义分割 mask 标签在 `labels` 文件夹中。 + + ```none + mmsegmentation + ├── mmseg + ├── tools + ├── configs + ├── data + │ ├── mapillary + │ │ ├── training + │ │ │ ├── images + │ │ │ ├── v1.2 + | │ │ │ ├── instances + | │ │ │ ├── labels + | │   │   │ └── panoptic + │ │ │ ├── v2.0 + | │ │ │ ├── instances + | │ │ │ ├── labels + | │ │ │ ├── panoptic + | │   │   │ └── polygons + │ │ ├── validation + │ │ │ ├── images + | │ │ ├── v1.2 + | │ │ │ ├── instances + | │ │ │ ├── labels + | │   │   │ └── panoptic + │ │ │ ├── v2.0 + | │ │ │ ├── instances + | │ │ │ ├── labels + | │ │ │ ├── panoptic + | │   │   │ └── polygons + ``` + +- 您可以在配置中使用 `MapillaryDataset_v1` 和 `Mapillary Dataset_v2` 设置数据集版本。 + 在此处 [V1.2](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/_base_/datasets/mapillary_v1.py) 和 [V2.0](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/_base_/datasets/mapillary_v2.py) 查看 Mapillary Vistas 数据集配置文件 diff --git a/docs/zh_cn/user_guides/3_inference.md b/docs/zh_cn/user_guides/3_inference.md index d2fe60076f..ab68bb47e6 100644 --- a/docs/zh_cn/user_guides/3_inference.md +++ b/docs/zh_cn/user_guides/3_inference.md @@ -1,3 +1,244 @@ -## 使用预训练模型推理(待更新) +# 教程3:使用预训练模型推理 -中文版文档支持中,请先阅读[英文版本](../../en/user_guides/3_inference.md) +MMSegmentation 在 [Model Zoo](../Model_Zoo.md) 中为语义分割提供了预训练的模型,并支持多个标准数据集,包括 Cityscapes、ADE20K 等。 +本说明将展示如何使用现有模型对给定图像进行推理。 +关于如何在标准数据集上测试现有模型,请参阅本[指南](./4_train_test.md) + +MMSegmentation 为用户提供了数个接口,以便轻松使用预训练的模型进行推理。 + +- [教程3:使用预训练模型推理](#教程3使用预训练模型推理) + - [推理器](#推理器) + - [基本使用](#基本使用) + - [初始化](#初始化) + - [可视化预测结果](#可视化预测结果) + - [模型列表](#模型列表) + - [推理 API](#推理-api) + - [mmseg.apis.init_model](#mmsegapisinit_model) + - [mmseg.apis.inference_model](#mmsegapisinference_model) + - [mmseg.apis.show_result_pyplot](#mmsegapisshow_result_pyplot) + +## 推理器 + +在 MMSegmentation 中,我们提供了最**方便的**方式 `MMSegInferencer` 来使用模型。您只需 3 行代码就可以获得图像的分割掩膜。 + +### 基本使用 + +以下示例展示了如何使用 `MMSegInferencer` 对单个图像执行推理。 + +``` +>>> from mmseg.apis import MMSegInferencer +>>> # 将模型加载到内存中 +>>> inferencer = MMSegInferencer(model='deeplabv3plus_r18-d8_4xb2-80k_cityscapes-512x1024') +>>> # 推理 +>>> inferencer('demo/demo.png', show=True) +``` + +可视化结果应如下所示: + +
    + +
    + +此外,您可以使用 `MMSegInferencer` 来处理一个包含多张图片的 `list`: + +``` +# 输入一个图片 list +>>> images = [image1, image2, ...] # image1 可以是文件路径或 np.ndarray +>>> inferencer(images, show=True, wait_time=0.5) # wait_time 是延迟时间,0 表示无限 + +# 或输入图像目录 +>>> images = $IMAGESDIR +>>> inferencer(images, show=True, wait_time=0.5) + +# 保存可视化渲染彩色分割图和预测结果 +# out_dir 是保存输出结果的目录,img_out_dir 和 pred_out_dir 为 out_dir 的子目录 +# 以保存可视化渲染彩色分割图和预测结果 +>>> inferencer(images, out_dir='outputs', img_out_dir='vis', pred_out_dir='pred') +``` + +推理器有一个可选参数 `return_datasamples`,其默认值为 False,推理器的返回值默认为 `dict` 类型,包括 'visualization' 和 'predictions' 两个 key。 +如果 `return_datasamples=True` 推理器将返回 [`SegDataSample`](../advanced_guides/structures.md) 或其列表。 + +``` +result = inferencer('demo/demo.png') +# 结果是一个包含 'visualization' 和 'predictions' 两个 key 的 `dict` +# 'visualization' 包含彩色分割图 +print(result['visualization'].shape) +# (512, 683, 3) + +# 'predictions' 包含带有标签索引的分割掩膜 +print(result['predictions'].shape) +# (512, 683) + +result = inferencer('demo/demo.png', return_datasamples=True) +print(type(result)) +# + +# 输入一个图片 list +results = inferencer(images) +# 输出为列表 +print(type(results['visualization']), results['visualization'][0].shape) +# (512, 683, 3) +print(type(results['predictions']), results['predictions'][0].shape) +# (512, 683) + +results = inferencer(images, return_datasamples=True) +# +print(type(results[0])) +# +``` + +### 初始化 + +`MMSegInferencer` 必须使用 `model` 初始化,该 `model` 可以是模型名称或一个 `Config`,甚至可以是配置文件的路径。 +模型名称可以在模型的元文件(configs/xxx/metafile.yaml)中找到,比如 maskformer 的一个模型名称是 `maskformer_r50-d32_8xb2-160k_ade20k-512x512`,如果输入模型名称,模型的权重将自动下载。以下是其他输入参数: + +- weights(str,可选)- 权重的路径。如果未指定,并且模型是元文件中的模型名称,则权重将从元文件加载。默认为 None。 +- classes(list,可选)- 输入类别用于结果渲染,由于分割模型的预测结构是标签索引的分割图,`classes` 是一个相应的标签索引的类别列表。若 classes 没有定义,可视化工具将默认使用 `cityscapes` 的类别。默认为 None。 +- palette(list,可选)- 输入调色盘用于结果渲染,它是对应分类的配色列表。若 palette 没有定义,可视化工具将默认使用 `cityscapes` 的调色盘。默认为 None。 +- dataset_name(str,可选)- [数据集名称或别名](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/utils/class_names.py#L302-L317),可视化工具将使用数据集的元信息,如类别和配色,但 `classes` 和 `palette` 具有更高的优先级。默认为 None。 +- device(str,可选)- 运行推理的设备。如果无,则会自动使用可用的设备。默认为 None。 +- scope(str,可选)- 模型的作用域。默认为 'mmseg'。 + +### 可视化预测结果 + +`MMSegInferencer` 有4个用于可视化预测的参数,您可以在初始化推理器时使用它们: + +- show(bool)- 是否弹出窗口显示图像。默认为 False。 +- wait_time(float)- 显示的间隔。默认值为 0。 +- img_out_dir(str)- `out_dir` 的子目录,用于保存渲染有色分割掩膜,因此如果要保存预测掩膜,则必须定义 `out_dir`。默认为 `vis`。 +- opacity(int,float)- 分割掩膜的透明度。默认值为 0.8。 + +这些参数的示例请参考[基本使用](#基本使用) + +### 模型列表 + +在 MMSegmentation 中有一个非常容易列出所有模型名称的方法 + +``` +>>> from mmseg.apis import MMSegInferencer +# models 是一个模型名称列表,它们将自动打印 +>>> models = MMSegInferencer.list_models('mmseg') +``` + +## 推理 API + +### mmseg.apis.init_model + +从配置文件初始化一个分割器。 + +参数: + +- config(str,`Path` 或 `mmengine.Config`)- 配置文件路径或配置对象。 +- checkpoint(str,可选)- 权重路径。如果为 None,则模型将不会加载任何权重。 +- device(str,可选)- CPU/CUDA 设备选项。默认为 'cuda:0'。 +- cfg_options(dict,可选)- 用于覆盖所用配置中的某些设置的选项。 + +返回值: + +- nn.Module:构建好的分割器。 + +示例: + +```python +from mmseg.apis import init_model + +config_path = 'configs/pspnet/pspnet_r50-d8_4xb2-40k_cityscapes-512x1024.py' +checkpoint_path = 'checkpoints/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth' + +# 初始化不带权重的模型 +model = init_model(config_path) + +# 初始化模型并加载权重 +model = init_model(config_path, checkpoint_path) + +# 在 CPU 上的初始化模型并加载权重 +model = init_model(config_path, checkpoint_path, 'cpu') +``` + +### mmseg.apis.inference_model + +使用分割器推理图像。 + +参数: + +- model(nn.Module)- 加载的分割器 +- imgs(str,np.ndarray 或 list\[str/np.ndarray\])- 图像文件或加载的图像 + +返回值: + +- `SegDataSample` 或 list\[`SegDataSample`\]:如果 imgs 是列表或元组,则返回相同长度的列表类型结果,否则直接返回分割结果。 + +**注意:** [SegDataSample](https://github.com/open-mmlab/mmsegmentation/blob/1.x/mmseg/structures/seg_data_sample.py) 是 MMSegmentation 的数据结构接口,用作不同组件之间的接口。`SegDataSample` 实现抽象数据元素 `mmengine.structures.BaseDataElement`,请参阅 [MMEngine](https://github.com/open-mmlab/mmengine) 中的数据元素[文档](https://mmengine.readthedocs.io/zh_CN/latest/advanced_tutorials/data_element.html)了解更多信息。 + +`SegDataSample` 中的参数分为几个部分: + +- `gt_sem_seg`(`PixelData`)- 语义分割的标注。 +- `pred_sem_seg`(`PixelData`)- 语义分割的预测。 +- `seg_logits`(`PixelData`)- 模型最后一层的输出结果。 + +**注意:** [PixelData](https://github.com/open-mmlab/mmengine/blob/main/mmengine/structures/pixel_data.py) 是像素级标注或预测的数据结构,请参阅 [MMEngine](https://github.com/open-mmlab/mmengine) 中的 PixelData [文档](https://mmengine.readthedocs.io/en/latest/advanced_tutorials/data_element.html)了解更多信息。 + +示例: + +```python +from mmseg.apis import init_model, inference_model + +config_path = 'configs/pspnet/pspnet_r50-d8_4xb2-40k_cityscapes-512x1024.py' +checkpoint_path = 'checkpoints/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth' +img_path = 'demo/demo.png' + + +model = init_model(config_path, checkpoint_path) +result = inference_model(model, img_path) +``` + +### mmseg.apis.show_result_pyplot + +在图像上可视化分割结果。 + +参数: + +- model(nn.Module)- 加载的分割器。 +- img(str 或 np.ndarray)- 图像文件名或加载的图像。 +- result(`SegDataSample`)- SegDataSample 预测结果。 +- opacity(float)- 绘制分割图的不透明度。默认值为 `0.5`,必须在 `(0,1]` 范围内。 +- title(str)- pyplot 图的标题。默认值为 ''。 +- draw_gt(bool)- 是否绘制 GT SegDataSample。默认为 `True`。 +- draw_pred(draws_pred)- 是否绘制预测 SegDataSample。默认为 `True`。 +- wait_time(float)- 显示的间隔,0 是表示“无限”的特殊值。默认为 `0`。 +- show(bool)- 是否展示绘制的图像。默认为 `True`。 +- save_dir(str,可选)- 为所有存储后端保存的文件路径。如果为 `None`,则后端存储将不会保存任何数据。 +- out_file(str,可选)- 输出文件的路径。默认为 `None`。 + +返回值: + +- np.ndarray:通道为 RGB 的绘制图像。 + +示例: + +```python +from mmseg.apis import init_model, inference_model, show_result_pyplot + +config_path = 'configs/pspnet/pspnet_r50-d8_4xb2-40k_cityscapes-512x1024.py' +checkpoint_path = 'checkpoints/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth' +img_path = 'demo/demo.png' + + +# 从配置文件和权重文件构建模型 +model = init_model(config_path, checkpoint_path, device='cuda:0') + +# 推理给定图像 +result = inference_model(model, img_path) + +# 展示分割结果 +vis_image = show_result_pyplot(model, img_path, result) + +# 保存可视化结果,输出图像将在 `workdirs/result.png` 路径下找到 +vis_iamge = show_result_pyplot(model, img_path, result, out_file='work_dirs/result.png') + +# 修改展示图像的时间,注意 0 是表示“无限”的特殊值 +vis_image = show_result_pyplot(model, img_path, result, wait_time=5) +``` + +**注意:** 如果当前设备没有图形用户界面,建议将 `show` 设置为 `False`,并指定 `out_file` 或 `save_dir` 来保存结果。如果您想在窗口上显示结果,则不需要特殊设置。 From 9dbe415847bba1f98b1259ff16ea60ca9aeed069 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E6=98=95=E8=BE=B0?= Date: Thu, 30 Mar 2023 15:02:09 +0800 Subject: [PATCH 28/32] [Doc] Add more social networking links (#2802) --- README.md | 8 +++++++- README_zh-CN.md | 24 ++++++++++++++++++++++-- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index a17557cb81..b7855918f8 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ English | [简体中文](README_zh-CN.md)
    - + @@ -45,6 +45,12 @@ English | [简体中文](README_zh-CN.md) + + + + + +
    ## Introduction diff --git a/README_zh-CN.md b/README_zh-CN.md index e09b515ab5..a4e404a710 100644 --- a/README_zh-CN.md +++ b/README_zh-CN.md @@ -17,8 +17,6 @@
     
    - -
    [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/mmsegmentation)](https://pypi.org/project/mmsegmentation/) [![PyPI](https://img.shields.io/pypi/v/mmsegmentation)](https://pypi.org/project/mmsegmentation) @@ -33,6 +31,28 @@ [English](README.md) | 简体中文 + + +
    + + + + + + + + + + + + + + + + + +
    + ## 简介 MMSegmentation 是一个基于 PyTorch 的语义分割开源工具箱。它是 OpenMMLab 项目的一部分。 From 15979db1ec46fca085defaf65c2d4f8ec376ae8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E6=98=95=E8=BE=B0?= Date: Thu, 30 Mar 2023 15:21:07 +0800 Subject: [PATCH 29/32] [Doc] Add custom metrics document (#2799) --- docs/en/advanced_guides/add_metrics.md | 80 ++++++++++++++++++++++ docs/zh_cn/advanced_guides/add_metrics.md | 82 ++++++++++++++++++++++- 2 files changed, 161 insertions(+), 1 deletion(-) diff --git a/docs/en/advanced_guides/add_metrics.md b/docs/en/advanced_guides/add_metrics.md index 0a25a81fc4..0298826f05 100644 --- a/docs/en/advanced_guides/add_metrics.md +++ b/docs/en/advanced_guides/add_metrics.md @@ -1 +1,81 @@ # Add New Metrics + +## Develop with the source code of MMSegmentation + +Here we show how to develop a new metric with an example of `CustomMetric` as the following. + +1. Create a new file `mmseg/evaluation/metrics/custom_metric.py`. + + ```python + from typing import List, Sequence + + from mmengine.evaluator import BaseMetric + + from mmseg.registry import METRICS + + + @METRICS.register_module() + class CustomMetric(BaseMetric): + + def __init__(self, arg1, arg2): + """ + The metric first processes each batch of data_samples and predictions, + and appends the processed results to the results list. Then it + collects all results together from all ranks if distributed training + is used. Finally, it computes the metrics of the entire dataset. + """ + + def process(self, data_batch: dict, data_samples: Sequence[dict]) -> None: + pass + + def compute_metrics(self, results: list) -> dict: + pass + + def evaluate(self, size: int) -> dict: + pass + ``` + + In the above example, `CustomMetric` is a subclass of `BaseMetric`. It has three methods: `process`, `compute_metrics` and `evaluate`. + + - `process()` process one batch of data samples and predictions. The processed results are stored in `self.results` which will be used to compute the metrics after all the data samples are processed. Please refer to [MMEngine documentation](https://github.com/open-mmlab/mmengine/blob/main/docs/en/design/evaluation.md) for more details. + + - `compute_metrics()` is used to compute the metrics from the processed results. + + - `evaluate()` is an interface to compute the metrics and return the results. It will be called by `ValLoop` or `TestLoop` in the `Runner`. In most cases, you don't need to override this method, but you can override it if you want to do some extra work. + + **Note:** You might find the details of calling `evaluate()` method in the `Runner` [here](https://github.com/open-mmlab/mmengine/blob/main/mmengine/runner/loops.py#L366). The `Runner` is the executor of the training and testing process, you can find more details about it at the [engine document](./engine.md). + +2. Import the new metric in `mmseg/evaluation/metrics/__init__.py`. + + ```python + from .custom_metric import CustomMetric + __all__ = ['CustomMetric', ...] + ``` + +3. Add the new metric to the config file. + + ```python + val_evaluator = dict(type='CustomMetric', arg1=xxx, arg2=xxx) + test_evaluator = dict(type='CustomMetric', arg1=xxx, arg2=xxx) + ``` + +## Develop with the released version of MMSegmentation + +The above example shows how to develop a new metric with the source code of MMSegmentation. If you want to develop a new metric with the released version of MMSegmentation, you can follow the following steps. + +1. Create a new file `/Path/to/metrics/custom_metric.py`, implement the `process`, `compute_metrics` and `evaluate` methods, `evaluate` method is optional. + +2. Import the new metric in your code or config file. + + ```python + from path.to.metrics import CustomMetric + ``` + + or + + ```python + custom_imports = dict(imports=['/Path/to/metrics'], allow_failed_imports=False) + + val_evaluator = dict(type='CustomMetric', arg1=xxx, arg2=xxx) + test_evaluator = dict(type='CustomMetric', arg1=xxx, arg2=xxx) + ``` diff --git a/docs/zh_cn/advanced_guides/add_metrics.md b/docs/zh_cn/advanced_guides/add_metrics.md index 3a371e357e..0637b44728 100644 --- a/docs/zh_cn/advanced_guides/add_metrics.md +++ b/docs/zh_cn/advanced_guides/add_metrics.md @@ -1 +1,81 @@ -# 新增评测指标 (待更新) +# 新增评测指标 + +## 使用 MMSegmentation 的源代码进行开发 + +在这里,我们用 `CustomMetric` 作为例子来展示如何开发一个新的评测指标。 + +1. 创建一个新文件 `mmseg/evaluation/metrics/custom_metric.py`。 + + ```python + from typing import List, Sequence + + from mmengine.evaluator import BaseMetric + + from mmseg.registry import METRICS + + + @METRICS.register_module() + class CustomMetric(BaseMetric): + + def __init__(self, arg1, arg2): + """ + The metric first processes each batch of data_samples and predictions, + and appends the processed results to the results list. Then it + collects all results together from all ranks if distributed training + is used. Finally, it computes the metrics of the entire dataset. + """ + + def process(self, data_batch: dict, data_samples: Sequence[dict]) -> None: + pass + + def compute_metrics(self, results: list) -> dict: + pass + + def evaluate(self, size: int) -> dict: + pass + ``` + + 在上面的示例中,`CustomMetric` 是 `BaseMetric` 的子类。它有三个方法:`process`,`compute_metrics` 和 `evaluate`。 + + - `process()` 处理一批数据样本和预测。处理后的结果需要显示地传给 `self.results` ,将在处理所有数据样本后用于计算指标。更多细节请参考 [MMEngine 文档](https://github.com/open-mmlab/mmengine/blob/main/docs/zh_cn/design/evaluation.md) + + - `compute_metrics()` 用于从处理后的结果中计算指标。 + + - `evaluate()` 是一个接口,用于计算指标并返回结果。它将由 `ValLoop` 或 `TestLoop` 在 `Runner` 中调用。在大多数情况下,您不需要重写此方法,但如果您想做一些额外的工作,可以重写它。 + + **注意:** 您可以在[这里](https://github.com/open-mmlab/mmengine/blob/main/mmengine/runner/loops.py#L366) 找到 `Runner` 调用 `evaluate()` 方法的过程。`Runner` 是训练和测试过程的执行器,您可以在[训练引擎文档](./engine.md)中找到有关它的详细信息。 + +2. 在 `mmseg/evaluation/metrics/__init__.py` 中导入新的指标。 + + ```python + from .custom_metric import CustomMetric + __all__ = ['CustomMetric', ...] + ``` + +3. 在配置文件中设置新的评测指标 + + ```python + val_evaluator = dict(type='CustomMetric', arg1=xxx, arg2=xxx) + test_evaluator = dict(type='CustomMetric', arg1=xxx, arg2=xxx) + ``` + +## 使用发布版本的 MMSegmentation 进行开发 + +上面的示例展示了如何使用 MMSegmentation 的源代码开发新指标。如果您想使用 MMSegmentation 的发布版本开发新指标,可以按照以下步骤操作。 + +1. 创建一个新文件 `/Path/to/metrics/custom_metric.py`,实现 `process`,`compute_metrics` 和 `evaluate` 方法,`evaluate` 方法是可选的。 + +2. 在代码或配置文件中导入新的指标。 + + ```python + from path.to.metrics import CustomMetric + ``` + + 或者 + + ```python + custom_imports = dict(imports=['/Path/to/metrics'], allow_failed_imports=False) + + val_evaluator = dict(type='CustomMetric', arg1=xxx, arg2=xxx) + test_evaluator = dict(type='CustomMetric', arg1=xxx, arg2=xxx) + ``` From 23fb3a9812a110fe4ddbe67f37adb2c7e0281c05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E6=98=95=E8=BE=B0?= Date: Thu, 30 Mar 2023 16:43:15 +0800 Subject: [PATCH 30/32] [Fix] Fix accepting an unexpected argument `local-rank` in PyTorch 2.0 (#2812) --- tools/test.py | 5 ++++- tools/train.py | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/tools/test.py b/tools/test.py index 64da2bc261..058fdfc864 100644 --- a/tools/test.py +++ b/tools/test.py @@ -47,7 +47,10 @@ def parse_args(): help='job launcher') parser.add_argument( '--tta', action='store_true', help='Test time augmentation') - parser.add_argument('--local_rank', type=int, default=0) + # When using PyTorch version >= 2.0.0, the `torch.distributed.launch` + # will pass the `--local-rank` parameter to `tools/train.py` instead + # of `--local_rank`. + parser.add_argument('--local_rank', '--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) diff --git a/tools/train.py b/tools/train.py index 1721306664..10fdaa1874 100644 --- a/tools/train.py +++ b/tools/train.py @@ -40,7 +40,10 @@ def parse_args(): choices=['none', 'pytorch', 'slurm', 'mpi'], default='none', help='job launcher') - parser.add_argument('--local_rank', type=int, default=0) + # When using PyTorch version >= 2.0.0, the `torch.distributed.launch` + # will pass the `--local-rank` parameter to `tools/train.py` instead + # of `--local_rank`. + parser.add_argument('--local_rank', '--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) From 58b43fc26ed4a58ee5e57bd5bbaae3c0b04942e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E6=98=95=E8=BE=B0?= Date: Thu, 30 Mar 2023 17:22:56 +0800 Subject: [PATCH 31/32] [Doc] Temporarily skip errors in building pdf docs at readthedocs (#2814) --- .readthedocs.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.readthedocs.yml b/.readthedocs.yml index 6cfbf5d310..070c61832b 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -1,6 +1,7 @@ version: 2 -formats: all +formats: + - epub python: version: 3.7 From c448646a925d1ea00fa1fa1b89c95afc00c9a69b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E6=98=95=E8=BE=B0?= Date: Fri, 31 Mar 2023 16:26:30 +0800 Subject: [PATCH 32/32] [Doc] Refine doc and fix links (#2821) ## Motivation - Create the `main` branch ## Modification Modify links from `dev-1.x` to `main` --- README.md | 2 +- configs/ann/README.md | 44 ++--- configs/apcnet/README.md | 32 ++-- configs/beit/README.md | 8 +- configs/bisenetv1/README.md | 30 +-- configs/bisenetv2/README.md | 12 +- configs/ccnet/README.md | 44 ++--- configs/cgnet/README.md | 8 +- configs/convnext/README.md | 16 +- configs/danet/README.md | 44 ++--- configs/deeplabv3/README.md | 110 +++++------ configs/deeplabv3plus/README.md | 126 ++++++------- configs/dmnet/README.md | 32 ++-- configs/dnlnet/README.md | 32 ++-- configs/dpt/README.md | 6 +- configs/encnet/README.md | 32 ++-- configs/erfnet/README.md | 6 +- configs/fastfcn/README.md | 34 ++-- configs/fastscnn/README.md | 6 +- configs/fcn/README.md | 102 +++++----- configs/gcnet/README.md | 44 ++--- configs/hrnet/README.md | 110 +++++------ configs/icnet/README.md | 28 +-- configs/isanet/README.md | 44 ++--- configs/knet/README.md | 18 +- configs/mae/README.md | 6 +- configs/mask2former/README.md | 34 ++-- configs/maskformer/README.md | 12 +- configs/mobilenet_v2/README.md | 24 +-- configs/mobilenet_v3/README.md | 12 +- configs/nonlocal_net/README.md | 44 ++--- configs/ocrnet/README.md | 64 +++---- configs/pidnet/README.md | 12 +- configs/pidnet/metafile.yaml | 6 +- configs/point_rend/README.md | 16 +- configs/poolformer/README.md | 14 +- configs/psanet/README.md | 44 ++--- configs/pspnet/README.md | 174 +++++++++--------- configs/resnest/README.md | 24 +-- configs/segformer/README.md | 34 ++-- configs/segmenter/README.md | 14 +- configs/segnext/README.md | 16 +- configs/segnext/metafile.yaml | 8 +- configs/sem_fpn/README.md | 16 +- configs/setr/README.md | 22 +-- configs/stdc/README.md | 12 +- configs/twins/README.md | 28 +-- configs/unet/README.md | 70 +++---- configs/upernet/README.md | 44 ++--- configs/vit/README.md | 26 +-- demo/MMSegmentation_Tutorial.ipynb | 4 +- docker/Dockerfile | 2 +- docs/en/advanced_guides/add_models.md | 6 +- docs/en/advanced_guides/data_flow.md | 22 +-- docs/en/advanced_guides/datasets.md | 16 +- docs/en/advanced_guides/engine.md | 24 +-- docs/en/advanced_guides/evaluation.md | 5 +- docs/en/advanced_guides/models.md | 21 +-- docs/en/get_started.md | 6 +- docs/en/model_zoo.md | 60 +++--- docs/en/modelzoo_statistics.md | 94 +++++----- docs/en/notes/faq.md | 2 +- docs/en/overview.md | 6 +- docs/en/switch_language.md | 4 +- docs/en/user_guides/2_dataset_prepare.md | 2 +- docs/en/user_guides/3_inference.md | 2 +- docs/zh_cn/advanced_guides/add_models.md | 2 +- docs/zh_cn/advanced_guides/data_flow.md | 22 +-- docs/zh_cn/advanced_guides/datasets.md | 14 +- docs/zh_cn/advanced_guides/engine.md | 26 +-- docs/zh_cn/get_started.md | 4 +- docs/zh_cn/user_guides/2_dataset_prepare.md | 2 +- docs/zh_cn/user_guides/3_inference.md | 2 +- mmseg/apis/mmseg_inferencer.py | 4 +- mmseg/visualization/local_visualizer.py | 4 +- projects/example_project/README.md | 10 +- projects/faq.md | 2 +- projects/hssn/README.md | 6 +- projects/isnet/README.md | 8 +- projects/mapillary_dataset/README.md | 2 +- .../docs/en/user_guides/2_dataset_prepare.md | 2 +- 81 files changed, 1058 insertions(+), 1074 deletions(-) diff --git a/README.md b/README.md index b7855918f8..e47f6d080c 100644 --- a/README.md +++ b/README.md @@ -97,7 +97,7 @@ Please refer to [get_started.md](docs/en/get_started.md#installation) for instal Please see [Overview](docs/en/overview.md) for the general introduction of MMSegmentation. Please see [user guides](https://mmsegmentation.readthedocs.io/en/1.x/user_guides/index.html#) for the basic usage of MMSegmentation. -There are also [advanced tutorials](https://mmsegmentation.readthedocs.io/en/dev-1.x/advanced_guides/index.html) for in-depth understanding of mmseg design and implementation . +There are also [advanced tutorials](https://mmsegmentation.readthedocs.io/en/main/advanced_guides/index.html) for in-depth understanding of mmseg design and implementation . A Colab tutorial is also provided. You may preview the notebook [here](demo/MMSegmentation_Tutorial.ipynb) or directly [run](https://colab.research.google.com/github/open-mmlab/mmsegmentation/blob/1.x/demo/MMSegmentation_Tutorial.ipynb) on Colab. diff --git a/configs/ann/README.md b/configs/ann/README.md index cbc1be2dc1..1281a9ee14 100644 --- a/configs/ann/README.md +++ b/configs/ann/README.md @@ -26,34 +26,34 @@ The non-local module works as a particularly useful technique for semantic segme ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| ANN | R-50-D8 | 512x1024 | 40000 | 6 | 3.71 | V100 | 77.40 | 78.57 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ann/ann_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r50-d8_512x1024_40k_cityscapes/ann_r50-d8_512x1024_40k_cityscapes_20200605_095211-049fc292.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r50-d8_512x1024_40k_cityscapes/ann_r50-d8_512x1024_40k_cityscapes_20200605_095211.log.json) | -| ANN | R-101-D8 | 512x1024 | 40000 | 9.5 | 2.55 | V100 | 76.55 | 78.85 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ann/ann_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r101-d8_512x1024_40k_cityscapes/ann_r101-d8_512x1024_40k_cityscapes_20200605_095243-adf6eece.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r101-d8_512x1024_40k_cityscapes/ann_r101-d8_512x1024_40k_cityscapes_20200605_095243.log.json) | -| ANN | R-50-D8 | 769x769 | 40000 | 6.8 | 1.70 | V100 | 78.89 | 80.46 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ann/ann_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r50-d8_769x769_40k_cityscapes/ann_r50-d8_769x769_40k_cityscapes_20200530_025712-2b46b04d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r50-d8_769x769_40k_cityscapes/ann_r50-d8_769x769_40k_cityscapes_20200530_025712.log.json) | -| ANN | R-101-D8 | 769x769 | 40000 | 10.7 | 1.15 | V100 | 79.32 | 80.94 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ann/ann_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r101-d8_769x769_40k_cityscapes/ann_r101-d8_769x769_40k_cityscapes_20200530_025720-059bff28.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r101-d8_769x769_40k_cityscapes/ann_r101-d8_769x769_40k_cityscapes_20200530_025720.log.json) | -| ANN | R-50-D8 | 512x1024 | 80000 | - | - | V100 | 77.34 | 78.65 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ann/ann_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r50-d8_512x1024_80k_cityscapes/ann_r50-d8_512x1024_80k_cityscapes_20200607_101911-5a9ad545.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r50-d8_512x1024_80k_cityscapes/ann_r50-d8_512x1024_80k_cityscapes_20200607_101911.log.json) | -| ANN | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 77.14 | 78.81 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ann/ann_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r101-d8_512x1024_80k_cityscapes/ann_r101-d8_512x1024_80k_cityscapes_20200607_013728-aceccc6e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r101-d8_512x1024_80k_cityscapes/ann_r101-d8_512x1024_80k_cityscapes_20200607_013728.log.json) | -| ANN | R-50-D8 | 769x769 | 80000 | - | - | V100 | 78.88 | 80.57 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ann/ann_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r50-d8_769x769_80k_cityscapes/ann_r50-d8_769x769_80k_cityscapes_20200607_044426-cc7ff323.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r50-d8_769x769_80k_cityscapes/ann_r50-d8_769x769_80k_cityscapes_20200607_044426.log.json) | -| ANN | R-101-D8 | 769x769 | 80000 | - | - | V100 | 78.80 | 80.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ann/ann_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r101-d8_769x769_80k_cityscapes/ann_r101-d8_769x769_80k_cityscapes_20200607_013713-a9d4be8d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r101-d8_769x769_80k_cityscapes/ann_r101-d8_769x769_80k_cityscapes_20200607_013713.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| ANN | R-50-D8 | 512x1024 | 40000 | 6 | 3.71 | V100 | 77.40 | 78.57 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ann/ann_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r50-d8_512x1024_40k_cityscapes/ann_r50-d8_512x1024_40k_cityscapes_20200605_095211-049fc292.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r50-d8_512x1024_40k_cityscapes/ann_r50-d8_512x1024_40k_cityscapes_20200605_095211.log.json) | +| ANN | R-101-D8 | 512x1024 | 40000 | 9.5 | 2.55 | V100 | 76.55 | 78.85 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ann/ann_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r101-d8_512x1024_40k_cityscapes/ann_r101-d8_512x1024_40k_cityscapes_20200605_095243-adf6eece.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r101-d8_512x1024_40k_cityscapes/ann_r101-d8_512x1024_40k_cityscapes_20200605_095243.log.json) | +| ANN | R-50-D8 | 769x769 | 40000 | 6.8 | 1.70 | V100 | 78.89 | 80.46 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ann/ann_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r50-d8_769x769_40k_cityscapes/ann_r50-d8_769x769_40k_cityscapes_20200530_025712-2b46b04d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r50-d8_769x769_40k_cityscapes/ann_r50-d8_769x769_40k_cityscapes_20200530_025712.log.json) | +| ANN | R-101-D8 | 769x769 | 40000 | 10.7 | 1.15 | V100 | 79.32 | 80.94 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ann/ann_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r101-d8_769x769_40k_cityscapes/ann_r101-d8_769x769_40k_cityscapes_20200530_025720-059bff28.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r101-d8_769x769_40k_cityscapes/ann_r101-d8_769x769_40k_cityscapes_20200530_025720.log.json) | +| ANN | R-50-D8 | 512x1024 | 80000 | - | - | V100 | 77.34 | 78.65 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ann/ann_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r50-d8_512x1024_80k_cityscapes/ann_r50-d8_512x1024_80k_cityscapes_20200607_101911-5a9ad545.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r50-d8_512x1024_80k_cityscapes/ann_r50-d8_512x1024_80k_cityscapes_20200607_101911.log.json) | +| ANN | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 77.14 | 78.81 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ann/ann_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r101-d8_512x1024_80k_cityscapes/ann_r101-d8_512x1024_80k_cityscapes_20200607_013728-aceccc6e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r101-d8_512x1024_80k_cityscapes/ann_r101-d8_512x1024_80k_cityscapes_20200607_013728.log.json) | +| ANN | R-50-D8 | 769x769 | 80000 | - | - | V100 | 78.88 | 80.57 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ann/ann_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r50-d8_769x769_80k_cityscapes/ann_r50-d8_769x769_80k_cityscapes_20200607_044426-cc7ff323.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r50-d8_769x769_80k_cityscapes/ann_r50-d8_769x769_80k_cityscapes_20200607_044426.log.json) | +| ANN | R-101-D8 | 769x769 | 80000 | - | - | V100 | 78.80 | 80.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ann/ann_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r101-d8_769x769_80k_cityscapes/ann_r101-d8_769x769_80k_cityscapes_20200607_013713-a9d4be8d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r101-d8_769x769_80k_cityscapes/ann_r101-d8_769x769_80k_cityscapes_20200607_013713.log.json) | ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| ANN | R-50-D8 | 512x512 | 80000 | 9.1 | 21.01 | V100 | 41.01 | 42.30 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ann/ann_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r50-d8_512x512_80k_ade20k/ann_r50-d8_512x512_80k_ade20k_20200615_014818-26f75e11.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r50-d8_512x512_80k_ade20k/ann_r50-d8_512x512_80k_ade20k_20200615_014818.log.json) | -| ANN | R-101-D8 | 512x512 | 80000 | 12.5 | 14.12 | V100 | 42.94 | 44.18 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ann/ann_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r101-d8_512x512_80k_ade20k/ann_r101-d8_512x512_80k_ade20k_20200615_014818-c0153543.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r101-d8_512x512_80k_ade20k/ann_r101-d8_512x512_80k_ade20k_20200615_014818.log.json) | -| ANN | R-50-D8 | 512x512 | 160000 | - | - | V100 | 41.74 | 42.62 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ann/ann_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r50-d8_512x512_160k_ade20k/ann_r50-d8_512x512_160k_ade20k_20200615_231733-892247bc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r50-d8_512x512_160k_ade20k/ann_r50-d8_512x512_160k_ade20k_20200615_231733.log.json) | -| ANN | R-101-D8 | 512x512 | 160000 | - | - | V100 | 42.94 | 44.06 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ann/ann_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r101-d8_512x512_160k_ade20k/ann_r101-d8_512x512_160k_ade20k_20200615_231733-955eb1ec.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r101-d8_512x512_160k_ade20k/ann_r101-d8_512x512_160k_ade20k_20200615_231733.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| ANN | R-50-D8 | 512x512 | 80000 | 9.1 | 21.01 | V100 | 41.01 | 42.30 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ann/ann_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r50-d8_512x512_80k_ade20k/ann_r50-d8_512x512_80k_ade20k_20200615_014818-26f75e11.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r50-d8_512x512_80k_ade20k/ann_r50-d8_512x512_80k_ade20k_20200615_014818.log.json) | +| ANN | R-101-D8 | 512x512 | 80000 | 12.5 | 14.12 | V100 | 42.94 | 44.18 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ann/ann_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r101-d8_512x512_80k_ade20k/ann_r101-d8_512x512_80k_ade20k_20200615_014818-c0153543.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r101-d8_512x512_80k_ade20k/ann_r101-d8_512x512_80k_ade20k_20200615_014818.log.json) | +| ANN | R-50-D8 | 512x512 | 160000 | - | - | V100 | 41.74 | 42.62 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ann/ann_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r50-d8_512x512_160k_ade20k/ann_r50-d8_512x512_160k_ade20k_20200615_231733-892247bc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r50-d8_512x512_160k_ade20k/ann_r50-d8_512x512_160k_ade20k_20200615_231733.log.json) | +| ANN | R-101-D8 | 512x512 | 160000 | - | - | V100 | 42.94 | 44.06 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ann/ann_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r101-d8_512x512_160k_ade20k/ann_r101-d8_512x512_160k_ade20k_20200615_231733-955eb1ec.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r101-d8_512x512_160k_ade20k/ann_r101-d8_512x512_160k_ade20k_20200615_231733.log.json) | ### Pascal VOC 2012 + Aug -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| ANN | R-50-D8 | 512x512 | 20000 | 6 | 20.92 | V100 | 74.86 | 76.13 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ann/ann_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r50-d8_512x512_20k_voc12aug/ann_r50-d8_512x512_20k_voc12aug_20200617_222246-dfcb1c62.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r50-d8_512x512_20k_voc12aug/ann_r50-d8_512x512_20k_voc12aug_20200617_222246.log.json) | -| ANN | R-101-D8 | 512x512 | 20000 | 9.5 | 13.94 | V100 | 77.47 | 78.70 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ann/ann_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r101-d8_512x512_20k_voc12aug/ann_r101-d8_512x512_20k_voc12aug_20200617_222246-2fad0042.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r101-d8_512x512_20k_voc12aug/ann_r101-d8_512x512_20k_voc12aug_20200617_222246.log.json) | -| ANN | R-50-D8 | 512x512 | 40000 | - | - | V100 | 76.56 | 77.51 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ann/ann_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r50-d8_512x512_40k_voc12aug/ann_r50-d8_512x512_40k_voc12aug_20200613_231314-b5dac322.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r50-d8_512x512_40k_voc12aug/ann_r50-d8_512x512_40k_voc12aug_20200613_231314.log.json) | -| ANN | R-101-D8 | 512x512 | 40000 | - | - | V100 | 76.70 | 78.06 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ann/ann_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r101-d8_512x512_40k_voc12aug/ann_r101-d8_512x512_40k_voc12aug_20200613_231314-bd205bbe.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r101-d8_512x512_40k_voc12aug/ann_r101-d8_512x512_40k_voc12aug_20200613_231314.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| ANN | R-50-D8 | 512x512 | 20000 | 6 | 20.92 | V100 | 74.86 | 76.13 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ann/ann_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r50-d8_512x512_20k_voc12aug/ann_r50-d8_512x512_20k_voc12aug_20200617_222246-dfcb1c62.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r50-d8_512x512_20k_voc12aug/ann_r50-d8_512x512_20k_voc12aug_20200617_222246.log.json) | +| ANN | R-101-D8 | 512x512 | 20000 | 9.5 | 13.94 | V100 | 77.47 | 78.70 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ann/ann_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r101-d8_512x512_20k_voc12aug/ann_r101-d8_512x512_20k_voc12aug_20200617_222246-2fad0042.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r101-d8_512x512_20k_voc12aug/ann_r101-d8_512x512_20k_voc12aug_20200617_222246.log.json) | +| ANN | R-50-D8 | 512x512 | 40000 | - | - | V100 | 76.56 | 77.51 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ann/ann_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r50-d8_512x512_40k_voc12aug/ann_r50-d8_512x512_40k_voc12aug_20200613_231314-b5dac322.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r50-d8_512x512_40k_voc12aug/ann_r50-d8_512x512_40k_voc12aug_20200613_231314.log.json) | +| ANN | R-101-D8 | 512x512 | 40000 | - | - | V100 | 76.70 | 78.06 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ann/ann_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r101-d8_512x512_40k_voc12aug/ann_r101-d8_512x512_40k_voc12aug_20200613_231314-bd205bbe.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ann/ann_r101-d8_512x512_40k_voc12aug/ann_r101-d8_512x512_40k_voc12aug_20200613_231314.log.json) | ## Citation diff --git a/configs/apcnet/README.md b/configs/apcnet/README.md index 0d7f1d6614..9104f3c87f 100644 --- a/configs/apcnet/README.md +++ b/configs/apcnet/README.md @@ -26,25 +26,25 @@ Recent studies witnessed that context features can significantly improve the per ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| APCNet | R-50-D8 | 512x1024 | 40000 | 7.7 | 3.57 | V100 | 78.02 | 79.26 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/apcnet/apcnet_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r50-d8_512x1024_40k_cityscapes/apcnet_r50-d8_512x1024_40k_cityscapes_20201214_115717-5e88fa33.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r50-d8_512x1024_40k_cityscapes/apcnet_r50-d8_512x1024_40k_cityscapes-20201214_115717.log.json) | -| APCNet | R-101-D8 | 512x1024 | 40000 | 11.2 | 2.15 | V100 | 79.08 | 80.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/apcnet/apcnet_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r101-d8_512x1024_40k_cityscapes/apcnet_r101-d8_512x1024_40k_cityscapes_20201214_115716-abc9d111.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r101-d8_512x1024_40k_cityscapes/apcnet_r101-d8_512x1024_40k_cityscapes-20201214_115716.log.json) | -| APCNet | R-50-D8 | 769x769 | 40000 | 8.7 | 1.52 | V100 | 77.89 | 79.75 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/apcnet/apcnet_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r50-d8_769x769_40k_cityscapes/apcnet_r50-d8_769x769_40k_cityscapes_20201214_115717-2a2628d7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r50-d8_769x769_40k_cityscapes/apcnet_r50-d8_769x769_40k_cityscapes-20201214_115717.log.json) | -| APCNet | R-101-D8 | 769x769 | 40000 | 12.7 | 1.03 | V100 | 77.96 | 79.24 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/apcnet/apcnet_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r101-d8_769x769_40k_cityscapes/apcnet_r101-d8_769x769_40k_cityscapes_20201214_115718-b650de90.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r101-d8_769x769_40k_cityscapes/apcnet_r101-d8_769x769_40k_cityscapes-20201214_115718.log.json) | -| APCNet | R-50-D8 | 512x1024 | 80000 | - | - | V100 | 78.96 | 79.94 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/apcnet/apcnet_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r50-d8_512x1024_80k_cityscapes/apcnet_r50-d8_512x1024_80k_cityscapes_20201214_115716-987f51e3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r50-d8_512x1024_80k_cityscapes/apcnet_r50-d8_512x1024_80k_cityscapes-20201214_115716.log.json) | -| APCNet | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 79.64 | 80.61 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/apcnet/apcnet_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r101-d8_512x1024_80k_cityscapes/apcnet_r101-d8_512x1024_80k_cityscapes_20201214_115705-b1ff208a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r101-d8_512x1024_80k_cityscapes/apcnet_r101-d8_512x1024_80k_cityscapes-20201214_115705.log.json) | -| APCNet | R-50-D8 | 769x769 | 80000 | - | - | V100 | 78.79 | 80.35 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/apcnet/apcnet_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r50-d8_769x769_80k_cityscapes/apcnet_r50-d8_769x769_80k_cityscapes_20201214_115718-7ea9fa12.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r50-d8_769x769_80k_cityscapes/apcnet_r50-d8_769x769_80k_cityscapes-20201214_115718.log.json) | -| APCNet | R-101-D8 | 769x769 | 80000 | - | - | V100 | 78.45 | 79.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/apcnet/apcnet_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r101-d8_769x769_80k_cityscapes/apcnet_r101-d8_769x769_80k_cityscapes_20201214_115716-a7fbc2ab.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r101-d8_769x769_80k_cityscapes/apcnet_r101-d8_769x769_80k_cityscapes-20201214_115716.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| APCNet | R-50-D8 | 512x1024 | 40000 | 7.7 | 3.57 | V100 | 78.02 | 79.26 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/apcnet/apcnet_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r50-d8_512x1024_40k_cityscapes/apcnet_r50-d8_512x1024_40k_cityscapes_20201214_115717-5e88fa33.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r50-d8_512x1024_40k_cityscapes/apcnet_r50-d8_512x1024_40k_cityscapes-20201214_115717.log.json) | +| APCNet | R-101-D8 | 512x1024 | 40000 | 11.2 | 2.15 | V100 | 79.08 | 80.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/apcnet/apcnet_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r101-d8_512x1024_40k_cityscapes/apcnet_r101-d8_512x1024_40k_cityscapes_20201214_115716-abc9d111.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r101-d8_512x1024_40k_cityscapes/apcnet_r101-d8_512x1024_40k_cityscapes-20201214_115716.log.json) | +| APCNet | R-50-D8 | 769x769 | 40000 | 8.7 | 1.52 | V100 | 77.89 | 79.75 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/apcnet/apcnet_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r50-d8_769x769_40k_cityscapes/apcnet_r50-d8_769x769_40k_cityscapes_20201214_115717-2a2628d7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r50-d8_769x769_40k_cityscapes/apcnet_r50-d8_769x769_40k_cityscapes-20201214_115717.log.json) | +| APCNet | R-101-D8 | 769x769 | 40000 | 12.7 | 1.03 | V100 | 77.96 | 79.24 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/apcnet/apcnet_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r101-d8_769x769_40k_cityscapes/apcnet_r101-d8_769x769_40k_cityscapes_20201214_115718-b650de90.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r101-d8_769x769_40k_cityscapes/apcnet_r101-d8_769x769_40k_cityscapes-20201214_115718.log.json) | +| APCNet | R-50-D8 | 512x1024 | 80000 | - | - | V100 | 78.96 | 79.94 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/apcnet/apcnet_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r50-d8_512x1024_80k_cityscapes/apcnet_r50-d8_512x1024_80k_cityscapes_20201214_115716-987f51e3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r50-d8_512x1024_80k_cityscapes/apcnet_r50-d8_512x1024_80k_cityscapes-20201214_115716.log.json) | +| APCNet | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 79.64 | 80.61 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/apcnet/apcnet_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r101-d8_512x1024_80k_cityscapes/apcnet_r101-d8_512x1024_80k_cityscapes_20201214_115705-b1ff208a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r101-d8_512x1024_80k_cityscapes/apcnet_r101-d8_512x1024_80k_cityscapes-20201214_115705.log.json) | +| APCNet | R-50-D8 | 769x769 | 80000 | - | - | V100 | 78.79 | 80.35 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/apcnet/apcnet_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r50-d8_769x769_80k_cityscapes/apcnet_r50-d8_769x769_80k_cityscapes_20201214_115718-7ea9fa12.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r50-d8_769x769_80k_cityscapes/apcnet_r50-d8_769x769_80k_cityscapes-20201214_115718.log.json) | +| APCNet | R-101-D8 | 769x769 | 80000 | - | - | V100 | 78.45 | 79.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/apcnet/apcnet_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r101-d8_769x769_80k_cityscapes/apcnet_r101-d8_769x769_80k_cityscapes_20201214_115716-a7fbc2ab.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r101-d8_769x769_80k_cityscapes/apcnet_r101-d8_769x769_80k_cityscapes-20201214_115716.log.json) | ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| APCNet | R-50-D8 | 512x512 | 80000 | 10.1 | 19.61 | V100 | 42.20 | 43.30 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/apcnet/apcnet_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r50-d8_512x512_80k_ade20k/apcnet_r50-d8_512x512_80k_ade20k_20201214_115705-a8626293.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r50-d8_512x512_80k_ade20k/apcnet_r50-d8_512x512_80k_ade20k-20201214_115705.log.json) | -| APCNet | R-101-D8 | 512x512 | 80000 | 13.6 | 13.10 | V100 | 45.54 | 46.65 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/apcnet/apcnet_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r101-d8_512x512_80k_ade20k/apcnet_r101-d8_512x512_80k_ade20k_20201214_115704-c656c3fb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r101-d8_512x512_80k_ade20k/apcnet_r101-d8_512x512_80k_ade20k-20201214_115704.log.json) | -| APCNet | R-50-D8 | 512x512 | 160000 | - | - | V100 | 43.40 | 43.94 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/apcnet/apcnet_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r50-d8_512x512_160k_ade20k/apcnet_r50-d8_512x512_160k_ade20k_20201214_115706-25fb92c2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r50-d8_512x512_160k_ade20k/apcnet_r50-d8_512x512_160k_ade20k-20201214_115706.log.json) | -| APCNet | R-101-D8 | 512x512 | 160000 | - | - | V100 | 45.41 | 46.63 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/apcnet/apcnet_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r101-d8_512x512_160k_ade20k/apcnet_r101-d8_512x512_160k_ade20k_20201214_115705-73f9a8d7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r101-d8_512x512_160k_ade20k/apcnet_r101-d8_512x512_160k_ade20k-20201214_115705.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| APCNet | R-50-D8 | 512x512 | 80000 | 10.1 | 19.61 | V100 | 42.20 | 43.30 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/apcnet/apcnet_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r50-d8_512x512_80k_ade20k/apcnet_r50-d8_512x512_80k_ade20k_20201214_115705-a8626293.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r50-d8_512x512_80k_ade20k/apcnet_r50-d8_512x512_80k_ade20k-20201214_115705.log.json) | +| APCNet | R-101-D8 | 512x512 | 80000 | 13.6 | 13.10 | V100 | 45.54 | 46.65 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/apcnet/apcnet_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r101-d8_512x512_80k_ade20k/apcnet_r101-d8_512x512_80k_ade20k_20201214_115704-c656c3fb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r101-d8_512x512_80k_ade20k/apcnet_r101-d8_512x512_80k_ade20k-20201214_115704.log.json) | +| APCNet | R-50-D8 | 512x512 | 160000 | - | - | V100 | 43.40 | 43.94 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/apcnet/apcnet_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r50-d8_512x512_160k_ade20k/apcnet_r50-d8_512x512_160k_ade20k_20201214_115706-25fb92c2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r50-d8_512x512_160k_ade20k/apcnet_r50-d8_512x512_160k_ade20k-20201214_115706.log.json) | +| APCNet | R-101-D8 | 512x512 | 160000 | - | - | V100 | 45.41 | 46.63 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/apcnet/apcnet_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r101-d8_512x512_160k_ade20k/apcnet_r101-d8_512x512_160k_ade20k_20201214_115705-73f9a8d7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/apcnet/apcnet_r101-d8_512x512_160k_ade20k/apcnet_r101-d8_512x512_160k_ade20k-20201214_115705.log.json) | ## Citation diff --git a/configs/beit/README.md b/configs/beit/README.md index 8e34e29410..b005c88c50 100644 --- a/configs/beit/README.md +++ b/configs/beit/README.md @@ -67,10 +67,10 @@ upernet_beit-large_fp16_8x1_640x640_160k_ade20k-8fc0dd5d.pth $GPUS --eval mIoU ### ADE20K -| Method | Backbone | Crop Size | pretrain | pretrain img size | Batch Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------- | -------- | --------- | ------------ | ----------------- | ---------- | ------- | -------- | -------------- | ------ | ----- | ------------: | ----------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| UPerNet | BEiT-B | 640x640 | ImageNet-22K | 224x224 | 16 | 160000 | 15.88 | 2.00 | V100 | 53.08 | 53.84 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/beit/beit-base_upernet_8xb2-160k_ade20k-640x640.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/beit/upernet_beit-base_8x2_640x640_160k_ade20k/upernet_beit-base_8x2_640x640_160k_ade20k-eead221d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/beit/upernet_beit-base_8x2_640x640_160k_ade20k/upernet_beit-base_8x2_640x640_160k_ade20k.log.json) | -| UPerNet | BEiT-L | 640x640 | ImageNet-22K | 224x224 | 8 | 320000 | 22.64 | 0.96 | V100 | 56.33 | 56.84 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/beit/beit-large_upernet_8xb1-amp-160k_ade20k-640x640.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/beit/upernet_beit-large_fp16_8x1_640x640_160k_ade20k/upernet_beit-large_fp16_8x1_640x640_160k_ade20k-8fc0dd5d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/beit/upernet_beit-large_fp16_8x1_640x640_160k_ade20k/upernet_beit-large_fp16_8x1_640x640_160k_ade20k.log.json) | +| Method | Backbone | Crop Size | pretrain | pretrain img size | Batch Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------- | -------- | --------- | ------------ | ----------------- | ---------- | ------- | -------- | -------------- | ------ | ----- | ------------: | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| UPerNet | BEiT-B | 640x640 | ImageNet-22K | 224x224 | 16 | 160000 | 15.88 | 2.00 | V100 | 53.08 | 53.84 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/beit/beit-base_upernet_8xb2-160k_ade20k-640x640.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/beit/upernet_beit-base_8x2_640x640_160k_ade20k/upernet_beit-base_8x2_640x640_160k_ade20k-eead221d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/beit/upernet_beit-base_8x2_640x640_160k_ade20k/upernet_beit-base_8x2_640x640_160k_ade20k.log.json) | +| UPerNet | BEiT-L | 640x640 | ImageNet-22K | 224x224 | 8 | 320000 | 22.64 | 0.96 | V100 | 56.33 | 56.84 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/beit/beit-large_upernet_8xb1-amp-160k_ade20k-640x640.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/beit/upernet_beit-large_fp16_8x1_640x640_160k_ade20k/upernet_beit-large_fp16_8x1_640x640_160k_ade20k-8fc0dd5d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/beit/upernet_beit-large_fp16_8x1_640x640_160k_ade20k/upernet_beit-large_fp16_8x1_640x640_160k_ade20k.log.json) | ## Citation diff --git a/configs/bisenetv1/README.md b/configs/bisenetv1/README.md index c895fdfe63..a5058957f0 100644 --- a/configs/bisenetv1/README.md +++ b/configs/bisenetv1/README.md @@ -26,24 +26,24 @@ Semantic segmentation requires both rich spatial information and sizeable recept ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| --------- | ---------------------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| BiSeNetV1 | R-18-D32 (No Pretrain) | 1024x1024 | 160000 | 5.69 | 31.77 | V100 | 74.44 | 77.05 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/bisenetv1/bisenetv1_r18-d32_4xb4-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r18-d32_4x4_1024x1024_160k_cityscapes/bisenetv1_r18-d32_4x4_1024x1024_160k_cityscapes_20210922_172239-c55e78e2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r18-d32_4x4_1024x1024_160k_cityscapes/bisenetv1_r18-d32_4x4_1024x1024_160k_cityscapes_20210922_172239.log.json) | -| BiSeNetV1 | R-18-D32 | 1024x1024 | 160000 | 5.69 | 31.77 | V100 | 74.37 | 76.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/bisenetv1/bisenetv1_r18-d32-in1k-pre_4xb4-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r18-d32_in1k-pre_4x4_1024x1024_160k_cityscapes/bisenetv1_r18-d32_in1k-pre_4x4_1024x1024_160k_cityscapes_20210905_220251-8ba80eff.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r18-d32_in1k-pre_4x4_1024x1024_160k_cityscapes/bisenetv1_r18-d32_in1k-pre_4x4_1024x1024_160k_cityscapes_20210905_220251.log.json) | -| BiSeNetV1 | R-18-D32 (4x8) | 1024x1024 | 160000 | 11.17 | 31.77 | V100 | 75.16 | 77.24 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/bisenetv1/bisenetv1_r18-d32-in1k-pre_4xb8-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r18-d32_in1k-pre_4x8_1024x1024_160k_cityscapes/bisenetv1_r18-d32_in1k-pre_4x8_1024x1024_160k_cityscapes_20210905_220322-bb8db75f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r18-d32_in1k-pre_4x8_1024x1024_160k_cityscapes/bisenetv1_r18-d32_in1k-pre_4x8_1024x1024_160k_cityscapes_20210905_220322.log.json) | -| BiSeNetV1 | R-50-D32 (No Pretrain) | 1024x1024 | 160000 | 15.39 | 7.71 | V100 | 76.92 | 78.87 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/bisenetv1/bisenetv1_r50-d32_4xb4-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r50-d32_4x4_1024x1024_160k_cityscapes/bisenetv1_r50-d32_4x4_1024x1024_160k_cityscapes_20210923_222639-7b28a2a6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r50-d32_4x4_1024x1024_160k_cityscapes/bisenetv1_r50-d32_4x4_1024x1024_160k_cityscapes_20210923_222639.log.json) | -| BiSeNetV1 | R-50-D32 | 1024x1024 | 160000 | 15.39 | 7.71 | V100 | 77.68 | 79.57 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/bisenetv1/bisenetv1_r50-d32-in1k-pre_4xb4-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r50-d32_in1k-pre_4x4_1024x1024_160k_cityscapes/bisenetv1_r50-d32_in1k-pre_4x4_1024x1024_160k_cityscapes_20210917_234628-8b304447.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r50-d32_in1k-pre_4x4_1024x1024_160k_cityscapes/bisenetv1_r50-d32_in1k-pre_4x4_1024x1024_160k_cityscapes_20210917_234628.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| --------- | ---------------------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| BiSeNetV1 | R-18-D32 (No Pretrain) | 1024x1024 | 160000 | 5.69 | 31.77 | V100 | 74.44 | 77.05 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/bisenetv1/bisenetv1_r18-d32_4xb4-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r18-d32_4x4_1024x1024_160k_cityscapes/bisenetv1_r18-d32_4x4_1024x1024_160k_cityscapes_20210922_172239-c55e78e2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r18-d32_4x4_1024x1024_160k_cityscapes/bisenetv1_r18-d32_4x4_1024x1024_160k_cityscapes_20210922_172239.log.json) | +| BiSeNetV1 | R-18-D32 | 1024x1024 | 160000 | 5.69 | 31.77 | V100 | 74.37 | 76.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/bisenetv1/bisenetv1_r18-d32-in1k-pre_4xb4-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r18-d32_in1k-pre_4x4_1024x1024_160k_cityscapes/bisenetv1_r18-d32_in1k-pre_4x4_1024x1024_160k_cityscapes_20210905_220251-8ba80eff.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r18-d32_in1k-pre_4x4_1024x1024_160k_cityscapes/bisenetv1_r18-d32_in1k-pre_4x4_1024x1024_160k_cityscapes_20210905_220251.log.json) | +| BiSeNetV1 | R-18-D32 (4x8) | 1024x1024 | 160000 | 11.17 | 31.77 | V100 | 75.16 | 77.24 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/bisenetv1/bisenetv1_r18-d32-in1k-pre_4xb8-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r18-d32_in1k-pre_4x8_1024x1024_160k_cityscapes/bisenetv1_r18-d32_in1k-pre_4x8_1024x1024_160k_cityscapes_20210905_220322-bb8db75f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r18-d32_in1k-pre_4x8_1024x1024_160k_cityscapes/bisenetv1_r18-d32_in1k-pre_4x8_1024x1024_160k_cityscapes_20210905_220322.log.json) | +| BiSeNetV1 | R-50-D32 (No Pretrain) | 1024x1024 | 160000 | 15.39 | 7.71 | V100 | 76.92 | 78.87 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/bisenetv1/bisenetv1_r50-d32_4xb4-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r50-d32_4x4_1024x1024_160k_cityscapes/bisenetv1_r50-d32_4x4_1024x1024_160k_cityscapes_20210923_222639-7b28a2a6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r50-d32_4x4_1024x1024_160k_cityscapes/bisenetv1_r50-d32_4x4_1024x1024_160k_cityscapes_20210923_222639.log.json) | +| BiSeNetV1 | R-50-D32 | 1024x1024 | 160000 | 15.39 | 7.71 | V100 | 77.68 | 79.57 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/bisenetv1/bisenetv1_r50-d32-in1k-pre_4xb4-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r50-d32_in1k-pre_4x4_1024x1024_160k_cityscapes/bisenetv1_r50-d32_in1k-pre_4x4_1024x1024_160k_cityscapes_20210917_234628-8b304447.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r50-d32_in1k-pre_4x4_1024x1024_160k_cityscapes/bisenetv1_r50-d32_in1k-pre_4x4_1024x1024_160k_cityscapes_20210917_234628.log.json) | ### COCO-Stuff 164k -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| --------- | ----------------------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| BiSeNetV1 | R-18-D32 (No Pretrain) | 512x512 | 160000 | - | - | V100 | 25.45 | 26.15 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/bisenetv1/bisenetv1_r18-d32_4xb4-160k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r18-d32_lr5e-3_4x4_512x512_160k_coco-stuff164k/bisenetv1_r18-d32_lr5e-3_4x4_512x512_160k_coco-stuff164k_20211022_054328-046aa2f2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r18-d32_lr5e-3_4x4_512x512_160k_coco-stuff164k/bisenetv1_r18-d32_lr5e-3_4x4_512x512_160k_coco-stuff164k_20211022_054328.log.json) | -| BiSeNetV1 | R-18-D32 | 512x512 | 160000 | 6.33 | 74.24 | V100 | 28.55 | 29.26 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/bisenetv1/bisenetv1_r18-d32-in1k-pre_4xb4-160k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r18-d32_in1k-pre_lr5e-3_4x4_512x512_160k_coco-stuff164k/bisenetv1_r18-d32_in1k-pre_lr5e-3_4x4_512x512_160k_coco-stuff164k_20211023_013100-f700dbf7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r18-d32_in1k-pre_lr5e-3_4x4_512x512_160k_coco-stuff164k/bisenetv1_r18-d32_in1k-pre_lr5e-3_4x4_512x512_160k_coco-stuff164k_20211023_013100.log.json) | -| BiSeNetV1 | R-50-D32 (No Pretrain) | 512x512 | 160000 | - | - | V100 | 29.82 | 30.33 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/bisenetv1/bisenetv1_r50-d32_4xb4-160k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r50-d32_lr5e-3_4x4_512x512_160k_coco-stuff164k/bisenetv1_r50-d32_lr5e-3_4x4_512x512_160k_coco-stuff164k_20211101_040616-d2bb0df4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r50-d32_lr5e-3_4x4_512x512_160k_coco-stuff164k/bisenetv1_r50-d32_lr5e-3_4x4_512x512_160k_coco-stuff164k_20211101_040616.log.json) | -| BiSeNetV1 | R-50-D32 | 512x512 | 160000 | 9.28 | 32.60 | V100 | 34.88 | 35.37 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/bisenetv1/bisenetv1_r50-d32-in1k-pre_4xb4-160k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r50-d32_in1k-pre_lr5e-3_4x4_512x512_160k_coco-stuff164k/bisenetv1_r50-d32_in1k-pre_lr5e-3_4x4_512x512_160k_coco-stuff164k_20211101_181932-66747911.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r50-d32_in1k-pre_lr5e-3_4x4_512x512_160k_coco-stuff164k/bisenetv1_r50-d32_in1k-pre_lr5e-3_4x4_512x512_160k_coco-stuff164k_20211101_181932.log.json) | -| BiSeNetV1 | R-101-D32 (No Pretrain) | 512x512 | 160000 | - | - | V100 | 31.14 | 31.76 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/bisenetv1/bisenetv1_r50-d32-in1k-pre_4xb4-160k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r101-d32_lr5e-3_4x4_512x512_160k_coco-stuff164k/bisenetv1_r101-d32_lr5e-3_4x4_512x512_160k_coco-stuff164k_20211102_164147-c6b32c3b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r101-d32_lr5e-3_4x4_512x512_160k_coco-stuff164k/bisenetv1_r101-d32_lr5e-3_4x4_512x512_160k_coco-stuff164k_20211102_164147.log.json) | -| BiSeNetV1 | R-101-D32 | 512x512 | 160000 | 10.36 | 25.25 | V100 | 37.38 | 37.99 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/bisenetv1/bisenetv1_r101-d32-in1k-pre_4xb4-160k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r101-d32_in1k-pre_lr5e-3_4x4_512x512_160k_coco-stuff164k/bisenetv1_r101-d32_in1k-pre_lr5e-3_4x4_512x512_160k_coco-stuff164k_20211101_225220-28c8f092.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r101-d32_in1k-pre_lr5e-3_4x4_512x512_160k_coco-stuff164k/bisenetv1_r101-d32_in1k-pre_lr5e-3_4x4_512x512_160k_coco-stuff164k_20211101_225220.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| --------- | ----------------------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| BiSeNetV1 | R-18-D32 (No Pretrain) | 512x512 | 160000 | - | - | V100 | 25.45 | 26.15 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/bisenetv1/bisenetv1_r18-d32_4xb4-160k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r18-d32_lr5e-3_4x4_512x512_160k_coco-stuff164k/bisenetv1_r18-d32_lr5e-3_4x4_512x512_160k_coco-stuff164k_20211022_054328-046aa2f2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r18-d32_lr5e-3_4x4_512x512_160k_coco-stuff164k/bisenetv1_r18-d32_lr5e-3_4x4_512x512_160k_coco-stuff164k_20211022_054328.log.json) | +| BiSeNetV1 | R-18-D32 | 512x512 | 160000 | 6.33 | 74.24 | V100 | 28.55 | 29.26 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/bisenetv1/bisenetv1_r18-d32-in1k-pre_4xb4-160k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r18-d32_in1k-pre_lr5e-3_4x4_512x512_160k_coco-stuff164k/bisenetv1_r18-d32_in1k-pre_lr5e-3_4x4_512x512_160k_coco-stuff164k_20211023_013100-f700dbf7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r18-d32_in1k-pre_lr5e-3_4x4_512x512_160k_coco-stuff164k/bisenetv1_r18-d32_in1k-pre_lr5e-3_4x4_512x512_160k_coco-stuff164k_20211023_013100.log.json) | +| BiSeNetV1 | R-50-D32 (No Pretrain) | 512x512 | 160000 | - | - | V100 | 29.82 | 30.33 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/bisenetv1/bisenetv1_r50-d32_4xb4-160k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r50-d32_lr5e-3_4x4_512x512_160k_coco-stuff164k/bisenetv1_r50-d32_lr5e-3_4x4_512x512_160k_coco-stuff164k_20211101_040616-d2bb0df4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r50-d32_lr5e-3_4x4_512x512_160k_coco-stuff164k/bisenetv1_r50-d32_lr5e-3_4x4_512x512_160k_coco-stuff164k_20211101_040616.log.json) | +| BiSeNetV1 | R-50-D32 | 512x512 | 160000 | 9.28 | 32.60 | V100 | 34.88 | 35.37 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/bisenetv1/bisenetv1_r50-d32-in1k-pre_4xb4-160k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r50-d32_in1k-pre_lr5e-3_4x4_512x512_160k_coco-stuff164k/bisenetv1_r50-d32_in1k-pre_lr5e-3_4x4_512x512_160k_coco-stuff164k_20211101_181932-66747911.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r50-d32_in1k-pre_lr5e-3_4x4_512x512_160k_coco-stuff164k/bisenetv1_r50-d32_in1k-pre_lr5e-3_4x4_512x512_160k_coco-stuff164k_20211101_181932.log.json) | +| BiSeNetV1 | R-101-D32 (No Pretrain) | 512x512 | 160000 | - | - | V100 | 31.14 | 31.76 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/bisenetv1/bisenetv1_r50-d32-in1k-pre_4xb4-160k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r101-d32_lr5e-3_4x4_512x512_160k_coco-stuff164k/bisenetv1_r101-d32_lr5e-3_4x4_512x512_160k_coco-stuff164k_20211102_164147-c6b32c3b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r101-d32_lr5e-3_4x4_512x512_160k_coco-stuff164k/bisenetv1_r101-d32_lr5e-3_4x4_512x512_160k_coco-stuff164k_20211102_164147.log.json) | +| BiSeNetV1 | R-101-D32 | 512x512 | 160000 | 10.36 | 25.25 | V100 | 37.38 | 37.99 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/bisenetv1/bisenetv1_r101-d32-in1k-pre_4xb4-160k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r101-d32_in1k-pre_lr5e-3_4x4_512x512_160k_coco-stuff164k/bisenetv1_r101-d32_in1k-pre_lr5e-3_4x4_512x512_160k_coco-stuff164k_20211101_225220-28c8f092.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv1/bisenetv1_r101-d32_in1k-pre_lr5e-3_4x4_512x512_160k_coco-stuff164k/bisenetv1_r101-d32_in1k-pre_lr5e-3_4x4_512x512_160k_coco-stuff164k_20211101_225220.log.json) | Note: diff --git a/configs/bisenetv2/README.md b/configs/bisenetv2/README.md index 1f44c01f36..a5871dfeb9 100644 --- a/configs/bisenetv2/README.md +++ b/configs/bisenetv2/README.md @@ -26,12 +26,12 @@ The low-level details and high-level semantics are both essential to the semanti ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| --------- | ---------------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| BiSeNetV2 | BiSeNetV2 | 1024x1024 | 160000 | 7.64 | 31.77 | V100 | 73.21 | 75.74 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/bisenetv2/bisenetv2_fcn_4xb4-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv2/bisenetv2_fcn_4x4_1024x1024_160k_cityscapes/bisenetv2_fcn_4x4_1024x1024_160k_cityscapes_20210902_015551-bcf10f09.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv2/bisenetv2_fcn_4x4_1024x1024_160k_cityscapes/bisenetv2_fcn_4x4_1024x1024_160k_cityscapes_20210902_015551.log.json) | -| BiSeNetV2 | BiSeNetV2 (OHEM) | 1024x1024 | 160000 | 7.64 | - | V100 | 73.57 | 75.80 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/bisenetv2/bisenetv2_fcn_4xb4-ohem-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv2/bisenetv2_fcn_ohem_4x4_1024x1024_160k_cityscapes/bisenetv2_fcn_ohem_4x4_1024x1024_160k_cityscapes_20210902_112947-5f8103b4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv2/bisenetv2_fcn_ohem_4x4_1024x1024_160k_cityscapes/bisenetv2_fcn_ohem_4x4_1024x1024_160k_cityscapes_20210902_112947.log.json) | -| BiSeNetV2 | BiSeNetV2 (4x8) | 1024x1024 | 160000 | 15.05 | - | V100 | 75.76 | 77.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/bisenetv2/bisenetv2_fcn_4xb8-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv2/bisenetv2_fcn_4x8_1024x1024_160k_cityscapes/bisenetv2_fcn_4x8_1024x1024_160k_cityscapes_20210903_000032-e1a2eed6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv2/bisenetv2_fcn_4x8_1024x1024_160k_cityscapes/bisenetv2_fcn_4x8_1024x1024_160k_cityscapes_20210903_000032.log.json) | -| BiSeNetV2 | BiSeNetV2 (FP16) | 1024x1024 | 160000 | 5.77 | 36.65 | V100 | 73.07 | 75.13 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/bisenetv2/bisenetv2_fcn_4xb4-amp-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv2/bisenetv2_fcn_fp16_4x4_1024x1024_160k_cityscapes/bisenetv2_fcn_fp16_4x4_1024x1024_160k_cityscapes_20210902_045942-b979777b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv2/bisenetv2_fcn_fp16_4x4_1024x1024_160k_cityscapes/bisenetv2_fcn_fp16_4x4_1024x1024_160k_cityscapes_20210902_045942.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| --------- | ---------------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| BiSeNetV2 | BiSeNetV2 | 1024x1024 | 160000 | 7.64 | 31.77 | V100 | 73.21 | 75.74 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/bisenetv2/bisenetv2_fcn_4xb4-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv2/bisenetv2_fcn_4x4_1024x1024_160k_cityscapes/bisenetv2_fcn_4x4_1024x1024_160k_cityscapes_20210902_015551-bcf10f09.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv2/bisenetv2_fcn_4x4_1024x1024_160k_cityscapes/bisenetv2_fcn_4x4_1024x1024_160k_cityscapes_20210902_015551.log.json) | +| BiSeNetV2 | BiSeNetV2 (OHEM) | 1024x1024 | 160000 | 7.64 | - | V100 | 73.57 | 75.80 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/bisenetv2/bisenetv2_fcn_4xb4-ohem-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv2/bisenetv2_fcn_ohem_4x4_1024x1024_160k_cityscapes/bisenetv2_fcn_ohem_4x4_1024x1024_160k_cityscapes_20210902_112947-5f8103b4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv2/bisenetv2_fcn_ohem_4x4_1024x1024_160k_cityscapes/bisenetv2_fcn_ohem_4x4_1024x1024_160k_cityscapes_20210902_112947.log.json) | +| BiSeNetV2 | BiSeNetV2 (4x8) | 1024x1024 | 160000 | 15.05 | - | V100 | 75.76 | 77.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/bisenetv2/bisenetv2_fcn_4xb8-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv2/bisenetv2_fcn_4x8_1024x1024_160k_cityscapes/bisenetv2_fcn_4x8_1024x1024_160k_cityscapes_20210903_000032-e1a2eed6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv2/bisenetv2_fcn_4x8_1024x1024_160k_cityscapes/bisenetv2_fcn_4x8_1024x1024_160k_cityscapes_20210903_000032.log.json) | +| BiSeNetV2 | BiSeNetV2 (FP16) | 1024x1024 | 160000 | 5.77 | 36.65 | V100 | 73.07 | 75.13 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/bisenetv2/bisenetv2_fcn_4xb4-amp-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv2/bisenetv2_fcn_fp16_4x4_1024x1024_160k_cityscapes/bisenetv2_fcn_fp16_4x4_1024x1024_160k_cityscapes_20210902_045942-b979777b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/bisenetv2/bisenetv2_fcn_fp16_4x4_1024x1024_160k_cityscapes/bisenetv2_fcn_fp16_4x4_1024x1024_160k_cityscapes_20210902_045942.log.json) | Note: diff --git a/configs/ccnet/README.md b/configs/ccnet/README.md index c7a0163495..64dd5f0298 100644 --- a/configs/ccnet/README.md +++ b/configs/ccnet/README.md @@ -26,34 +26,34 @@ Contextual information is vital in visual understanding problems, such as semant ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| CCNet | R-50-D8 | 512x1024 | 40000 | 6 | 3.32 | V100 | 77.76 | 78.87 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ccnet/ccnet_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_512x1024_40k_cityscapes/ccnet_r50-d8_512x1024_40k_cityscapes_20200616_142517-4123f401.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_512x1024_40k_cityscapes/ccnet_r50-d8_512x1024_40k_cityscapes_20200616_142517.log.json) | -| CCNet | R-101-D8 | 512x1024 | 40000 | 9.5 | 2.31 | V100 | 76.35 | 78.19 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ccnet/ccnet_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_512x1024_40k_cityscapes/ccnet_r101-d8_512x1024_40k_cityscapes_20200616_142540-a3b84ba6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_512x1024_40k_cityscapes/ccnet_r101-d8_512x1024_40k_cityscapes_20200616_142540.log.json) | -| CCNet | R-50-D8 | 769x769 | 40000 | 6.8 | 1.43 | V100 | 78.46 | 79.93 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ccnet/ccnet_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_769x769_40k_cityscapes/ccnet_r50-d8_769x769_40k_cityscapes_20200616_145125-76d11884.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_769x769_40k_cityscapes/ccnet_r50-d8_769x769_40k_cityscapes_20200616_145125.log.json) | -| CCNet | R-101-D8 | 769x769 | 40000 | 10.7 | 1.01 | V100 | 76.94 | 78.62 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ccnet/ccnet_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_769x769_40k_cityscapes/ccnet_r101-d8_769x769_40k_cityscapes_20200617_101428-4f57c8d0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_769x769_40k_cityscapes/ccnet_r101-d8_769x769_40k_cityscapes_20200617_101428.log.json) | -| CCNet | R-50-D8 | 512x1024 | 80000 | - | - | V100 | 79.03 | 80.16 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ccnet/ccnet_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_512x1024_80k_cityscapes/ccnet_r50-d8_512x1024_80k_cityscapes_20200617_010421-869a3423.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_512x1024_80k_cityscapes/ccnet_r50-d8_512x1024_80k_cityscapes_20200617_010421.log.json) | -| CCNet | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 78.87 | 79.90 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ccnet/ccnet_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_512x1024_80k_cityscapes/ccnet_r101-d8_512x1024_80k_cityscapes_20200617_203935-ffae8917.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_512x1024_80k_cityscapes/ccnet_r101-d8_512x1024_80k_cityscapes_20200617_203935.log.json) | -| CCNet | R-50-D8 | 769x769 | 80000 | - | - | V100 | 79.29 | 81.08 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ccnet/ccnet_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_769x769_80k_cityscapes/ccnet_r50-d8_769x769_80k_cityscapes_20200617_010421-73eed8ca.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_769x769_80k_cityscapes/ccnet_r50-d8_769x769_80k_cityscapes_20200617_010421.log.json) | -| CCNet | R-101-D8 | 769x769 | 80000 | - | - | V100 | 79.45 | 80.66 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ccnet/ccnet_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_769x769_80k_cityscapes/ccnet_r101-d8_769x769_80k_cityscapes_20200618_011502-ad3cd481.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_769x769_80k_cityscapes/ccnet_r101-d8_769x769_80k_cityscapes_20200618_011502.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| CCNet | R-50-D8 | 512x1024 | 40000 | 6 | 3.32 | V100 | 77.76 | 78.87 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ccnet/ccnet_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_512x1024_40k_cityscapes/ccnet_r50-d8_512x1024_40k_cityscapes_20200616_142517-4123f401.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_512x1024_40k_cityscapes/ccnet_r50-d8_512x1024_40k_cityscapes_20200616_142517.log.json) | +| CCNet | R-101-D8 | 512x1024 | 40000 | 9.5 | 2.31 | V100 | 76.35 | 78.19 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ccnet/ccnet_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_512x1024_40k_cityscapes/ccnet_r101-d8_512x1024_40k_cityscapes_20200616_142540-a3b84ba6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_512x1024_40k_cityscapes/ccnet_r101-d8_512x1024_40k_cityscapes_20200616_142540.log.json) | +| CCNet | R-50-D8 | 769x769 | 40000 | 6.8 | 1.43 | V100 | 78.46 | 79.93 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ccnet/ccnet_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_769x769_40k_cityscapes/ccnet_r50-d8_769x769_40k_cityscapes_20200616_145125-76d11884.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_769x769_40k_cityscapes/ccnet_r50-d8_769x769_40k_cityscapes_20200616_145125.log.json) | +| CCNet | R-101-D8 | 769x769 | 40000 | 10.7 | 1.01 | V100 | 76.94 | 78.62 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ccnet/ccnet_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_769x769_40k_cityscapes/ccnet_r101-d8_769x769_40k_cityscapes_20200617_101428-4f57c8d0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_769x769_40k_cityscapes/ccnet_r101-d8_769x769_40k_cityscapes_20200617_101428.log.json) | +| CCNet | R-50-D8 | 512x1024 | 80000 | - | - | V100 | 79.03 | 80.16 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ccnet/ccnet_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_512x1024_80k_cityscapes/ccnet_r50-d8_512x1024_80k_cityscapes_20200617_010421-869a3423.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_512x1024_80k_cityscapes/ccnet_r50-d8_512x1024_80k_cityscapes_20200617_010421.log.json) | +| CCNet | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 78.87 | 79.90 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ccnet/ccnet_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_512x1024_80k_cityscapes/ccnet_r101-d8_512x1024_80k_cityscapes_20200617_203935-ffae8917.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_512x1024_80k_cityscapes/ccnet_r101-d8_512x1024_80k_cityscapes_20200617_203935.log.json) | +| CCNet | R-50-D8 | 769x769 | 80000 | - | - | V100 | 79.29 | 81.08 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ccnet/ccnet_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_769x769_80k_cityscapes/ccnet_r50-d8_769x769_80k_cityscapes_20200617_010421-73eed8ca.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_769x769_80k_cityscapes/ccnet_r50-d8_769x769_80k_cityscapes_20200617_010421.log.json) | +| CCNet | R-101-D8 | 769x769 | 80000 | - | - | V100 | 79.45 | 80.66 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ccnet/ccnet_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_769x769_80k_cityscapes/ccnet_r101-d8_769x769_80k_cityscapes_20200618_011502-ad3cd481.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_769x769_80k_cityscapes/ccnet_r101-d8_769x769_80k_cityscapes_20200618_011502.log.json) | ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| CCNet | R-50-D8 | 512x512 | 80000 | 8.8 | 20.89 | V100 | 41.78 | 42.98 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ccnet/ccnet_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_512x512_80k_ade20k/ccnet_r50-d8_512x512_80k_ade20k_20200615_014848-aa37f61e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_512x512_80k_ade20k/ccnet_r50-d8_512x512_80k_ade20k_20200615_014848.log.json) | -| CCNet | R-101-D8 | 512x512 | 80000 | 12.2 | 14.11 | V100 | 43.97 | 45.13 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ccnet/ccnet_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_512x512_80k_ade20k/ccnet_r101-d8_512x512_80k_ade20k_20200615_014848-1f4929a3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_512x512_80k_ade20k/ccnet_r101-d8_512x512_80k_ade20k_20200615_014848.log.json) | -| CCNet | R-50-D8 | 512x512 | 160000 | - | - | V100 | 42.08 | 43.13 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ccnet/ccnet_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_512x512_160k_ade20k/ccnet_r50-d8_512x512_160k_ade20k_20200616_084435-7c97193b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_512x512_160k_ade20k/ccnet_r50-d8_512x512_160k_ade20k_20200616_084435.log.json) | -| CCNet | R-101-D8 | 512x512 | 160000 | - | - | V100 | 43.71 | 45.04 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ccnet/ccnet_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_512x512_160k_ade20k/ccnet_r101-d8_512x512_160k_ade20k_20200616_000644-e849e007.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_512x512_160k_ade20k/ccnet_r101-d8_512x512_160k_ade20k_20200616_000644.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| CCNet | R-50-D8 | 512x512 | 80000 | 8.8 | 20.89 | V100 | 41.78 | 42.98 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ccnet/ccnet_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_512x512_80k_ade20k/ccnet_r50-d8_512x512_80k_ade20k_20200615_014848-aa37f61e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_512x512_80k_ade20k/ccnet_r50-d8_512x512_80k_ade20k_20200615_014848.log.json) | +| CCNet | R-101-D8 | 512x512 | 80000 | 12.2 | 14.11 | V100 | 43.97 | 45.13 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ccnet/ccnet_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_512x512_80k_ade20k/ccnet_r101-d8_512x512_80k_ade20k_20200615_014848-1f4929a3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_512x512_80k_ade20k/ccnet_r101-d8_512x512_80k_ade20k_20200615_014848.log.json) | +| CCNet | R-50-D8 | 512x512 | 160000 | - | - | V100 | 42.08 | 43.13 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ccnet/ccnet_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_512x512_160k_ade20k/ccnet_r50-d8_512x512_160k_ade20k_20200616_084435-7c97193b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_512x512_160k_ade20k/ccnet_r50-d8_512x512_160k_ade20k_20200616_084435.log.json) | +| CCNet | R-101-D8 | 512x512 | 160000 | - | - | V100 | 43.71 | 45.04 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ccnet/ccnet_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_512x512_160k_ade20k/ccnet_r101-d8_512x512_160k_ade20k_20200616_000644-e849e007.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_512x512_160k_ade20k/ccnet_r101-d8_512x512_160k_ade20k_20200616_000644.log.json) | ### Pascal VOC 2012 + Aug -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| CCNet | R-50-D8 | 512x512 | 20000 | 6 | 20.45 | V100 | 76.17 | 77.51 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ccnet/ccnet_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_512x512_20k_voc12aug/ccnet_r50-d8_512x512_20k_voc12aug_20200617_193212-fad81784.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_512x512_20k_voc12aug/ccnet_r50-d8_512x512_20k_voc12aug_20200617_193212.log.json) | -| CCNet | R-101-D8 | 512x512 | 20000 | 9.5 | 13.64 | V100 | 77.27 | 79.02 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ccnet/ccnet_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_512x512_20k_voc12aug/ccnet_r101-d8_512x512_20k_voc12aug_20200617_193212-0007b61d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_512x512_20k_voc12aug/ccnet_r101-d8_512x512_20k_voc12aug_20200617_193212.log.json) | -| CCNet | R-50-D8 | 512x512 | 40000 | - | - | V100 | 75.96 | 77.04 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ccnet/ccnet_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_512x512_40k_voc12aug/ccnet_r50-d8_512x512_40k_voc12aug_20200613_232127-c2a15f02.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_512x512_40k_voc12aug/ccnet_r50-d8_512x512_40k_voc12aug_20200613_232127.log.json) | -| CCNet | R-101-D8 | 512x512 | 40000 | - | - | V100 | 77.87 | 78.90 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ccnet/ccnet_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_512x512_40k_voc12aug/ccnet_r101-d8_512x512_40k_voc12aug_20200613_232127-c30da577.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_512x512_40k_voc12aug/ccnet_r101-d8_512x512_40k_voc12aug_20200613_232127.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| CCNet | R-50-D8 | 512x512 | 20000 | 6 | 20.45 | V100 | 76.17 | 77.51 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ccnet/ccnet_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_512x512_20k_voc12aug/ccnet_r50-d8_512x512_20k_voc12aug_20200617_193212-fad81784.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_512x512_20k_voc12aug/ccnet_r50-d8_512x512_20k_voc12aug_20200617_193212.log.json) | +| CCNet | R-101-D8 | 512x512 | 20000 | 9.5 | 13.64 | V100 | 77.27 | 79.02 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ccnet/ccnet_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_512x512_20k_voc12aug/ccnet_r101-d8_512x512_20k_voc12aug_20200617_193212-0007b61d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_512x512_20k_voc12aug/ccnet_r101-d8_512x512_20k_voc12aug_20200617_193212.log.json) | +| CCNet | R-50-D8 | 512x512 | 40000 | - | - | V100 | 75.96 | 77.04 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ccnet/ccnet_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_512x512_40k_voc12aug/ccnet_r50-d8_512x512_40k_voc12aug_20200613_232127-c2a15f02.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_512x512_40k_voc12aug/ccnet_r50-d8_512x512_40k_voc12aug_20200613_232127.log.json) | +| CCNet | R-101-D8 | 512x512 | 40000 | - | - | V100 | 77.87 | 78.90 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ccnet/ccnet_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_512x512_40k_voc12aug/ccnet_r101-d8_512x512_40k_voc12aug_20200613_232127-c30da577.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_512x512_40k_voc12aug/ccnet_r101-d8_512x512_40k_voc12aug_20200613_232127.log.json) | ## Citation diff --git a/configs/cgnet/README.md b/configs/cgnet/README.md index 60cde58291..96c9fcf515 100644 --- a/configs/cgnet/README.md +++ b/configs/cgnet/README.md @@ -26,10 +26,10 @@ The demand of applying semantic segmentation model on mobile devices has been in ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| CGNet | M3N21 | 680x680 | 60000 | 7.5 | 30.51 | V100 | 65.63 | 68.04 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/cgnet/cgnet_fcn_4xb4-60k_cityscapes-680x680.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/cgnet/cgnet_680x680_60k_cityscapes/cgnet_680x680_60k_cityscapes_20201101_110253-4c0b2f2d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/cgnet/cgnet_680x680_60k_cityscapes/cgnet_680x680_60k_cityscapes-20201101_110253.log.json) | -| CGNet | M3N21 | 512x1024 | 60000 | 8.3 | 31.14 | V100 | 68.27 | 70.33 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/cgnet/cgnet_fcn_4xb8-60k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/cgnet/cgnet_512x1024_60k_cityscapes/cgnet_512x1024_60k_cityscapes_20201101_110254-124ea03b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/cgnet/cgnet_512x1024_60k_cityscapes/cgnet_512x1024_60k_cityscapes-20201101_110254.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| CGNet | M3N21 | 680x680 | 60000 | 7.5 | 30.51 | V100 | 65.63 | 68.04 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/cgnet/cgnet_fcn_4xb4-60k_cityscapes-680x680.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/cgnet/cgnet_680x680_60k_cityscapes/cgnet_680x680_60k_cityscapes_20201101_110253-4c0b2f2d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/cgnet/cgnet_680x680_60k_cityscapes/cgnet_680x680_60k_cityscapes-20201101_110253.log.json) | +| CGNet | M3N21 | 512x1024 | 60000 | 8.3 | 31.14 | V100 | 68.27 | 70.33 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/cgnet/cgnet_fcn_4xb8-60k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/cgnet/cgnet_512x1024_60k_cityscapes/cgnet_512x1024_60k_cityscapes_20201101_110254-124ea03b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/cgnet/cgnet_512x1024_60k_cityscapes/cgnet_512x1024_60k_cityscapes-20201101_110254.log.json) | ## Citation diff --git a/configs/convnext/README.md b/configs/convnext/README.md index 91339377c0..cedf467557 100644 --- a/configs/convnext/README.md +++ b/configs/convnext/README.md @@ -49,14 +49,14 @@ The pre-trained models on ImageNet-1k or ImageNet-21k are used to fine-tune on t ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------- | ----------- | --------- | ------- | -------- | -------------- | ------ | ----- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| UPerNet | ConvNeXt-T | 512x512 | 160000 | 4.23 | 19.90 | V100 | 46.11 | 46.62 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/convnext/convnext-tiny_upernet_8xb2-amp-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/convnext/upernet_convnext_tiny_fp16_512x512_160k_ade20k/upernet_convnext_tiny_fp16_512x512_160k_ade20k_20220227_124553-cad485de.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/convnext/upernet_convnext_tiny_fp16_512x512_160k_ade20k/upernet_convnext_tiny_fp16_512x512_160k_ade20k_20220227_124553.log.json) | -| UPerNet | ConvNeXt-S | 512x512 | 160000 | 5.16 | 15.18 | V100 | 48.56 | 49.02 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/convnext/convnext-small_upernet_8xb2-amp-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/convnext/upernet_convnext_small_fp16_512x512_160k_ade20k/upernet_convnext_small_fp16_512x512_160k_ade20k_20220227_131208-1b1e394f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/convnext/upernet_convnext_small_fp16_512x512_160k_ade20k/upernet_convnext_small_fp16_512x512_160k_ade20k_20220227_131208.log.json) | -| UPerNet | ConvNeXt-B | 512x512 | 160000 | 6.33 | 14.41 | V100 | 48.71 | 49.54 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/convnext/convnext-base_upernet_8xb2-amp-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/convnext/upernet_convnext_base_fp16_512x512_160k_ade20k/upernet_convnext_base_fp16_512x512_160k_ade20k_20220227_181227-02a24fc6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/convnext/upernet_convnext_base_fp16_512x512_160k_ade20k/upernet_convnext_base_fp16_512x512_160k_ade20k_20220227_181227.log.json) | -| UPerNet | ConvNeXt-B | 640x640 | 160000 | 8.53 | 10.88 | V100 | 52.13 | 52.66 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/convnext/convnext-base_upernet_8xb2-amp-160k_ade20k-640x640.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/convnext/upernet_convnext_base_fp16_640x640_160k_ade20k/upernet_convnext_base_fp16_640x640_160k_ade20k_20220227_182859-9280e39b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/convnext/upernet_convnext_base_fp16_640x640_160k_ade20k/upernet_convnext_base_fp16_640x640_160k_ade20k_20220227_182859.log.json) | -| UPerNet | ConvNeXt-L | 640x640 | 160000 | 12.08 | 7.69 | V100 | 53.16 | 53.38 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/convnext/convnext-large_upernet_8xb2-amp-160k_ade20k-640x640.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/convnext/upernet_convnext_large_fp16_640x640_160k_ade20k/upernet_convnext_large_fp16_640x640_160k_ade20k_20220226_040532-e57aa54d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/convnext/upernet_convnext_large_fp16_640x640_160k_ade20k/upernet_convnext_large_fp16_640x640_160k_ade20k_20220226_040532.log.json) | -| UPerNet | ConvNeXt-XL | 640x640 | 160000 | 26.16\* | 6.33 | V100 | 53.58 | 54.11 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/convnext/convnext-xlarge_upernet_8xb2-amp-160k_ade20k-640x640.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/convnext/upernet_convnext_xlarge_fp16_640x640_160k_ade20k/upernet_convnext_xlarge_fp16_640x640_160k_ade20k_20220226_080344-95fc38c2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/convnext/upernet_convnext_xlarge_fp16_640x640_160k_ade20k/upernet_convnext_xlarge_fp16_640x640_160k_ade20k_20220226_080344.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------- | ----------- | --------- | ------- | -------- | -------------- | ------ | ----- | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| UPerNet | ConvNeXt-T | 512x512 | 160000 | 4.23 | 19.90 | V100 | 46.11 | 46.62 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/convnext/convnext-tiny_upernet_8xb2-amp-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/convnext/upernet_convnext_tiny_fp16_512x512_160k_ade20k/upernet_convnext_tiny_fp16_512x512_160k_ade20k_20220227_124553-cad485de.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/convnext/upernet_convnext_tiny_fp16_512x512_160k_ade20k/upernet_convnext_tiny_fp16_512x512_160k_ade20k_20220227_124553.log.json) | +| UPerNet | ConvNeXt-S | 512x512 | 160000 | 5.16 | 15.18 | V100 | 48.56 | 49.02 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/convnext/convnext-small_upernet_8xb2-amp-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/convnext/upernet_convnext_small_fp16_512x512_160k_ade20k/upernet_convnext_small_fp16_512x512_160k_ade20k_20220227_131208-1b1e394f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/convnext/upernet_convnext_small_fp16_512x512_160k_ade20k/upernet_convnext_small_fp16_512x512_160k_ade20k_20220227_131208.log.json) | +| UPerNet | ConvNeXt-B | 512x512 | 160000 | 6.33 | 14.41 | V100 | 48.71 | 49.54 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/convnext/convnext-base_upernet_8xb2-amp-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/convnext/upernet_convnext_base_fp16_512x512_160k_ade20k/upernet_convnext_base_fp16_512x512_160k_ade20k_20220227_181227-02a24fc6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/convnext/upernet_convnext_base_fp16_512x512_160k_ade20k/upernet_convnext_base_fp16_512x512_160k_ade20k_20220227_181227.log.json) | +| UPerNet | ConvNeXt-B | 640x640 | 160000 | 8.53 | 10.88 | V100 | 52.13 | 52.66 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/convnext/convnext-base_upernet_8xb2-amp-160k_ade20k-640x640.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/convnext/upernet_convnext_base_fp16_640x640_160k_ade20k/upernet_convnext_base_fp16_640x640_160k_ade20k_20220227_182859-9280e39b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/convnext/upernet_convnext_base_fp16_640x640_160k_ade20k/upernet_convnext_base_fp16_640x640_160k_ade20k_20220227_182859.log.json) | +| UPerNet | ConvNeXt-L | 640x640 | 160000 | 12.08 | 7.69 | V100 | 53.16 | 53.38 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/convnext/convnext-large_upernet_8xb2-amp-160k_ade20k-640x640.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/convnext/upernet_convnext_large_fp16_640x640_160k_ade20k/upernet_convnext_large_fp16_640x640_160k_ade20k_20220226_040532-e57aa54d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/convnext/upernet_convnext_large_fp16_640x640_160k_ade20k/upernet_convnext_large_fp16_640x640_160k_ade20k_20220226_040532.log.json) | +| UPerNet | ConvNeXt-XL | 640x640 | 160000 | 26.16\* | 6.33 | V100 | 53.58 | 54.11 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/convnext/convnext-xlarge_upernet_8xb2-amp-160k_ade20k-640x640.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/convnext/upernet_convnext_xlarge_fp16_640x640_160k_ade20k/upernet_convnext_xlarge_fp16_640x640_160k_ade20k_20220226_080344-95fc38c2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/convnext/upernet_convnext_xlarge_fp16_640x640_160k_ade20k/upernet_convnext_xlarge_fp16_640x640_160k_ade20k_20220226_080344.log.json) | Note: diff --git a/configs/danet/README.md b/configs/danet/README.md index b5841e23be..90194f3073 100644 --- a/configs/danet/README.md +++ b/configs/danet/README.md @@ -26,34 +26,34 @@ In this paper, we address the scene segmentation task by capturing rich contextu ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------- | ------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DANet | R-50-D8 | 512x1024 | 40000 | 7.4 | 2.66 | V100 | 78.74 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/danet/danet_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r50-d8_512x1024_40k_cityscapes/danet_r50-d8_512x1024_40k_cityscapes_20200605_191324-c0dbfa5f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r50-d8_512x1024_40k_cityscapes/danet_r50-d8_512x1024_40k_cityscapes_20200605_191324.log.json) | -| DANet | R-101-D8 | 512x1024 | 40000 | 10.9 | 1.99 | V100 | 80.52 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/danet/danet_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r101-d8_512x1024_40k_cityscapes/danet_r101-d8_512x1024_40k_cityscapes_20200605_200831-c57a7157.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r101-d8_512x1024_40k_cityscapes/danet_r101-d8_512x1024_40k_cityscapes_20200605_200831.log.json) | -| DANet | R-50-D8 | 769x769 | 40000 | 8.8 | 1.56 | V100 | 78.88 | 80.62 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/danet/danet_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r50-d8_769x769_40k_cityscapes/danet_r50-d8_769x769_40k_cityscapes_20200530_025703-76681c60.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r50-d8_769x769_40k_cityscapes/danet_r50-d8_769x769_40k_cityscapes_20200530_025703.log.json) | -| DANet | R-101-D8 | 769x769 | 40000 | 12.8 | 1.07 | V100 | 79.88 | 81.47 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/danet/danet_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r101-d8_769x769_40k_cityscapes/danet_r101-d8_769x769_40k_cityscapes_20200530_025717-dcb7fd4e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r101-d8_769x769_40k_cityscapes/danet_r101-d8_769x769_40k_cityscapes_20200530_025717.log.json) | -| DANet | R-50-D8 | 512x1024 | 80000 | - | - | V100 | 79.34 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/danet/danet_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r50-d8_512x1024_80k_cityscapes/danet_r50-d8_512x1024_80k_cityscapes_20200607_133029-2bfa2293.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r50-d8_512x1024_80k_cityscapes/danet_r50-d8_512x1024_80k_cityscapes_20200607_133029.log.json) | -| DANet | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 80.41 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/danet/danet_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r101-d8_512x1024_80k_cityscapes/danet_r101-d8_512x1024_80k_cityscapes_20200607_132918-955e6350.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r101-d8_512x1024_80k_cityscapes/danet_r101-d8_512x1024_80k_cityscapes_20200607_132918.log.json) | -| DANet | R-50-D8 | 769x769 | 80000 | - | - | V100 | 79.27 | 80.96 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/danet/danet_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r50-d8_769x769_80k_cityscapes/danet_r50-d8_769x769_80k_cityscapes_20200607_132954-495689b4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r50-d8_769x769_80k_cityscapes/danet_r50-d8_769x769_80k_cityscapes_20200607_132954.log.json) | -| DANet | R-101-D8 | 769x769 | 80000 | - | - | V100 | 80.47 | 82.02 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/danet/danet_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r101-d8_769x769_80k_cityscapes/danet_r101-d8_769x769_80k_cityscapes_20200607_132918-f3a929e7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r101-d8_769x769_80k_cityscapes/danet_r101-d8_769x769_80k_cityscapes_20200607_132918.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------- | ---------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DANet | R-50-D8 | 512x1024 | 40000 | 7.4 | 2.66 | V100 | 78.74 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/danet/danet_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r50-d8_512x1024_40k_cityscapes/danet_r50-d8_512x1024_40k_cityscapes_20200605_191324-c0dbfa5f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r50-d8_512x1024_40k_cityscapes/danet_r50-d8_512x1024_40k_cityscapes_20200605_191324.log.json) | +| DANet | R-101-D8 | 512x1024 | 40000 | 10.9 | 1.99 | V100 | 80.52 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/danet/danet_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r101-d8_512x1024_40k_cityscapes/danet_r101-d8_512x1024_40k_cityscapes_20200605_200831-c57a7157.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r101-d8_512x1024_40k_cityscapes/danet_r101-d8_512x1024_40k_cityscapes_20200605_200831.log.json) | +| DANet | R-50-D8 | 769x769 | 40000 | 8.8 | 1.56 | V100 | 78.88 | 80.62 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/danet/danet_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r50-d8_769x769_40k_cityscapes/danet_r50-d8_769x769_40k_cityscapes_20200530_025703-76681c60.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r50-d8_769x769_40k_cityscapes/danet_r50-d8_769x769_40k_cityscapes_20200530_025703.log.json) | +| DANet | R-101-D8 | 769x769 | 40000 | 12.8 | 1.07 | V100 | 79.88 | 81.47 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/danet/danet_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r101-d8_769x769_40k_cityscapes/danet_r101-d8_769x769_40k_cityscapes_20200530_025717-dcb7fd4e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r101-d8_769x769_40k_cityscapes/danet_r101-d8_769x769_40k_cityscapes_20200530_025717.log.json) | +| DANet | R-50-D8 | 512x1024 | 80000 | - | - | V100 | 79.34 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/danet/danet_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r50-d8_512x1024_80k_cityscapes/danet_r50-d8_512x1024_80k_cityscapes_20200607_133029-2bfa2293.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r50-d8_512x1024_80k_cityscapes/danet_r50-d8_512x1024_80k_cityscapes_20200607_133029.log.json) | +| DANet | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 80.41 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/danet/danet_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r101-d8_512x1024_80k_cityscapes/danet_r101-d8_512x1024_80k_cityscapes_20200607_132918-955e6350.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r101-d8_512x1024_80k_cityscapes/danet_r101-d8_512x1024_80k_cityscapes_20200607_132918.log.json) | +| DANet | R-50-D8 | 769x769 | 80000 | - | - | V100 | 79.27 | 80.96 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/danet/danet_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r50-d8_769x769_80k_cityscapes/danet_r50-d8_769x769_80k_cityscapes_20200607_132954-495689b4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r50-d8_769x769_80k_cityscapes/danet_r50-d8_769x769_80k_cityscapes_20200607_132954.log.json) | +| DANet | R-101-D8 | 769x769 | 80000 | - | - | V100 | 80.47 | 82.02 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/danet/danet_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r101-d8_769x769_80k_cityscapes/danet_r101-d8_769x769_80k_cityscapes_20200607_132918-f3a929e7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r101-d8_769x769_80k_cityscapes/danet_r101-d8_769x769_80k_cityscapes_20200607_132918.log.json) | ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DANet | R-50-D8 | 512x512 | 80000 | 11.5 | 21.20 | V100 | 41.66 | 42.90 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/danet/danet_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r50-d8_512x512_80k_ade20k/danet_r50-d8_512x512_80k_ade20k_20200615_015125-edb18e08.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r50-d8_512x512_80k_ade20k/danet_r50-d8_512x512_80k_ade20k_20200615_015125.log.json) | -| DANet | R-101-D8 | 512x512 | 80000 | 15 | 14.18 | V100 | 43.64 | 45.19 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/danet/danet_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r101-d8_512x512_80k_ade20k/danet_r101-d8_512x512_80k_ade20k_20200615_015126-d0357c73.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r101-d8_512x512_80k_ade20k/danet_r101-d8_512x512_80k_ade20k_20200615_015126.log.json) | -| DANet | R-50-D8 | 512x512 | 160000 | - | - | V100 | 42.45 | 43.25 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/danet/danet_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r50-d8_512x512_160k_ade20k/danet_r50-d8_512x512_160k_ade20k_20200616_082340-9cb35dcd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r50-d8_512x512_160k_ade20k/danet_r50-d8_512x512_160k_ade20k_20200616_082340.log.json) | -| DANet | R-101-D8 | 512x512 | 160000 | - | - | V100 | 44.17 | 45.02 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/danet/danet_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r101-d8_512x512_160k_ade20k/danet_r101-d8_512x512_160k_ade20k_20200616_082348-23bf12f9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r101-d8_512x512_160k_ade20k/danet_r101-d8_512x512_160k_ade20k_20200616_082348.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DANet | R-50-D8 | 512x512 | 80000 | 11.5 | 21.20 | V100 | 41.66 | 42.90 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/danet/danet_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r50-d8_512x512_80k_ade20k/danet_r50-d8_512x512_80k_ade20k_20200615_015125-edb18e08.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r50-d8_512x512_80k_ade20k/danet_r50-d8_512x512_80k_ade20k_20200615_015125.log.json) | +| DANet | R-101-D8 | 512x512 | 80000 | 15 | 14.18 | V100 | 43.64 | 45.19 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/danet/danet_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r101-d8_512x512_80k_ade20k/danet_r101-d8_512x512_80k_ade20k_20200615_015126-d0357c73.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r101-d8_512x512_80k_ade20k/danet_r101-d8_512x512_80k_ade20k_20200615_015126.log.json) | +| DANet | R-50-D8 | 512x512 | 160000 | - | - | V100 | 42.45 | 43.25 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/danet/danet_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r50-d8_512x512_160k_ade20k/danet_r50-d8_512x512_160k_ade20k_20200616_082340-9cb35dcd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r50-d8_512x512_160k_ade20k/danet_r50-d8_512x512_160k_ade20k_20200616_082340.log.json) | +| DANet | R-101-D8 | 512x512 | 160000 | - | - | V100 | 44.17 | 45.02 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/danet/danet_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r101-d8_512x512_160k_ade20k/danet_r101-d8_512x512_160k_ade20k_20200616_082348-23bf12f9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r101-d8_512x512_160k_ade20k/danet_r101-d8_512x512_160k_ade20k_20200616_082348.log.json) | ### Pascal VOC 2012 + Aug -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DANet | R-50-D8 | 512x512 | 20000 | 6.5 | 20.94 | V100 | 74.45 | 75.69 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/danet/danet_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r50-d8_512x512_20k_voc12aug/danet_r50-d8_512x512_20k_voc12aug_20200618_070026-9e9e3ab3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r50-d8_512x512_20k_voc12aug/danet_r50-d8_512x512_20k_voc12aug_20200618_070026.log.json) | -| DANet | R-101-D8 | 512x512 | 20000 | 9.9 | 13.76 | V100 | 76.02 | 77.23 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/danet/danet_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r101-d8_512x512_20k_voc12aug/danet_r101-d8_512x512_20k_voc12aug_20200618_070026-d48d23b2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r101-d8_512x512_20k_voc12aug/danet_r101-d8_512x512_20k_voc12aug_20200618_070026.log.json) | -| DANet | R-50-D8 | 512x512 | 40000 | - | - | V100 | 76.37 | 77.29 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/danet/danet_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r50-d8_512x512_40k_voc12aug/danet_r50-d8_512x512_40k_voc12aug_20200613_235526-426e3a64.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r50-d8_512x512_40k_voc12aug/danet_r50-d8_512x512_40k_voc12aug_20200613_235526.log.json) | -| DANet | R-101-D8 | 512x512 | 40000 | - | - | V100 | 76.51 | 77.32 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/danet/danet_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r101-d8_512x512_40k_voc12aug/danet_r101-d8_512x512_40k_voc12aug_20200613_223031-788e232a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r101-d8_512x512_40k_voc12aug/danet_r101-d8_512x512_40k_voc12aug_20200613_223031.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DANet | R-50-D8 | 512x512 | 20000 | 6.5 | 20.94 | V100 | 74.45 | 75.69 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/danet/danet_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r50-d8_512x512_20k_voc12aug/danet_r50-d8_512x512_20k_voc12aug_20200618_070026-9e9e3ab3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r50-d8_512x512_20k_voc12aug/danet_r50-d8_512x512_20k_voc12aug_20200618_070026.log.json) | +| DANet | R-101-D8 | 512x512 | 20000 | 9.9 | 13.76 | V100 | 76.02 | 77.23 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/danet/danet_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r101-d8_512x512_20k_voc12aug/danet_r101-d8_512x512_20k_voc12aug_20200618_070026-d48d23b2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r101-d8_512x512_20k_voc12aug/danet_r101-d8_512x512_20k_voc12aug_20200618_070026.log.json) | +| DANet | R-50-D8 | 512x512 | 40000 | - | - | V100 | 76.37 | 77.29 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/danet/danet_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r50-d8_512x512_40k_voc12aug/danet_r50-d8_512x512_40k_voc12aug_20200613_235526-426e3a64.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r50-d8_512x512_40k_voc12aug/danet_r50-d8_512x512_40k_voc12aug_20200613_235526.log.json) | +| DANet | R-101-D8 | 512x512 | 40000 | - | - | V100 | 76.51 | 77.32 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/danet/danet_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r101-d8_512x512_40k_voc12aug/danet_r101-d8_512x512_40k_voc12aug_20200613_223031-788e232a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/danet/danet_r101-d8_512x512_40k_voc12aug/danet_r101-d8_512x512_40k_voc12aug_20200613_223031.log.json) | ## Citation diff --git a/configs/deeplabv3/README.md b/configs/deeplabv3/README.md index 836db6a9a5..df50b7f90a 100644 --- a/configs/deeplabv3/README.md +++ b/configs/deeplabv3/README.md @@ -27,79 +27,79 @@ DEEPLABv3_ResNet-D8 model structure ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ---------------- | --------------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| DeepLabV3 | R-50-D8 | 512x1024 | 40000 | 6.1 | 2.57 | V100 | 79.09 | 80.45 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x1024_40k_cityscapes/deeplabv3_r50-d8_512x1024_40k_cityscapes_20200605_022449-acadc2f8.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x1024_40k_cityscapes/deeplabv3_r50-d8_512x1024_40k_cityscapes_20200605_022449.log.json) | -| DeepLabV3 | R-101-D8 | 512x1024 | 40000 | 9.6 | 1.92 | V100 | 77.12 | 79.61 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x1024_40k_cityscapes/deeplabv3_r101-d8_512x1024_40k_cityscapes_20200605_012241-7fd3f799.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x1024_40k_cityscapes/deeplabv3_r101-d8_512x1024_40k_cityscapes_20200605_012241.log.json) | -| DeepLabV3 | R-50-D8 | 769x769 | 40000 | 6.9 | 1.11 | V100 | 78.58 | 79.89 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_769x769_40k_cityscapes/deeplabv3_r50-d8_769x769_40k_cityscapes_20200606_113723-7eda553c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_769x769_40k_cityscapes/deeplabv3_r50-d8_769x769_40k_cityscapes_20200606_113723.log.json) | -| DeepLabV3 | R-101-D8 | 769x769 | 40000 | 10.9 | 0.83 | V100 | 79.27 | 80.11 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_769x769_40k_cityscapes/deeplabv3_r101-d8_769x769_40k_cityscapes_20200606_113809-c64f889f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_769x769_40k_cityscapes/deeplabv3_r101-d8_769x769_40k_cityscapes_20200606_113809.log.json) | -| DeepLabV3 | R-18-D8 | 512x1024 | 80000 | 1.7 | 13.78 | V100 | 76.70 | 78.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r18-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18-d8_512x1024_80k_cityscapes/deeplabv3_r18-d8_512x1024_80k_cityscapes_20201225_021506-23dffbe2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18-d8_512x1024_80k_cityscapes/deeplabv3_r18-d8_512x1024_80k_cityscapes-20201225_021506.log.json) | -| DeepLabV3 | R-50-D8 | 512x1024 | 80000 | - | - | V100 | 79.32 | 80.57 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x1024_80k_cityscapes/deeplabv3_r50-d8_512x1024_80k_cityscapes_20200606_113404-b92cfdd4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x1024_80k_cityscapes/deeplabv3_r50-d8_512x1024_80k_cityscapes_20200606_113404.log.json) | -| DeepLabV3 | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 80.20 | 81.21 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x1024_80k_cityscapes/deeplabv3_r101-d8_512x1024_80k_cityscapes_20200606_113503-9e428899.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x1024_80k_cityscapes/deeplabv3_r101-d8_512x1024_80k_cityscapes_20200606_113503.log.json) | -| DeepLabV3 (FP16) | R-101-D8 | 512x1024 | 80000 | 5.75 | 3.86 | V100 | 80.48 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb2-amp-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_fp16_512x1024_80k_cityscapes/deeplabv3_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230920-774d9cec.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_fp16_512x1024_80k_cityscapes/deeplabv3_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230920.log.json) | -| DeepLabV3 | R-18-D8 | 769x769 | 80000 | 1.9 | 5.55 | V100 | 76.60 | 78.26 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r18-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18-d8_769x769_80k_cityscapes/deeplabv3_r18-d8_769x769_80k_cityscapes_20201225_021506-6452126a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18-d8_769x769_80k_cityscapes/deeplabv3_r18-d8_769x769_80k_cityscapes-20201225_021506.log.json) | -| DeepLabV3 | R-50-D8 | 769x769 | 80000 | - | - | V100 | 79.89 | 81.06 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_769x769_80k_cityscapes/deeplabv3_r50-d8_769x769_80k_cityscapes_20200606_221338-788d6228.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_769x769_80k_cityscapes/deeplabv3_r50-d8_769x769_80k_cityscapes_20200606_221338.log.json) | -| DeepLabV3 | R-101-D8 | 769x769 | 80000 | - | - | V100 | 79.67 | 80.81 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_769x769_80k_cityscapes/deeplabv3_r101-d8_769x769_80k_cityscapes_20200607_013353-60e95418.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_769x769_80k_cityscapes/deeplabv3_r101-d8_769x769_80k_cityscapes_20200607_013353.log.json) | -| DeepLabV3 | R-101-D16-MG124 | 512x1024 | 40000 | 4.7 | 6.96 | V100 | 76.71 | 78.63 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d16-mg124_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d16-mg124_512x1024_40k_cityscapes/deeplabv3_r101-d16-mg124_512x1024_40k_cityscapes_20200908_005644-67b0c992.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d16-mg124_512x1024_40k_cityscapes/deeplabv3_r101-d16-mg124_512x1024_40k_cityscapes-20200908_005644.log.json) | -| DeepLabV3 | R-101-D16-MG124 | 512x1024 | 80000 | - | - | V100 | 78.36 | 79.84 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d16-mg124_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d16-mg124_512x1024_80k_cityscapes/deeplabv3_r101-d16-mg124_512x1024_80k_cityscapes_20200908_005644-57bb8425.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d16-mg124_512x1024_80k_cityscapes/deeplabv3_r101-d16-mg124_512x1024_80k_cityscapes-20200908_005644.log.json) | -| DeepLabV3 | R-18b-D8 | 512x1024 | 80000 | 1.6 | 13.93 | V100 | 76.26 | 77.88 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r18b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18b-d8_512x1024_80k_cityscapes/deeplabv3_r18b-d8_512x1024_80k_cityscapes_20201225_094144-46040cef.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18b-d8_512x1024_80k_cityscapes/deeplabv3_r18b-d8_512x1024_80k_cityscapes-20201225_094144.log.json) | -| DeepLabV3 | R-50b-D8 | 512x1024 | 80000 | 6.0 | 2.74 | V100 | 79.63 | 80.98 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50b-d8_512x1024_80k_cityscapes/deeplabv3_r50b-d8_512x1024_80k_cityscapes_20201225_155148-ec368954.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50b-d8_512x1024_80k_cityscapes/deeplabv3_r50b-d8_512x1024_80k_cityscapes-20201225_155148.log.json) | -| DeepLabV3 | R-101b-D8 | 512x1024 | 80000 | 9.5 | 1.81 | V100 | 80.01 | 81.21 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101b-d8_512x1024_80k_cityscapes/deeplabv3_r101b-d8_512x1024_80k_cityscapes_20201226_171821-8fd49503.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101b-d8_512x1024_80k_cityscapes/deeplabv3_r101b-d8_512x1024_80k_cityscapes-20201226_171821.log.json) | -| DeepLabV3 | R-18b-D8 | 769x769 | 80000 | 1.8 | 5.79 | V100 | 75.63 | 77.51 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r18b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18b-d8_769x769_80k_cityscapes/deeplabv3_r18b-d8_769x769_80k_cityscapes_20201225_094144-fdc985d9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18b-d8_769x769_80k_cityscapes/deeplabv3_r18b-d8_769x769_80k_cityscapes-20201225_094144.log.json) | -| DeepLabV3 | R-50b-D8 | 769x769 | 80000 | 6.8 | 1.16 | V100 | 78.80 | 80.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50b-d8_769x769_80k_cityscapes/deeplabv3_r50b-d8_769x769_80k_cityscapes_20201225_155404-87fb0cf4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50b-d8_769x769_80k_cityscapes/deeplabv3_r50b-d8_769x769_80k_cityscapes-20201225_155404.log.json) | -| DeepLabV3 | R-101b-D8 | 769x769 | 80000 | 10.7 | 0.82 | V100 | 79.41 | 80.73 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101b-d8_769x769_80k_cityscapes/deeplabv3_r101b-d8_769x769_80k_cityscapes_20201226_190843-9142ee57.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101b-d8_769x769_80k_cityscapes/deeplabv3_r101b-d8_769x769_80k_cityscapes-20201226_190843.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------------- | --------------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| DeepLabV3 | R-50-D8 | 512x1024 | 40000 | 6.1 | 2.57 | V100 | 79.09 | 80.45 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x1024_40k_cityscapes/deeplabv3_r50-d8_512x1024_40k_cityscapes_20200605_022449-acadc2f8.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x1024_40k_cityscapes/deeplabv3_r50-d8_512x1024_40k_cityscapes_20200605_022449.log.json) | +| DeepLabV3 | R-101-D8 | 512x1024 | 40000 | 9.6 | 1.92 | V100 | 77.12 | 79.61 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x1024_40k_cityscapes/deeplabv3_r101-d8_512x1024_40k_cityscapes_20200605_012241-7fd3f799.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x1024_40k_cityscapes/deeplabv3_r101-d8_512x1024_40k_cityscapes_20200605_012241.log.json) | +| DeepLabV3 | R-50-D8 | 769x769 | 40000 | 6.9 | 1.11 | V100 | 78.58 | 79.89 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_769x769_40k_cityscapes/deeplabv3_r50-d8_769x769_40k_cityscapes_20200606_113723-7eda553c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_769x769_40k_cityscapes/deeplabv3_r50-d8_769x769_40k_cityscapes_20200606_113723.log.json) | +| DeepLabV3 | R-101-D8 | 769x769 | 40000 | 10.9 | 0.83 | V100 | 79.27 | 80.11 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_769x769_40k_cityscapes/deeplabv3_r101-d8_769x769_40k_cityscapes_20200606_113809-c64f889f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_769x769_40k_cityscapes/deeplabv3_r101-d8_769x769_40k_cityscapes_20200606_113809.log.json) | +| DeepLabV3 | R-18-D8 | 512x1024 | 80000 | 1.7 | 13.78 | V100 | 76.70 | 78.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r18-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18-d8_512x1024_80k_cityscapes/deeplabv3_r18-d8_512x1024_80k_cityscapes_20201225_021506-23dffbe2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18-d8_512x1024_80k_cityscapes/deeplabv3_r18-d8_512x1024_80k_cityscapes-20201225_021506.log.json) | +| DeepLabV3 | R-50-D8 | 512x1024 | 80000 | - | - | V100 | 79.32 | 80.57 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x1024_80k_cityscapes/deeplabv3_r50-d8_512x1024_80k_cityscapes_20200606_113404-b92cfdd4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x1024_80k_cityscapes/deeplabv3_r50-d8_512x1024_80k_cityscapes_20200606_113404.log.json) | +| DeepLabV3 | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 80.20 | 81.21 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x1024_80k_cityscapes/deeplabv3_r101-d8_512x1024_80k_cityscapes_20200606_113503-9e428899.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x1024_80k_cityscapes/deeplabv3_r101-d8_512x1024_80k_cityscapes_20200606_113503.log.json) | +| DeepLabV3 (FP16) | R-101-D8 | 512x1024 | 80000 | 5.75 | 3.86 | V100 | 80.48 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r101-d8_4xb2-amp-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_fp16_512x1024_80k_cityscapes/deeplabv3_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230920-774d9cec.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_fp16_512x1024_80k_cityscapes/deeplabv3_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230920.log.json) | +| DeepLabV3 | R-18-D8 | 769x769 | 80000 | 1.9 | 5.55 | V100 | 76.60 | 78.26 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r18-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18-d8_769x769_80k_cityscapes/deeplabv3_r18-d8_769x769_80k_cityscapes_20201225_021506-6452126a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18-d8_769x769_80k_cityscapes/deeplabv3_r18-d8_769x769_80k_cityscapes-20201225_021506.log.json) | +| DeepLabV3 | R-50-D8 | 769x769 | 80000 | - | - | V100 | 79.89 | 81.06 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_769x769_80k_cityscapes/deeplabv3_r50-d8_769x769_80k_cityscapes_20200606_221338-788d6228.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_769x769_80k_cityscapes/deeplabv3_r50-d8_769x769_80k_cityscapes_20200606_221338.log.json) | +| DeepLabV3 | R-101-D8 | 769x769 | 80000 | - | - | V100 | 79.67 | 80.81 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_769x769_80k_cityscapes/deeplabv3_r101-d8_769x769_80k_cityscapes_20200607_013353-60e95418.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_769x769_80k_cityscapes/deeplabv3_r101-d8_769x769_80k_cityscapes_20200607_013353.log.json) | +| DeepLabV3 | R-101-D16-MG124 | 512x1024 | 40000 | 4.7 | 6.96 | V100 | 76.71 | 78.63 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r101-d16-mg124_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d16-mg124_512x1024_40k_cityscapes/deeplabv3_r101-d16-mg124_512x1024_40k_cityscapes_20200908_005644-67b0c992.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d16-mg124_512x1024_40k_cityscapes/deeplabv3_r101-d16-mg124_512x1024_40k_cityscapes-20200908_005644.log.json) | +| DeepLabV3 | R-101-D16-MG124 | 512x1024 | 80000 | - | - | V100 | 78.36 | 79.84 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r101-d16-mg124_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d16-mg124_512x1024_80k_cityscapes/deeplabv3_r101-d16-mg124_512x1024_80k_cityscapes_20200908_005644-57bb8425.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d16-mg124_512x1024_80k_cityscapes/deeplabv3_r101-d16-mg124_512x1024_80k_cityscapes-20200908_005644.log.json) | +| DeepLabV3 | R-18b-D8 | 512x1024 | 80000 | 1.6 | 13.93 | V100 | 76.26 | 77.88 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r18b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18b-d8_512x1024_80k_cityscapes/deeplabv3_r18b-d8_512x1024_80k_cityscapes_20201225_094144-46040cef.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18b-d8_512x1024_80k_cityscapes/deeplabv3_r18b-d8_512x1024_80k_cityscapes-20201225_094144.log.json) | +| DeepLabV3 | R-50b-D8 | 512x1024 | 80000 | 6.0 | 2.74 | V100 | 79.63 | 80.98 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r50b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50b-d8_512x1024_80k_cityscapes/deeplabv3_r50b-d8_512x1024_80k_cityscapes_20201225_155148-ec368954.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50b-d8_512x1024_80k_cityscapes/deeplabv3_r50b-d8_512x1024_80k_cityscapes-20201225_155148.log.json) | +| DeepLabV3 | R-101b-D8 | 512x1024 | 80000 | 9.5 | 1.81 | V100 | 80.01 | 81.21 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r101b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101b-d8_512x1024_80k_cityscapes/deeplabv3_r101b-d8_512x1024_80k_cityscapes_20201226_171821-8fd49503.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101b-d8_512x1024_80k_cityscapes/deeplabv3_r101b-d8_512x1024_80k_cityscapes-20201226_171821.log.json) | +| DeepLabV3 | R-18b-D8 | 769x769 | 80000 | 1.8 | 5.79 | V100 | 75.63 | 77.51 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r18b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18b-d8_769x769_80k_cityscapes/deeplabv3_r18b-d8_769x769_80k_cityscapes_20201225_094144-fdc985d9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r18b-d8_769x769_80k_cityscapes/deeplabv3_r18b-d8_769x769_80k_cityscapes-20201225_094144.log.json) | +| DeepLabV3 | R-50b-D8 | 769x769 | 80000 | 6.8 | 1.16 | V100 | 78.80 | 80.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r50b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50b-d8_769x769_80k_cityscapes/deeplabv3_r50b-d8_769x769_80k_cityscapes_20201225_155404-87fb0cf4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50b-d8_769x769_80k_cityscapes/deeplabv3_r50b-d8_769x769_80k_cityscapes-20201225_155404.log.json) | +| DeepLabV3 | R-101b-D8 | 769x769 | 80000 | 10.7 | 0.82 | V100 | 79.41 | 80.73 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r101b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101b-d8_769x769_80k_cityscapes/deeplabv3_r101b-d8_769x769_80k_cityscapes_20201226_190843-9142ee57.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101b-d8_769x769_80k_cityscapes/deeplabv3_r101b-d8_769x769_80k_cityscapes-20201226_190843.log.json) | ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| --------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DeepLabV3 | R-50-D8 | 512x512 | 80000 | 8.9 | 14.76 | V100 | 42.42 | 43.28 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_80k_ade20k/deeplabv3_r50-d8_512x512_80k_ade20k_20200614_185028-0bb3f844.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_80k_ade20k/deeplabv3_r50-d8_512x512_80k_ade20k_20200614_185028.log.json) | -| DeepLabV3 | R-101-D8 | 512x512 | 80000 | 12.4 | 10.14 | V100 | 44.08 | 45.19 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_80k_ade20k/deeplabv3_r101-d8_512x512_80k_ade20k_20200615_021256-d89c7fa4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_80k_ade20k/deeplabv3_r101-d8_512x512_80k_ade20k_20200615_021256.log.json) | -| DeepLabV3 | R-50-D8 | 512x512 | 160000 | - | - | V100 | 42.66 | 44.09 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_160k_ade20k/deeplabv3_r50-d8_512x512_160k_ade20k_20200615_123227-5d0ee427.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_160k_ade20k/deeplabv3_r50-d8_512x512_160k_ade20k_20200615_123227.log.json) | -| DeepLabV3 | R-101-D8 | 512x512 | 160000 | - | - | V100 | 45.00 | 46.66 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_160k_ade20k/deeplabv3_r101-d8_512x512_160k_ade20k_20200615_105816-b1f72b3b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_160k_ade20k/deeplabv3_r101-d8_512x512_160k_ade20k_20200615_105816.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| --------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DeepLabV3 | R-50-D8 | 512x512 | 80000 | 8.9 | 14.76 | V100 | 42.42 | 43.28 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_80k_ade20k/deeplabv3_r50-d8_512x512_80k_ade20k_20200614_185028-0bb3f844.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_80k_ade20k/deeplabv3_r50-d8_512x512_80k_ade20k_20200614_185028.log.json) | +| DeepLabV3 | R-101-D8 | 512x512 | 80000 | 12.4 | 10.14 | V100 | 44.08 | 45.19 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_80k_ade20k/deeplabv3_r101-d8_512x512_80k_ade20k_20200615_021256-d89c7fa4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_80k_ade20k/deeplabv3_r101-d8_512x512_80k_ade20k_20200615_021256.log.json) | +| DeepLabV3 | R-50-D8 | 512x512 | 160000 | - | - | V100 | 42.66 | 44.09 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_160k_ade20k/deeplabv3_r50-d8_512x512_160k_ade20k_20200615_123227-5d0ee427.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_160k_ade20k/deeplabv3_r50-d8_512x512_160k_ade20k_20200615_123227.log.json) | +| DeepLabV3 | R-101-D8 | 512x512 | 160000 | - | - | V100 | 45.00 | 46.66 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_160k_ade20k/deeplabv3_r101-d8_512x512_160k_ade20k_20200615_105816-b1f72b3b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_160k_ade20k/deeplabv3_r101-d8_512x512_160k_ade20k_20200615_105816.log.json) | ### Pascal VOC 2012 + Aug -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| --------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DeepLabV3 | R-50-D8 | 512x512 | 20000 | 6.1 | 13.88 | V100 | 76.17 | 77.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_20k_voc12aug/deeplabv3_r50-d8_512x512_20k_voc12aug_20200617_010906-596905ef.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_20k_voc12aug/deeplabv3_r50-d8_512x512_20k_voc12aug_20200617_010906.log.json) | -| DeepLabV3 | R-101-D8 | 512x512 | 20000 | 9.6 | 9.81 | V100 | 78.70 | 79.95 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_20k_voc12aug/deeplabv3_r101-d8_512x512_20k_voc12aug_20200617_010932-8d13832f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_20k_voc12aug/deeplabv3_r101-d8_512x512_20k_voc12aug_20200617_010932.log.json) | -| DeepLabV3 | R-50-D8 | 512x512 | 40000 | - | - | V100 | 77.68 | 78.78 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_40k_voc12aug/deeplabv3_r50-d8_512x512_40k_voc12aug_20200613_161546-2ae96e7e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_40k_voc12aug/deeplabv3_r50-d8_512x512_40k_voc12aug_20200613_161546.log.json) | -| DeepLabV3 | R-101-D8 | 512x512 | 40000 | - | - | V100 | 77.92 | 79.18 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_40k_voc12aug/deeplabv3_r101-d8_512x512_40k_voc12aug_20200613_161432-0017d784.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_40k_voc12aug/deeplabv3_r101-d8_512x512_40k_voc12aug_20200613_161432.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| --------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DeepLabV3 | R-50-D8 | 512x512 | 20000 | 6.1 | 13.88 | V100 | 76.17 | 77.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_20k_voc12aug/deeplabv3_r50-d8_512x512_20k_voc12aug_20200617_010906-596905ef.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_20k_voc12aug/deeplabv3_r50-d8_512x512_20k_voc12aug_20200617_010906.log.json) | +| DeepLabV3 | R-101-D8 | 512x512 | 20000 | 9.6 | 9.81 | V100 | 78.70 | 79.95 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_20k_voc12aug/deeplabv3_r101-d8_512x512_20k_voc12aug_20200617_010932-8d13832f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_20k_voc12aug/deeplabv3_r101-d8_512x512_20k_voc12aug_20200617_010932.log.json) | +| DeepLabV3 | R-50-D8 | 512x512 | 40000 | - | - | V100 | 77.68 | 78.78 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_40k_voc12aug/deeplabv3_r50-d8_512x512_40k_voc12aug_20200613_161546-2ae96e7e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_40k_voc12aug/deeplabv3_r50-d8_512x512_40k_voc12aug_20200613_161546.log.json) | +| DeepLabV3 | R-101-D8 | 512x512 | 40000 | - | - | V100 | 77.92 | 79.18 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_40k_voc12aug/deeplabv3_r101-d8_512x512_40k_voc12aug_20200613_161432-0017d784.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_40k_voc12aug/deeplabv3_r101-d8_512x512_40k_voc12aug_20200613_161432.log.json) | ### Pascal Context -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| --------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DeepLabV3 | R-101-D8 | 480x480 | 40000 | 9.2 | 7.09 | V100 | 46.55 | 47.81 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-40k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_40k_pascal_context/deeplabv3_r101-d8_480x480_40k_pascal_context_20200911_204118-1aa27336.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_40k_pascal_context/deeplabv3_r101-d8_480x480_40k_pascal_context-20200911_204118.log.json) | -| DeepLabV3 | R-101-D8 | 480x480 | 80000 | - | - | V100 | 46.42 | 47.53 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-80k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_80k_pascal_context/deeplabv3_r101-d8_480x480_80k_pascal_context_20200911_170155-2a21fff3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_80k_pascal_context/deeplabv3_r101-d8_480x480_80k_pascal_context-20200911_170155.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| --------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DeepLabV3 | R-101-D8 | 480x480 | 40000 | 9.2 | 7.09 | V100 | 46.55 | 47.81 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r101-d8_4xb4-40k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_40k_pascal_context/deeplabv3_r101-d8_480x480_40k_pascal_context_20200911_204118-1aa27336.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_40k_pascal_context/deeplabv3_r101-d8_480x480_40k_pascal_context-20200911_204118.log.json) | +| DeepLabV3 | R-101-D8 | 480x480 | 80000 | - | - | V100 | 46.42 | 47.53 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r101-d8_4xb4-80k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_80k_pascal_context/deeplabv3_r101-d8_480x480_80k_pascal_context_20200911_170155-2a21fff3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_80k_pascal_context/deeplabv3_r101-d8_480x480_80k_pascal_context-20200911_170155.log.json) | ### Pascal Context 59 -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| --------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DeepLabV3 | R-101-D8 | 480x480 | 40000 | - | - | V100 | 52.61 | 54.28 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-40k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_40k_pascal_context_59/deeplabv3_r101-d8_480x480_40k_pascal_context_59_20210416_110332-cb08ea46.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_40k_pascal_context_59/deeplabv3_r101-d8_480x480_40k_pascal_context_59-20210416_110332.log.json) | -| DeepLabV3 | R-101-D8 | 480x480 | 80000 | - | - | V100 | 52.46 | 54.09 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-80k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_80k_pascal_context_59/deeplabv3_r101-d8_480x480_80k_pascal_context_59_20210416_113002-26303993.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_80k_pascal_context_59/deeplabv3_r101-d8_480x480_80k_pascal_context_59-20210416_113002.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| --------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DeepLabV3 | R-101-D8 | 480x480 | 40000 | - | - | V100 | 52.61 | 54.28 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r101-d8_4xb4-40k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_40k_pascal_context_59/deeplabv3_r101-d8_480x480_40k_pascal_context_59_20210416_110332-cb08ea46.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_40k_pascal_context_59/deeplabv3_r101-d8_480x480_40k_pascal_context_59-20210416_110332.log.json) | +| DeepLabV3 | R-101-D8 | 480x480 | 80000 | - | - | V100 | 52.46 | 54.09 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r101-d8_4xb4-80k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_80k_pascal_context_59/deeplabv3_r101-d8_480x480_80k_pascal_context_59_20210416_113002-26303993.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_480x480_80k_pascal_context_59/deeplabv3_r101-d8_480x480_80k_pascal_context_59-20210416_113002.log.json) | ### COCO-Stuff 10k -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| --------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DeepLabV3 | R-50-D8 | 512x512 | 20000 | 9.6 | 10.8 | V100 | 34.66 | 36.08 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb4-20k_coco-stuff10k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_20k_coco-stuff10k/deeplabv3_r50-d8_512x512_4x4_20k_coco-stuff10k_20210821_043025-b35f789d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_20k_coco-stuff10k/deeplabv3_r50-d8_512x512_4x4_20k_coco-stuff10k_20210821_043025.log.json) | -| DeepLabV3 | R-101-D8 | 512x512 | 20000 | 13.2 | 8.7 | V100 | 37.30 | 38.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-20k_coco-stuff10k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_20k_coco-stuff10k/deeplabv3_r101-d8_512x512_4x4_20k_coco-stuff10k_20210821_043025-c49752cb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_20k_coco-stuff10k/deeplabv3_r101-d8_512x512_4x4_20k_coco-stuff10k_20210821_043025.log.json) | -| DeepLabV3 | R-50-D8 | 512x512 | 40000 | - | - | V100 | 35.73 | 37.09 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb4-40k_coco-stuff10k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_40k_coco-stuff10k/deeplabv3_r50-d8_512x512_4x4_40k_coco-stuff10k_20210821_043305-dc76f3ff.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_40k_coco-stuff10k/deeplabv3_r50-d8_512x512_4x4_40k_coco-stuff10k_20210821_043305.log.json) | -| DeepLabV3 | R-101-D8 | 512x512 | 40000 | - | - | V100 | 37.81 | 38.80 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-40k_coco-stuff10k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_40k_coco-stuff10k/deeplabv3_r101-d8_512x512_4x4_40k_coco-stuff10k_20210821_043305-636cb433.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_40k_coco-stuff10k/deeplabv3_r101-d8_512x512_4x4_40k_coco-stuff10k_20210821_043305.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| --------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DeepLabV3 | R-50-D8 | 512x512 | 20000 | 9.6 | 10.8 | V100 | 34.66 | 36.08 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r50-d8_4xb4-20k_coco-stuff10k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_20k_coco-stuff10k/deeplabv3_r50-d8_512x512_4x4_20k_coco-stuff10k_20210821_043025-b35f789d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_20k_coco-stuff10k/deeplabv3_r50-d8_512x512_4x4_20k_coco-stuff10k_20210821_043025.log.json) | +| DeepLabV3 | R-101-D8 | 512x512 | 20000 | 13.2 | 8.7 | V100 | 37.30 | 38.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r101-d8_4xb4-20k_coco-stuff10k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_20k_coco-stuff10k/deeplabv3_r101-d8_512x512_4x4_20k_coco-stuff10k_20210821_043025-c49752cb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_20k_coco-stuff10k/deeplabv3_r101-d8_512x512_4x4_20k_coco-stuff10k_20210821_043025.log.json) | +| DeepLabV3 | R-50-D8 | 512x512 | 40000 | - | - | V100 | 35.73 | 37.09 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r50-d8_4xb4-40k_coco-stuff10k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_40k_coco-stuff10k/deeplabv3_r50-d8_512x512_4x4_40k_coco-stuff10k_20210821_043305-dc76f3ff.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_40k_coco-stuff10k/deeplabv3_r50-d8_512x512_4x4_40k_coco-stuff10k_20210821_043305.log.json) | +| DeepLabV3 | R-101-D8 | 512x512 | 40000 | - | - | V100 | 37.81 | 38.80 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r101-d8_4xb4-40k_coco-stuff10k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_40k_coco-stuff10k/deeplabv3_r101-d8_512x512_4x4_40k_coco-stuff10k_20210821_043305-636cb433.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_40k_coco-stuff10k/deeplabv3_r101-d8_512x512_4x4_40k_coco-stuff10k_20210821_043305.log.json) | ### COCO-Stuff 164k -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| --------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DeepLabV3 | R-50-D8 | 512x512 | 80000 | 9.6 | 10.8 | V100 | 39.38 | 40.03 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb4-80k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_80k_coco-stuff164k/deeplabv3_r50-d8_512x512_4x4_80k_coco-stuff164k_20210709_163016-88675c24.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_80k_coco-stuff164k/deeplabv3_r50-d8_512x512_4x4_80k_coco-stuff164k_20210709_163016.log.json) | -| DeepLabV3 | R-101-D8 | 512x512 | 80000 | 13.2 | 8.7 | V100 | 40.87 | 41.50 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-80k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_80k_coco-stuff164k/deeplabv3_r101-d8_512x512_4x4_80k_coco-stuff164k_20210709_201252-13600dc2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_80k_coco-stuff164k/deeplabv3_r101-d8_512x512_4x4_80k_coco-stuff164k_20210709_201252.log.json) | -| DeepLabV3 | R-50-D8 | 512x512 | 160000 | - | - | V100 | 41.09 | 41.69 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb4-160k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_160k_coco-stuff164k/deeplabv3_r50-d8_512x512_4x4_160k_coco-stuff164k_20210709_163016-49f2812b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_160k_coco-stuff164k/deeplabv3_r50-d8_512x512_4x4_160k_coco-stuff164k_20210709_163016.log.json) | -| DeepLabV3 | R-101-D8 | 512x512 | 160000 | - | - | V100 | 41.82 | 42.49 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-160k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_160k_coco-stuff164k/deeplabv3_r101-d8_512x512_4x4_160k_coco-stuff164k_20210709_155402-f035acfd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_160k_coco-stuff164k/deeplabv3_r101-d8_512x512_4x4_160k_coco-stuff164k_20210709_155402.log.json) | -| DeepLabV3 | R-50-D8 | 512x512 | 320000 | - | - | V100 | 41.37 | 42.22 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r50-d8_4xb4-320k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_320k_coco-stuff164k/deeplabv3_r50-d8_512x512_4x4_320k_coco-stuff164k_20210709_155403-51b21115.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_320k_coco-stuff164k/deeplabv3_r50-d8_512x512_4x4_320k_coco-stuff164k_20210709_155403.log.json) | -| DeepLabV3 | R-101-D8 | 512x512 | 320000 | - | - | V100 | 42.61 | 43.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3/deeplabv3_r101-d8_4xb4-320k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_320k_coco-stuff164k/deeplabv3_r101-d8_512x512_4x4_320k_coco-stuff164k_20210709_155402-3cbca14d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_320k_coco-stuff164k/deeplabv3_r101-d8_512x512_4x4_320k_coco-stuff164k_20210709_155402.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| --------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DeepLabV3 | R-50-D8 | 512x512 | 80000 | 9.6 | 10.8 | V100 | 39.38 | 40.03 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r50-d8_4xb4-80k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_80k_coco-stuff164k/deeplabv3_r50-d8_512x512_4x4_80k_coco-stuff164k_20210709_163016-88675c24.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_80k_coco-stuff164k/deeplabv3_r50-d8_512x512_4x4_80k_coco-stuff164k_20210709_163016.log.json) | +| DeepLabV3 | R-101-D8 | 512x512 | 80000 | 13.2 | 8.7 | V100 | 40.87 | 41.50 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r101-d8_4xb4-80k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_80k_coco-stuff164k/deeplabv3_r101-d8_512x512_4x4_80k_coco-stuff164k_20210709_201252-13600dc2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_80k_coco-stuff164k/deeplabv3_r101-d8_512x512_4x4_80k_coco-stuff164k_20210709_201252.log.json) | +| DeepLabV3 | R-50-D8 | 512x512 | 160000 | - | - | V100 | 41.09 | 41.69 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r50-d8_4xb4-160k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_160k_coco-stuff164k/deeplabv3_r50-d8_512x512_4x4_160k_coco-stuff164k_20210709_163016-49f2812b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_160k_coco-stuff164k/deeplabv3_r50-d8_512x512_4x4_160k_coco-stuff164k_20210709_163016.log.json) | +| DeepLabV3 | R-101-D8 | 512x512 | 160000 | - | - | V100 | 41.82 | 42.49 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r101-d8_4xb4-160k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_160k_coco-stuff164k/deeplabv3_r101-d8_512x512_4x4_160k_coco-stuff164k_20210709_155402-f035acfd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_160k_coco-stuff164k/deeplabv3_r101-d8_512x512_4x4_160k_coco-stuff164k_20210709_155402.log.json) | +| DeepLabV3 | R-50-D8 | 512x512 | 320000 | - | - | V100 | 41.37 | 42.22 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r50-d8_4xb4-320k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_320k_coco-stuff164k/deeplabv3_r50-d8_512x512_4x4_320k_coco-stuff164k_20210709_155403-51b21115.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_4x4_320k_coco-stuff164k/deeplabv3_r50-d8_512x512_4x4_320k_coco-stuff164k_20210709_155403.log.json) | +| DeepLabV3 | R-101-D8 | 512x512 | 320000 | - | - | V100 | 42.61 | 43.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3/deeplabv3_r101-d8_4xb4-320k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_320k_coco-stuff164k/deeplabv3_r101-d8_512x512_4x4_320k_coco-stuff164k_20210709_155402-3cbca14d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_4x4_320k_coco-stuff164k/deeplabv3_r101-d8_512x512_4x4_320k_coco-stuff164k_20210709_155402.log.json) | Note: diff --git a/configs/deeplabv3plus/README.md b/configs/deeplabv3plus/README.md index 15c51a504a..04d01fa512 100644 --- a/configs/deeplabv3plus/README.md +++ b/configs/deeplabv3plus/README.md @@ -26,98 +26,98 @@ Spatial pyramid pooling module or encode-decoder structure are used in deep neur ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ----------------- | --------------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| DeepLabV3+ | R-50-D8 | 512x1024 | 40000 | 7.5 | 3.94 | V100 | 79.61 | 81.01 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_40k_cityscapes/deeplabv3plus_r50-d8_512x1024_40k_cityscapes_20200605_094610-d222ffcd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_40k_cityscapes/deeplabv3plus_r50-d8_512x1024_40k_cityscapes_20200605_094610.log.json) | -| DeepLabV3+ | R-101-D8 | 512x1024 | 40000 | 11 | 2.60 | V100 | 80.21 | 81.82 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_40k_cityscapes/deeplabv3plus_r101-d8_512x1024_40k_cityscapes_20200605_094614-3769eecf.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_40k_cityscapes/deeplabv3plus_r101-d8_512x1024_40k_cityscapes_20200605_094614.log.json) | -| DeepLabV3+ | R-50-D8 | 769x769 | 40000 | 8.5 | 1.72 | V100 | 78.97 | 80.46 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_769x769_40k_cityscapes/deeplabv3plus_r50-d8_769x769_40k_cityscapes_20200606_114143-1dcb0e3c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_769x769_40k_cityscapes/deeplabv3plus_r50-d8_769x769_40k_cityscapes_20200606_114143.log.json) | -| DeepLabV3+ | R-101-D8 | 769x769 | 40000 | 12.5 | 1.15 | V100 | 79.46 | 80.50 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_769x769_40k_cityscapes/deeplabv3plus_r101-d8_769x769_40k_cityscapes_20200606_114304-ff414b9e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_769x769_40k_cityscapes/deeplabv3plus_r101-d8_769x769_40k_cityscapes_20200606_114304.log.json) | -| DeepLabV3+ | R-18-D8 | 512x1024 | 80000 | 2.2 | 14.27 | V100 | 76.89 | 78.76 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r18-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_512x1024_80k_cityscapes/deeplabv3plus_r18-d8_512x1024_80k_cityscapes_20201226_080942-cff257fe.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_512x1024_80k_cityscapes/deeplabv3plus_r18-d8_512x1024_80k_cityscapes-20201226_080942.log.json) | -| DeepLabV3+ | R-50-D8 | 512x1024 | 80000 | - | - | V100 | 80.09 | 81.13 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_80k_cityscapes/deeplabv3plus_r50-d8_512x1024_80k_cityscapes_20200606_114049-f9fb496d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_80k_cityscapes/deeplabv3plus_r50-d8_512x1024_80k_cityscapes_20200606_114049.log.json) | -| DeepLabV3+ | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 80.97 | 82.03 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_80k_cityscapes/deeplabv3plus_r101-d8_512x1024_80k_cityscapes_20200606_114143-068fcfe9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_80k_cityscapes/deeplabv3plus_r101-d8_512x1024_80k_cityscapes_20200606_114143.log.json) | -| DeepLabV3+ (FP16) | R-101-D8 | 512x1024 | 80000 | 6.35 | 7.87 | V100 | 80.46 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb2-amp-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_fp16_512x1024_80k_cityscapes/deeplabv3plus_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230920-f1104f4b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_fp16_512x1024_80k_cityscapes/deeplabv3plus_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230920.log.json) | -| DeepLabV3+ | R-18-D8 | 769x769 | 80000 | 2.5 | 5.74 | V100 | 76.26 | 77.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r18-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_769x769_80k_cityscapes/deeplabv3plus_r18-d8_769x769_80k_cityscapes_20201226_083346-f326e06a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_769x769_80k_cityscapes/deeplabv3plus_r18-d8_769x769_80k_cityscapes-20201226_083346.log.json) | -| DeepLabV3+ | R-50-D8 | 769x769 | 80000 | - | - | V100 | 79.83 | 81.48 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_769x769_80k_cityscapes/deeplabv3plus_r50-d8_769x769_80k_cityscapes_20200606_210233-0e9dfdc4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_769x769_80k_cityscapes/deeplabv3plus_r50-d8_769x769_80k_cityscapes_20200606_210233.log.json) | -| DeepLabV3+ | R-101-D8 | 769x769 | 80000 | - | - | V100 | 80.65 | 81.47 | [config\[1\]](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_769x769_80k_cityscapes/deeplabv3plus_r101-d8_769x769_80k_cityscapes_20220406_154720-dfcc0b68.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_769x769_80k_cityscapes/deeplabv3plus_r101-d8_769x769_80k_cityscapes_20220406_154720.log.json) | -| DeepLabV3+ | R-101-D16-MG124 | 512x1024 | 40000 | 5.8 | 7.48 | V100 | 79.09 | 80.36 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/ddeeplabv3plus_r101-d16-mg124_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d16-mg124_512x1024_40k_cityscapes/deeplabv3plus_r101-d16-mg124_512x1024_40k_cityscapes_20200908_005644-cf9ce186.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d16-mg124_512x1024_40k_cityscapes/deeplabv3plus_r101-d16-mg124_512x1024_40k_cityscapes-20200908_005644.log.json) | -| DeepLabV3+ | R-101-D16-MG124 | 512x1024 | 80000 | 9.9 | - | V100 | 79.90 | 81.33 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d16-mg124_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d16-mg124_512x1024_80k_cityscapes/deeplabv3plus_r101-d16-mg124_512x1024_80k_cityscapes_20200908_005644-ee6158e0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d16-mg124_512x1024_80k_cityscapes/deeplabv3plus_r101-d16-mg124_512x1024_80k_cityscapes-20200908_005644.log.json) | -| DeepLabV3+ | R-18b-D8 | 512x1024 | 80000 | 2.1 | 14.95 | V100 | 75.87 | 77.52 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r18b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18b-d8_512x1024_80k_cityscapes/deeplabv3plus_r18b-d8_512x1024_80k_cityscapes_20201226_090828-e451abd9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18b-d8_512x1024_80k_cityscapes/deeplabv3plus_r18b-d8_512x1024_80k_cityscapes-20201226_090828.log.json) | -| DeepLabV3+ | R-50b-D8 | 512x1024 | 80000 | 7.4 | 3.94 | V100 | 80.28 | 81.44 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50b-d8_512x1024_80k_cityscapes/deeplabv3plus_r50b-d8_512x1024_80k_cityscapes_20201225_213645-a97e4e43.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50b-d8_512x1024_80k_cityscapes/deeplabv3plus_r50b-d8_512x1024_80k_cityscapes-20201225_213645.log.json) | -| DeepLabV3+ | R-101b-D8 | 512x1024 | 80000 | 10.9 | 2.60 | V100 | 80.16 | 81.41 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101b-d8_512x1024_80k_cityscapes/deeplabv3plus_r101b-d8_512x1024_80k_cityscapes_20201226_190843-9c3c93a4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101b-d8_512x1024_80k_cityscapes/deeplabv3plus_r101b-d8_512x1024_80k_cityscapes-20201226_190843.log.json) | -| DeepLabV3+ | R-18b-D8 | 769x769 | 80000 | 2.4 | 5.96 | V100 | 76.36 | 78.24 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r18b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18b-d8_769x769_80k_cityscapes/deeplabv3plus_r18b-d8_769x769_80k_cityscapes_20201226_151312-2c868aff.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18b-d8_769x769_80k_cityscapes/deeplabv3plus_r18b-d8_769x769_80k_cityscapes-20201226_151312.log.json) | -| DeepLabV3+ | R-50b-D8 | 769x769 | 80000 | 8.4 | 1.72 | V100 | 79.41 | 80.56 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50b-d8_769x769_80k_cityscapes/deeplabv3plus_r50b-d8_769x769_80k_cityscapes_20201225_224655-8b596d1c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50b-d8_769x769_80k_cityscapes/deeplabv3plus_r50b-d8_769x769_80k_cityscapes-20201225_224655.log.json) | -| DeepLabV3+ | R-101b-D8 | 769x769 | 80000 | 12.3 | 1.10 | V100 | 79.88 | 81.46 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101b-d8_769x769_80k_cityscapes/deeplabv3plus_r101b-d8_769x769_80k_cityscapes_20201226_205041-227cdf7c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101b-d8_769x769_80k_cityscapes/deeplabv3plus_r101b-d8_769x769_80k_cityscapes-20201226_205041.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ----------------- | --------------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| DeepLabV3+ | R-50-D8 | 512x1024 | 40000 | 7.5 | 3.94 | V100 | 79.61 | 81.01 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_40k_cityscapes/deeplabv3plus_r50-d8_512x1024_40k_cityscapes_20200605_094610-d222ffcd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_40k_cityscapes/deeplabv3plus_r50-d8_512x1024_40k_cityscapes_20200605_094610.log.json) | +| DeepLabV3+ | R-101-D8 | 512x1024 | 40000 | 11 | 2.60 | V100 | 80.21 | 81.82 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_40k_cityscapes/deeplabv3plus_r101-d8_512x1024_40k_cityscapes_20200605_094614-3769eecf.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_40k_cityscapes/deeplabv3plus_r101-d8_512x1024_40k_cityscapes_20200605_094614.log.json) | +| DeepLabV3+ | R-50-D8 | 769x769 | 40000 | 8.5 | 1.72 | V100 | 78.97 | 80.46 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_769x769_40k_cityscapes/deeplabv3plus_r50-d8_769x769_40k_cityscapes_20200606_114143-1dcb0e3c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_769x769_40k_cityscapes/deeplabv3plus_r50-d8_769x769_40k_cityscapes_20200606_114143.log.json) | +| DeepLabV3+ | R-101-D8 | 769x769 | 40000 | 12.5 | 1.15 | V100 | 79.46 | 80.50 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_769x769_40k_cityscapes/deeplabv3plus_r101-d8_769x769_40k_cityscapes_20200606_114304-ff414b9e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_769x769_40k_cityscapes/deeplabv3plus_r101-d8_769x769_40k_cityscapes_20200606_114304.log.json) | +| DeepLabV3+ | R-18-D8 | 512x1024 | 80000 | 2.2 | 14.27 | V100 | 76.89 | 78.76 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r18-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_512x1024_80k_cityscapes/deeplabv3plus_r18-d8_512x1024_80k_cityscapes_20201226_080942-cff257fe.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_512x1024_80k_cityscapes/deeplabv3plus_r18-d8_512x1024_80k_cityscapes-20201226_080942.log.json) | +| DeepLabV3+ | R-50-D8 | 512x1024 | 80000 | - | - | V100 | 80.09 | 81.13 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_80k_cityscapes/deeplabv3plus_r50-d8_512x1024_80k_cityscapes_20200606_114049-f9fb496d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_80k_cityscapes/deeplabv3plus_r50-d8_512x1024_80k_cityscapes_20200606_114049.log.json) | +| DeepLabV3+ | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 80.97 | 82.03 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_80k_cityscapes/deeplabv3plus_r101-d8_512x1024_80k_cityscapes_20200606_114143-068fcfe9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_80k_cityscapes/deeplabv3plus_r101-d8_512x1024_80k_cityscapes_20200606_114143.log.json) | +| DeepLabV3+ (FP16) | R-101-D8 | 512x1024 | 80000 | 6.35 | 7.87 | V100 | 80.46 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb2-amp-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_fp16_512x1024_80k_cityscapes/deeplabv3plus_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230920-f1104f4b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_fp16_512x1024_80k_cityscapes/deeplabv3plus_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230920.log.json) | +| DeepLabV3+ | R-18-D8 | 769x769 | 80000 | 2.5 | 5.74 | V100 | 76.26 | 77.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r18-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_769x769_80k_cityscapes/deeplabv3plus_r18-d8_769x769_80k_cityscapes_20201226_083346-f326e06a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_769x769_80k_cityscapes/deeplabv3plus_r18-d8_769x769_80k_cityscapes-20201226_083346.log.json) | +| DeepLabV3+ | R-50-D8 | 769x769 | 80000 | - | - | V100 | 79.83 | 81.48 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_769x769_80k_cityscapes/deeplabv3plus_r50-d8_769x769_80k_cityscapes_20200606_210233-0e9dfdc4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_769x769_80k_cityscapes/deeplabv3plus_r50-d8_769x769_80k_cityscapes_20200606_210233.log.json) | +| DeepLabV3+ | R-101-D8 | 769x769 | 80000 | - | - | V100 | 80.65 | 81.47 | [config\[1\]](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_769x769_80k_cityscapes/deeplabv3plus_r101-d8_769x769_80k_cityscapes_20220406_154720-dfcc0b68.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_769x769_80k_cityscapes/deeplabv3plus_r101-d8_769x769_80k_cityscapes_20220406_154720.log.json) | +| DeepLabV3+ | R-101-D16-MG124 | 512x1024 | 40000 | 5.8 | 7.48 | V100 | 79.09 | 80.36 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/ddeeplabv3plus_r101-d16-mg124_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d16-mg124_512x1024_40k_cityscapes/deeplabv3plus_r101-d16-mg124_512x1024_40k_cityscapes_20200908_005644-cf9ce186.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d16-mg124_512x1024_40k_cityscapes/deeplabv3plus_r101-d16-mg124_512x1024_40k_cityscapes-20200908_005644.log.json) | +| DeepLabV3+ | R-101-D16-MG124 | 512x1024 | 80000 | 9.9 | - | V100 | 79.90 | 81.33 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r101-d16-mg124_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d16-mg124_512x1024_80k_cityscapes/deeplabv3plus_r101-d16-mg124_512x1024_80k_cityscapes_20200908_005644-ee6158e0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d16-mg124_512x1024_80k_cityscapes/deeplabv3plus_r101-d16-mg124_512x1024_80k_cityscapes-20200908_005644.log.json) | +| DeepLabV3+ | R-18b-D8 | 512x1024 | 80000 | 2.1 | 14.95 | V100 | 75.87 | 77.52 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r18b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18b-d8_512x1024_80k_cityscapes/deeplabv3plus_r18b-d8_512x1024_80k_cityscapes_20201226_090828-e451abd9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18b-d8_512x1024_80k_cityscapes/deeplabv3plus_r18b-d8_512x1024_80k_cityscapes-20201226_090828.log.json) | +| DeepLabV3+ | R-50b-D8 | 512x1024 | 80000 | 7.4 | 3.94 | V100 | 80.28 | 81.44 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r50b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50b-d8_512x1024_80k_cityscapes/deeplabv3plus_r50b-d8_512x1024_80k_cityscapes_20201225_213645-a97e4e43.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50b-d8_512x1024_80k_cityscapes/deeplabv3plus_r50b-d8_512x1024_80k_cityscapes-20201225_213645.log.json) | +| DeepLabV3+ | R-101b-D8 | 512x1024 | 80000 | 10.9 | 2.60 | V100 | 80.16 | 81.41 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r101b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101b-d8_512x1024_80k_cityscapes/deeplabv3plus_r101b-d8_512x1024_80k_cityscapes_20201226_190843-9c3c93a4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101b-d8_512x1024_80k_cityscapes/deeplabv3plus_r101b-d8_512x1024_80k_cityscapes-20201226_190843.log.json) | +| DeepLabV3+ | R-18b-D8 | 769x769 | 80000 | 2.4 | 5.96 | V100 | 76.36 | 78.24 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r18b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18b-d8_769x769_80k_cityscapes/deeplabv3plus_r18b-d8_769x769_80k_cityscapes_20201226_151312-2c868aff.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18b-d8_769x769_80k_cityscapes/deeplabv3plus_r18b-d8_769x769_80k_cityscapes-20201226_151312.log.json) | +| DeepLabV3+ | R-50b-D8 | 769x769 | 80000 | 8.4 | 1.72 | V100 | 79.41 | 80.56 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r50b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50b-d8_769x769_80k_cityscapes/deeplabv3plus_r50b-d8_769x769_80k_cityscapes_20201225_224655-8b596d1c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50b-d8_769x769_80k_cityscapes/deeplabv3plus_r50b-d8_769x769_80k_cityscapes-20201225_224655.log.json) | +| DeepLabV3+ | R-101b-D8 | 769x769 | 80000 | 12.3 | 1.10 | V100 | 79.88 | 81.46 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r101b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101b-d8_769x769_80k_cityscapes/deeplabv3plus_r101b-d8_769x769_80k_cityscapes_20201226_205041-227cdf7c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101b-d8_769x769_80k_cityscapes/deeplabv3plus_r101b-d8_769x769_80k_cityscapes-20201226_205041.log.json) | \[1\] The training of the model is sensitive to random seed, and the seed to train it is 1111. ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ---------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DeepLabV3+ | R-50-D8 | 512x512 | 80000 | 10.6 | 21.01 | V100 | 42.72 | 43.75 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_ade20k/deeplabv3plus_r50-d8_512x512_80k_ade20k_20200614_185028-bf1400d8.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_ade20k/deeplabv3plus_r50-d8_512x512_80k_ade20k_20200614_185028.log.json) | -| DeepLabV3+ | R-101-D8 | 512x512 | 80000 | 14.1 | 14.16 | V100 | 44.60 | 46.06 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_ade20k/deeplabv3plus_r101-d8_512x512_80k_ade20k_20200615_014139-d5730af7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_ade20k/deeplabv3plus_r101-d8_512x512_80k_ade20k_20200615_014139.log.json) | -| DeepLabV3+ | R-50-D8 | 512x512 | 160000 | - | - | V100 | 43.95 | 44.93 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_160k_ade20k/deeplabv3plus_r50-d8_512x512_160k_ade20k_20200615_124504-6135c7e0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_160k_ade20k/deeplabv3plus_r50-d8_512x512_160k_ade20k_20200615_124504.log.json) | -| DeepLabV3+ | R-101-D8 | 512x512 | 160000 | - | - | V100 | 45.47 | 46.35 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_160k_ade20k/deeplabv3plus_r101-d8_512x512_160k_ade20k_20200615_123232-38ed86bb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_160k_ade20k/deeplabv3plus_r101-d8_512x512_160k_ade20k_20200615_123232.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DeepLabV3+ | R-50-D8 | 512x512 | 80000 | 10.6 | 21.01 | V100 | 42.72 | 43.75 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_ade20k/deeplabv3plus_r50-d8_512x512_80k_ade20k_20200614_185028-bf1400d8.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_ade20k/deeplabv3plus_r50-d8_512x512_80k_ade20k_20200614_185028.log.json) | +| DeepLabV3+ | R-101-D8 | 512x512 | 80000 | 14.1 | 14.16 | V100 | 44.60 | 46.06 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_ade20k/deeplabv3plus_r101-d8_512x512_80k_ade20k_20200615_014139-d5730af7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_ade20k/deeplabv3plus_r101-d8_512x512_80k_ade20k_20200615_014139.log.json) | +| DeepLabV3+ | R-50-D8 | 512x512 | 160000 | - | - | V100 | 43.95 | 44.93 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_160k_ade20k/deeplabv3plus_r50-d8_512x512_160k_ade20k_20200615_124504-6135c7e0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_160k_ade20k/deeplabv3plus_r50-d8_512x512_160k_ade20k_20200615_124504.log.json) | +| DeepLabV3+ | R-101-D8 | 512x512 | 160000 | - | - | V100 | 45.47 | 46.35 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_160k_ade20k/deeplabv3plus_r101-d8_512x512_160k_ade20k_20200615_123232-38ed86bb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_160k_ade20k/deeplabv3plus_r101-d8_512x512_160k_ade20k_20200615_123232.log.json) | ### Pascal VOC 2012 + Aug -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ---------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DeepLabV3+ | R-50-D8 | 512x512 | 20000 | 7.6 | 21 | V100 | 75.93 | 77.50 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_20k_voc12aug/deeplabv3plus_r50-d8_512x512_20k_voc12aug_20200617_102323-aad58ef1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_20k_voc12aug/deeplabv3plus_r50-d8_512x512_20k_voc12aug_20200617_102323.log.json) | -| DeepLabV3+ | R-101-D8 | 512x512 | 20000 | 11 | 13.88 | V100 | 77.22 | 78.59 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_20k_voc12aug/deeplabv3plus_r101-d8_512x512_20k_voc12aug_20200617_102345-c7ff3d56.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_20k_voc12aug/deeplabv3plus_r101-d8_512x512_20k_voc12aug_20200617_102345.log.json) | -| DeepLabV3+ | R-50-D8 | 512x512 | 40000 | - | - | V100 | 76.81 | 77.57 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_40k_voc12aug/deeplabv3plus_r50-d8_512x512_40k_voc12aug_20200613_161759-e1b43aa9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_40k_voc12aug/deeplabv3plus_r50-d8_512x512_40k_voc12aug_20200613_161759.log.json) | -| DeepLabV3+ | R-101-D8 | 512x512 | 40000 | - | - | V100 | 78.62 | 79.53 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_40k_voc12aug/deeplabv3plus_r101-d8_512x512_40k_voc12aug_20200613_205333-faf03387.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_40k_voc12aug/deeplabv3plus_r101-d8_512x512_40k_voc12aug_20200613_205333.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DeepLabV3+ | R-50-D8 | 512x512 | 20000 | 7.6 | 21 | V100 | 75.93 | 77.50 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_20k_voc12aug/deeplabv3plus_r50-d8_512x512_20k_voc12aug_20200617_102323-aad58ef1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_20k_voc12aug/deeplabv3plus_r50-d8_512x512_20k_voc12aug_20200617_102323.log.json) | +| DeepLabV3+ | R-101-D8 | 512x512 | 20000 | 11 | 13.88 | V100 | 77.22 | 78.59 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_20k_voc12aug/deeplabv3plus_r101-d8_512x512_20k_voc12aug_20200617_102345-c7ff3d56.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_20k_voc12aug/deeplabv3plus_r101-d8_512x512_20k_voc12aug_20200617_102345.log.json) | +| DeepLabV3+ | R-50-D8 | 512x512 | 40000 | - | - | V100 | 76.81 | 77.57 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_40k_voc12aug/deeplabv3plus_r50-d8_512x512_40k_voc12aug_20200613_161759-e1b43aa9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_40k_voc12aug/deeplabv3plus_r50-d8_512x512_40k_voc12aug_20200613_161759.log.json) | +| DeepLabV3+ | R-101-D8 | 512x512 | 40000 | - | - | V100 | 78.62 | 79.53 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_40k_voc12aug/deeplabv3plus_r101-d8_512x512_40k_voc12aug_20200613_205333-faf03387.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_40k_voc12aug/deeplabv3plus_r101-d8_512x512_40k_voc12aug_20200613_205333.log.json) | ### Pascal Context -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ---------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DeepLabV3+ | R-101-D8 | 480x480 | 40000 | - | 9.09 | V100 | 47.30 | 48.47 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-40k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_40k_pascal_context/deeplabv3plus_r101-d8_480x480_40k_pascal_context_20200911_165459-d3c8a29e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_40k_pascal_context/deeplabv3plus_r101-d8_480x480_40k_pascal_context-20200911_165459.log.json) | -| DeepLabV3+ | R-101-D8 | 480x480 | 80000 | - | - | V100 | 47.23 | 48.26 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_80k_pascal_context/deeplabv3plus_r101-d8_480x480_80k_pascal_context_20200911_155322-145d3ee8.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_80k_pascal_context/deeplabv3plus_r101-d8_480x480_80k_pascal_context-20200911_155322.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DeepLabV3+ | R-101-D8 | 480x480 | 40000 | - | 9.09 | V100 | 47.30 | 48.47 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-40k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_40k_pascal_context/deeplabv3plus_r101-d8_480x480_40k_pascal_context_20200911_165459-d3c8a29e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_40k_pascal_context/deeplabv3plus_r101-d8_480x480_40k_pascal_context-20200911_165459.log.json) | +| DeepLabV3+ | R-101-D8 | 480x480 | 80000 | - | - | V100 | 47.23 | 48.26 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_80k_pascal_context/deeplabv3plus_r101-d8_480x480_80k_pascal_context_20200911_155322-145d3ee8.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_80k_pascal_context/deeplabv3plus_r101-d8_480x480_80k_pascal_context-20200911_155322.log.json) | ### Pascal Context 59 -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ---------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DeepLabV3+ | R-101-D8 | 480x480 | 40000 | - | - | V100 | 52.86 | 54.54 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-40k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_40k_pascal_context_59/deeplabv3plus_r101-d8_480x480_40k_pascal_context_59_20210416_111233-ed937f15.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_40k_pascal_context_59/deeplabv3plus_r101-d8_480x480_40k_pascal_context_59-20210416_111233.log.json) | -| DeepLabV3+ | R-101-D8 | 480x480 | 80000 | - | - | V100 | 53.2 | 54.67 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-80k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_80k_pascal_context_59/deeplabv3plus_r101-d8_480x480_80k_pascal_context_59_20210416_111127-7ca0331d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_80k_pascal_context_59/deeplabv3plus_r101-d8_480x480_80k_pascal_context_59-20210416_111127.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DeepLabV3+ | R-101-D8 | 480x480 | 40000 | - | - | V100 | 52.86 | 54.54 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-40k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_40k_pascal_context_59/deeplabv3plus_r101-d8_480x480_40k_pascal_context_59_20210416_111233-ed937f15.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_40k_pascal_context_59/deeplabv3plus_r101-d8_480x480_40k_pascal_context_59-20210416_111233.log.json) | +| DeepLabV3+ | R-101-D8 | 480x480 | 80000 | - | - | V100 | 53.2 | 54.67 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-80k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_80k_pascal_context_59/deeplabv3plus_r101-d8_480x480_80k_pascal_context_59_20210416_111127-7ca0331d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_480x480_80k_pascal_context_59/deeplabv3plus_r101-d8_480x480_80k_pascal_context_59-20210416_111127.log.json) | ### LoveDA -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ---------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| DeepLabV3+ | R-18-D8 | 512x512 | 80000 | 1.93 | 25.57 | V100 | 50.28 | 50.47 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r18-d8_4xb4-80k_loveda-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_512x512_80k_loveda/deeplabv3plus_r18-d8_512x512_80k_loveda_20211104_132800-ce0fa0ca.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_512x512_80k_loveda/deeplabv3plus_r18-d8_512x512_80k_loveda_20211104_132800.log.json) | -| DeepLabV3+ | R-50-D8 | 512x512 | 80000 | 7.37 | 6.00 | V100 | 50.99 | 50.65 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_loveda-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_loveda/deeplabv3plus_r50-d8_512x512_80k_loveda_20211105_080442-f0720392.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_loveda/deeplabv3plus_r50-d8_512x512_80k_loveda_20211105_080442.log.json) | -| DeepLabV3+ | R-101-D8 | 512x512 | 80000 | 10.84 | 4.33 | V100 | 51.47 | 51.32 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-80k_loveda-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_loveda/deeplabv3plus_r101-d8_512x512_80k_loveda_20211105_110759-4c1f297e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_loveda/deeplabv3plus_r101-d8_512x512_80k_loveda_20211105_110759.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| DeepLabV3+ | R-18-D8 | 512x512 | 80000 | 1.93 | 25.57 | V100 | 50.28 | 50.47 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r18-d8_4xb4-80k_loveda-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_512x512_80k_loveda/deeplabv3plus_r18-d8_512x512_80k_loveda_20211104_132800-ce0fa0ca.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_512x512_80k_loveda/deeplabv3plus_r18-d8_512x512_80k_loveda_20211104_132800.log.json) | +| DeepLabV3+ | R-50-D8 | 512x512 | 80000 | 7.37 | 6.00 | V100 | 50.99 | 50.65 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_loveda-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_loveda/deeplabv3plus_r50-d8_512x512_80k_loveda_20211105_080442-f0720392.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_loveda/deeplabv3plus_r50-d8_512x512_80k_loveda_20211105_080442.log.json) | +| DeepLabV3+ | R-101-D8 | 512x512 | 80000 | 10.84 | 4.33 | V100 | 51.47 | 51.32 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-80k_loveda-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_loveda/deeplabv3plus_r101-d8_512x512_80k_loveda_20211105_110759-4c1f297e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_loveda/deeplabv3plus_r101-d8_512x512_80k_loveda_20211105_110759.log.json) | ### Potsdam -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ---------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DeepLabV3+ | R-18-D8 | 512x512 | 80000 | 1.91 | 81.68 | V100 | 77.09 | 78.44 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r18-d8_4xb4-80k_potsdam-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_512x512_80k_potsdam/deeplabv3plus_r18-d8_512x512_80k_potsdam_20211219_020601-75fd5bc3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_512x512_80k_potsdam/deeplabv3plus_r18-d8_512x512_80k_potsdam_20211219_020601.log.json) | -| DeepLabV3+ | R-50-D8 | 512x512 | 80000 | 7.36 | 26.44 | V100 | 78.33 | 79.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_potsdam-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_potsdam/deeplabv3plus_r50-d8_512x512_80k_potsdam_20211219_031508-7e7a2b24.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_potsdam/deeplabv3plus_r50-d8_512x512_80k_potsdam_20211219_031508.log.json) | -| DeepLabV3+ | R-101-D8 | 512x512 | 80000 | 10.83 | 17.56 | V100 | 78.7 | 79.47 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-80k_potsdam-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_potsdam/deeplabv3plus_r101-d8_512x512_80k_potsdam_20211219_031508-8b112708.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_potsdam/deeplabv3plus_r101-d8_512x512_80k_potsdam_20211219_031508.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DeepLabV3+ | R-18-D8 | 512x512 | 80000 | 1.91 | 81.68 | V100 | 77.09 | 78.44 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r18-d8_4xb4-80k_potsdam-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_512x512_80k_potsdam/deeplabv3plus_r18-d8_512x512_80k_potsdam_20211219_020601-75fd5bc3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_512x512_80k_potsdam/deeplabv3plus_r18-d8_512x512_80k_potsdam_20211219_020601.log.json) | +| DeepLabV3+ | R-50-D8 | 512x512 | 80000 | 7.36 | 26.44 | V100 | 78.33 | 79.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_potsdam-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_potsdam/deeplabv3plus_r50-d8_512x512_80k_potsdam_20211219_031508-7e7a2b24.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_potsdam/deeplabv3plus_r50-d8_512x512_80k_potsdam_20211219_031508.log.json) | +| DeepLabV3+ | R-101-D8 | 512x512 | 80000 | 10.83 | 17.56 | V100 | 78.7 | 79.47 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-80k_potsdam-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_potsdam/deeplabv3plus_r101-d8_512x512_80k_potsdam_20211219_031508-8b112708.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_potsdam/deeplabv3plus_r101-d8_512x512_80k_potsdam_20211219_031508.log.json) | ### Vaihingen -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ---------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DeepLabV3+ | R-18-D8 | 512x512 | 80000 | 1.91 | 72.79 | V100 | 72.50 | 74.13 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r18-d8_4xb4-80k_vaihingen-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_4x4_512x512_80k_vaihingen/deeplabv3plus_r18-d8_4x4_512x512_80k_vaihingen_20211231_230805-7626a263.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_4x4_512x512_80k_vaihingen/deeplabv3plus_r18-d8_4x4_512x512_80k_vaihingen_20211231_230805.log.json) | -| DeepLabV3+ | R-50-D8 | 512x512 | 80000 | 7.36 | 26.91 | V100 | 73.97 | 75.05 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_vaihingen-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_4x4_512x512_80k_vaihingen/deeplabv3plus_r50-d8_4x4_512x512_80k_vaihingen_20211231_230816-5040938d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_4x4_512x512_80k_vaihingen/deeplabv3plus_r50-d8_4x4_512x512_80k_vaihingen_20211231_230816.log.json) | -| DeepLabV3+ | R-101-D8 | 512x512 | 80000 | 10.83 | 18.59 | V100 | 73.06 | 74.14 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-80k_vaihingen-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_4x4_512x512_80k_vaihingen/deeplabv3plus_r101-d8_4x4_512x512_80k_vaihingen_20211231_230816-8a095afa.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_4x4_512x512_80k_vaihingen/deeplabv3plus_r101-d8_4x4_512x512_80k_vaihingen_20211231_230816.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DeepLabV3+ | R-18-D8 | 512x512 | 80000 | 1.91 | 72.79 | V100 | 72.50 | 74.13 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r18-d8_4xb4-80k_vaihingen-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_4x4_512x512_80k_vaihingen/deeplabv3plus_r18-d8_4x4_512x512_80k_vaihingen_20211231_230805-7626a263.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_4x4_512x512_80k_vaihingen/deeplabv3plus_r18-d8_4x4_512x512_80k_vaihingen_20211231_230805.log.json) | +| DeepLabV3+ | R-50-D8 | 512x512 | 80000 | 7.36 | 26.91 | V100 | 73.97 | 75.05 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_vaihingen-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_4x4_512x512_80k_vaihingen/deeplabv3plus_r50-d8_4x4_512x512_80k_vaihingen_20211231_230816-5040938d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_4x4_512x512_80k_vaihingen/deeplabv3plus_r50-d8_4x4_512x512_80k_vaihingen_20211231_230816.log.json) | +| DeepLabV3+ | R-101-D8 | 512x512 | 80000 | 10.83 | 18.59 | V100 | 73.06 | 74.14 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb4-80k_vaihingen-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_4x4_512x512_80k_vaihingen/deeplabv3plus_r101-d8_4x4_512x512_80k_vaihingen_20211231_230816-8a095afa.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_4x4_512x512_80k_vaihingen/deeplabv3plus_r101-d8_4x4_512x512_80k_vaihingen_20211231_230816.log.json) | ### iSAID -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ---------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DeepLabV3+ | R-18-D8 | 896x896 | 80000 | 6.19 | 24.81 | V100 | 61.35 | 62.61 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r18-d8_4xb4-80k_isaid-896x896.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_4x4_896x896_80k_isaid/deeplabv3plus_r18-d8_4x4_896x896_80k_isaid_20220110_180526-7059991d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_4x4_896x896_80k_isaid/deeplabv3plus_r18-d8_4x4_896x896_80k_isaid_20220110_180526.log.json) | -| DeepLabV3+ | R-50-D8 | 896x896 | 80000 | 21.45 | 8.42 | V100 | 67.06 | 68.02 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_isaid-896x896.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_4x4_896x896_80k_isaid/deeplabv3plus_r50-d8_4x4_896x896_80k_isaid_20220110_180526-598be439.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_4x4_896x896_80k_isaid/deeplabv3plus_r50-d8_4x4_896x896_80k_isaid_20220110_180526.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DeepLabV3+ | R-18-D8 | 896x896 | 80000 | 6.19 | 24.81 | V100 | 61.35 | 62.61 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r18-d8_4xb4-80k_isaid-896x896.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_4x4_896x896_80k_isaid/deeplabv3plus_r18-d8_4x4_896x896_80k_isaid_20220110_180526-7059991d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r18-d8_4x4_896x896_80k_isaid/deeplabv3plus_r18-d8_4x4_896x896_80k_isaid_20220110_180526.log.json) | +| DeepLabV3+ | R-50-D8 | 896x896 | 80000 | 21.45 | 8.42 | V100 | 67.06 | 68.02 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-80k_isaid-896x896.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_4x4_896x896_80k_isaid/deeplabv3plus_r50-d8_4x4_896x896_80k_isaid_20220110_180526-598be439.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_4x4_896x896_80k_isaid/deeplabv3plus_r50-d8_4x4_896x896_80k_isaid_20220110_180526.log.json) | ### Mapillary Vistas v1.2 -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ---------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DeepLabV3+ | R-50-D8 | 1280x1280 | 300000 | 24.04 | 17.92 | A100 | 47.35 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-300k_mapillay_v1_65-1280x1280.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-300k_mapillay_v1_65-1280x1280/deeplabv3plus_r50-d8_4xb2-300k_mapillay_v1_65-1280x1280_20230301_110504-655f8e43.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-300k_mapillay_v1_65-1280x1280/deeplabv3plus_r50-d8_4xb2-300k_mapillay_v1_65-1280x1280_20230301_110504.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DeepLabV3+ | R-50-D8 | 1280x1280 | 300000 | 24.04 | 17.92 | A100 | 47.35 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-300k_mapillay_v1_65-1280x1280.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-300k_mapillay_v1_65-1280x1280/deeplabv3plus_r50-d8_4xb2-300k_mapillay_v1_65-1280x1280_20230301_110504-655f8e43.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_4xb2-300k_mapillay_v1_65-1280x1280/deeplabv3plus_r50-d8_4xb2-300k_mapillay_v1_65-1280x1280_20230301_110504.json) | Note: diff --git a/configs/dmnet/README.md b/configs/dmnet/README.md index 6004c06ccb..b0cf94455e 100644 --- a/configs/dmnet/README.md +++ b/configs/dmnet/README.md @@ -26,25 +26,25 @@ Multi-scale representation provides an effective way toaddress scale variation o ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DMNet | R-50-D8 | 512x1024 | 40000 | 7.0 | 3.66 | V100 | 77.78 | 79.14 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dmnet/dmnet_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x1024_40k_cityscapes/dmnet_r50-d8_512x1024_40k_cityscapes_20201215_042326-615373cf.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x1024_40k_cityscapes/dmnet_r50-d8_512x1024_40k_cityscapes-20201215_042326.log.json) | -| DMNet | R-101-D8 | 512x1024 | 40000 | 10.6 | 2.54 | V100 | 78.37 | 79.72 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dmnet/dmnet_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x1024_40k_cityscapes/dmnet_r101-d8_512x1024_40k_cityscapes_20201215_043100-8291e976.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x1024_40k_cityscapes/dmnet_r101-d8_512x1024_40k_cityscapes-20201215_043100.log.json) | -| DMNet | R-50-D8 | 769x769 | 40000 | 7.9 | 1.57 | V100 | 78.49 | 80.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dmnet/dmnet_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_769x769_40k_cityscapes/dmnet_r50-d8_769x769_40k_cityscapes_20201215_093706-e7f0e23e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_769x769_40k_cityscapes/dmnet_r50-d8_769x769_40k_cityscapes-20201215_093706.log.json) | -| DMNet | R-101-D8 | 769x769 | 40000 | 12.0 | 1.01 | V100 | 77.62 | 78.94 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dmnet/dmnet_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_769x769_40k_cityscapes/dmnet_r101-d8_769x769_40k_cityscapes_20201215_081348-a74261f6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_769x769_40k_cityscapes/dmnet_r101-d8_769x769_40k_cityscapes-20201215_081348.log.json) | -| DMNet | R-50-D8 | 512x1024 | 80000 | - | - | V100 | 79.07 | 80.22 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dmnet/dmnet_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x1024_80k_cityscapes/dmnet_r50-d8_512x1024_80k_cityscapes_20201215_053728-3c8893b9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x1024_80k_cityscapes/dmnet_r50-d8_512x1024_80k_cityscapes-20201215_053728.log.json) | -| DMNet | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 79.64 | 80.67 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dmnet/dmnet_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x1024_80k_cityscapes/dmnet_r101-d8_512x1024_80k_cityscapes_20201215_031718-fa081cb8.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x1024_80k_cityscapes/dmnet_r101-d8_512x1024_80k_cityscapes-20201215_031718.log.json) | -| DMNet | R-50-D8 | 769x769 | 80000 | - | - | V100 | 79.22 | 80.55 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dmnet/dmnet_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_769x769_80k_cityscapes/dmnet_r50-d8_769x769_80k_cityscapes_20201215_034006-6060840e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_769x769_80k_cityscapes/dmnet_r50-d8_769x769_80k_cityscapes-20201215_034006.log.json) | -| DMNet | R-101-D8 | 769x769 | 80000 | - | - | V100 | 79.19 | 80.65 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dmnet/dmnet_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_769x769_80k_cityscapes/dmnet_r101-d8_769x769_80k_cityscapes_20201215_082810-7f0de59a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_769x769_80k_cityscapes/dmnet_r101-d8_769x769_80k_cityscapes-20201215_082810.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DMNet | R-50-D8 | 512x1024 | 40000 | 7.0 | 3.66 | V100 | 77.78 | 79.14 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/dmnet/dmnet_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x1024_40k_cityscapes/dmnet_r50-d8_512x1024_40k_cityscapes_20201215_042326-615373cf.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x1024_40k_cityscapes/dmnet_r50-d8_512x1024_40k_cityscapes-20201215_042326.log.json) | +| DMNet | R-101-D8 | 512x1024 | 40000 | 10.6 | 2.54 | V100 | 78.37 | 79.72 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/dmnet/dmnet_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x1024_40k_cityscapes/dmnet_r101-d8_512x1024_40k_cityscapes_20201215_043100-8291e976.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x1024_40k_cityscapes/dmnet_r101-d8_512x1024_40k_cityscapes-20201215_043100.log.json) | +| DMNet | R-50-D8 | 769x769 | 40000 | 7.9 | 1.57 | V100 | 78.49 | 80.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/dmnet/dmnet_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_769x769_40k_cityscapes/dmnet_r50-d8_769x769_40k_cityscapes_20201215_093706-e7f0e23e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_769x769_40k_cityscapes/dmnet_r50-d8_769x769_40k_cityscapes-20201215_093706.log.json) | +| DMNet | R-101-D8 | 769x769 | 40000 | 12.0 | 1.01 | V100 | 77.62 | 78.94 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/dmnet/dmnet_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_769x769_40k_cityscapes/dmnet_r101-d8_769x769_40k_cityscapes_20201215_081348-a74261f6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_769x769_40k_cityscapes/dmnet_r101-d8_769x769_40k_cityscapes-20201215_081348.log.json) | +| DMNet | R-50-D8 | 512x1024 | 80000 | - | - | V100 | 79.07 | 80.22 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/dmnet/dmnet_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x1024_80k_cityscapes/dmnet_r50-d8_512x1024_80k_cityscapes_20201215_053728-3c8893b9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x1024_80k_cityscapes/dmnet_r50-d8_512x1024_80k_cityscapes-20201215_053728.log.json) | +| DMNet | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 79.64 | 80.67 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/dmnet/dmnet_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x1024_80k_cityscapes/dmnet_r101-d8_512x1024_80k_cityscapes_20201215_031718-fa081cb8.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x1024_80k_cityscapes/dmnet_r101-d8_512x1024_80k_cityscapes-20201215_031718.log.json) | +| DMNet | R-50-D8 | 769x769 | 80000 | - | - | V100 | 79.22 | 80.55 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/dmnet/dmnet_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_769x769_80k_cityscapes/dmnet_r50-d8_769x769_80k_cityscapes_20201215_034006-6060840e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_769x769_80k_cityscapes/dmnet_r50-d8_769x769_80k_cityscapes-20201215_034006.log.json) | +| DMNet | R-101-D8 | 769x769 | 80000 | - | - | V100 | 79.19 | 80.65 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/dmnet/dmnet_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_769x769_80k_cityscapes/dmnet_r101-d8_769x769_80k_cityscapes_20201215_082810-7f0de59a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_769x769_80k_cityscapes/dmnet_r101-d8_769x769_80k_cityscapes-20201215_082810.log.json) | ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DMNet | R-50-D8 | 512x512 | 80000 | 9.4 | 20.95 | V100 | 42.37 | 43.62 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dmnet/dmnet_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x512_80k_ade20k/dmnet_r50-d8_512x512_80k_ade20k_20201215_144744-f89092a6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x512_80k_ade20k/dmnet_r50-d8_512x512_80k_ade20k-20201215_144744.log.json) | -| DMNet | R-101-D8 | 512x512 | 80000 | 13.0 | 13.88 | V100 | 45.34 | 46.13 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dmnet/dmnet_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x512_80k_ade20k/dmnet_r101-d8_512x512_80k_ade20k_20201215_104812-bfa45311.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x512_80k_ade20k/dmnet_r101-d8_512x512_80k_ade20k-20201215_104812.log.json) | -| DMNet | R-50-D8 | 512x512 | 160000 | - | - | V100 | 43.15 | 44.17 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dmnet/dmnet_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x512_160k_ade20k/dmnet_r50-d8_512x512_160k_ade20k_20201215_115313-025ab3f9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x512_160k_ade20k/dmnet_r50-d8_512x512_160k_ade20k-20201215_115313.log.json) | -| DMNet | R-101-D8 | 512x512 | 160000 | - | - | V100 | 45.42 | 46.76 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dmnet/dmnet_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x512_160k_ade20k/dmnet_r101-d8_512x512_160k_ade20k_20201215_111145-a0bc02ef.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x512_160k_ade20k/dmnet_r101-d8_512x512_160k_ade20k-20201215_111145.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DMNet | R-50-D8 | 512x512 | 80000 | 9.4 | 20.95 | V100 | 42.37 | 43.62 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/dmnet/dmnet_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x512_80k_ade20k/dmnet_r50-d8_512x512_80k_ade20k_20201215_144744-f89092a6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x512_80k_ade20k/dmnet_r50-d8_512x512_80k_ade20k-20201215_144744.log.json) | +| DMNet | R-101-D8 | 512x512 | 80000 | 13.0 | 13.88 | V100 | 45.34 | 46.13 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/dmnet/dmnet_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x512_80k_ade20k/dmnet_r101-d8_512x512_80k_ade20k_20201215_104812-bfa45311.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x512_80k_ade20k/dmnet_r101-d8_512x512_80k_ade20k-20201215_104812.log.json) | +| DMNet | R-50-D8 | 512x512 | 160000 | - | - | V100 | 43.15 | 44.17 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/dmnet/dmnet_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x512_160k_ade20k/dmnet_r50-d8_512x512_160k_ade20k_20201215_115313-025ab3f9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r50-d8_512x512_160k_ade20k/dmnet_r50-d8_512x512_160k_ade20k-20201215_115313.log.json) | +| DMNet | R-101-D8 | 512x512 | 160000 | - | - | V100 | 45.42 | 46.76 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/dmnet/dmnet_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x512_160k_ade20k/dmnet_r101-d8_512x512_160k_ade20k_20201215_111145-a0bc02ef.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dmnet/dmnet_r101-d8_512x512_160k_ade20k/dmnet_r101-d8_512x512_160k_ade20k-20201215_111145.log.json) | ## Citation diff --git a/configs/dnlnet/README.md b/configs/dnlnet/README.md index 12338c730c..6835ffd1ed 100644 --- a/configs/dnlnet/README.md +++ b/configs/dnlnet/README.md @@ -26,25 +26,25 @@ The non-local block is a popular module for strengthening the context modeling a ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------: | -------------- | ------ | ----: | ------------- | ------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DNLNet | R-50-D8 | 512x1024 | 40000 | 7.3 | 2.56 | V100 | 78.61 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dnlnet/dnl_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x1024_40k_cityscapes/dnl_r50-d8_512x1024_40k_cityscapes_20200904_233629-53d4ea93.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x1024_40k_cityscapes/dnl_r50-d8_512x1024_40k_cityscapes-20200904_233629.log.json) | -| DNLNet | R-101-D8 | 512x1024 | 40000 | 10.9 | 1.96 | V100 | 78.31 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dnlnet/dnl_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x1024_40k_cityscapes/dnl_r101-d8_512x1024_40k_cityscapes_20200904_233629-9928ffef.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x1024_40k_cityscapes/dnl_r101-d8_512x1024_40k_cityscapes-20200904_233629.log.json) | -| DNLNet | R-50-D8 | 769x769 | 40000 | 9.2 | 1.50 | V100 | 78.44 | 80.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dnlnet/dnl_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_769x769_40k_cityscapes/dnl_r50-d8_769x769_40k_cityscapes_20200820_232206-0f283785.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_769x769_40k_cityscapes/dnl_r50-d8_769x769_40k_cityscapes-20200820_232206.log.json) | -| DNLNet | R-101-D8 | 769x769 | 40000 | 12.6 | 1.02 | V100 | 76.39 | 77.77 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dnlnet/dnl_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_769x769_40k_cityscapes/dnl_r101-d8_769x769_40k_cityscapes_20200820_171256-76c596df.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_769x769_40k_cityscapes/dnl_r101-d8_769x769_40k_cityscapes-20200820_171256.log.json) | -| DNLNet | R-50-D8 | 512x1024 | 80000 | - | - | V100 | 79.33 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dnlnet/dnl_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x1024_80k_cityscapes/dnl_r50-d8_512x1024_80k_cityscapes_20200904_233629-58b2f778.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x1024_80k_cityscapes/dnl_r50-d8_512x1024_80k_cityscapes-20200904_233629.log.json) | -| DNLNet | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 80.41 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dnlnet/dnl_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x1024_80k_cityscapes/dnl_r101-d8_512x1024_80k_cityscapes_20200904_233629-758e2dd4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x1024_80k_cityscapes/dnl_r101-d8_512x1024_80k_cityscapes-20200904_233629.log.json) | -| DNLNet | R-50-D8 | 769x769 | 80000 | - | - | V100 | 79.36 | 80.70 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dnlnet/dnl_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_769x769_80k_cityscapes/dnl_r50-d8_769x769_80k_cityscapes_20200820_011925-366bc4c7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_769x769_80k_cityscapes/dnl_r50-d8_769x769_80k_cityscapes-20200820_011925.log.json) | -| DNLNet | R-101-D8 | 769x769 | 80000 | - | - | V100 | 79.41 | 80.68 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dnlnet/dnl_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_769x769_80k_cityscapes/dnl_r101-d8_769x769_80k_cityscapes_20200821_051111-95ff84ab.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_769x769_80k_cityscapes/dnl_r101-d8_769x769_80k_cityscapes-20200821_051111.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------: | -------------- | ------ | ----: | ------------- | --------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DNLNet | R-50-D8 | 512x1024 | 40000 | 7.3 | 2.56 | V100 | 78.61 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/dnlnet/dnl_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x1024_40k_cityscapes/dnl_r50-d8_512x1024_40k_cityscapes_20200904_233629-53d4ea93.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x1024_40k_cityscapes/dnl_r50-d8_512x1024_40k_cityscapes-20200904_233629.log.json) | +| DNLNet | R-101-D8 | 512x1024 | 40000 | 10.9 | 1.96 | V100 | 78.31 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/dnlnet/dnl_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x1024_40k_cityscapes/dnl_r101-d8_512x1024_40k_cityscapes_20200904_233629-9928ffef.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x1024_40k_cityscapes/dnl_r101-d8_512x1024_40k_cityscapes-20200904_233629.log.json) | +| DNLNet | R-50-D8 | 769x769 | 40000 | 9.2 | 1.50 | V100 | 78.44 | 80.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/dnlnet/dnl_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_769x769_40k_cityscapes/dnl_r50-d8_769x769_40k_cityscapes_20200820_232206-0f283785.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_769x769_40k_cityscapes/dnl_r50-d8_769x769_40k_cityscapes-20200820_232206.log.json) | +| DNLNet | R-101-D8 | 769x769 | 40000 | 12.6 | 1.02 | V100 | 76.39 | 77.77 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/dnlnet/dnl_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_769x769_40k_cityscapes/dnl_r101-d8_769x769_40k_cityscapes_20200820_171256-76c596df.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_769x769_40k_cityscapes/dnl_r101-d8_769x769_40k_cityscapes-20200820_171256.log.json) | +| DNLNet | R-50-D8 | 512x1024 | 80000 | - | - | V100 | 79.33 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/dnlnet/dnl_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x1024_80k_cityscapes/dnl_r50-d8_512x1024_80k_cityscapes_20200904_233629-58b2f778.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x1024_80k_cityscapes/dnl_r50-d8_512x1024_80k_cityscapes-20200904_233629.log.json) | +| DNLNet | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 80.41 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/dnlnet/dnl_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x1024_80k_cityscapes/dnl_r101-d8_512x1024_80k_cityscapes_20200904_233629-758e2dd4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x1024_80k_cityscapes/dnl_r101-d8_512x1024_80k_cityscapes-20200904_233629.log.json) | +| DNLNet | R-50-D8 | 769x769 | 80000 | - | - | V100 | 79.36 | 80.70 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/dnlnet/dnl_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_769x769_80k_cityscapes/dnl_r50-d8_769x769_80k_cityscapes_20200820_011925-366bc4c7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_769x769_80k_cityscapes/dnl_r50-d8_769x769_80k_cityscapes-20200820_011925.log.json) | +| DNLNet | R-101-D8 | 769x769 | 80000 | - | - | V100 | 79.41 | 80.68 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/dnlnet/dnl_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_769x769_80k_cityscapes/dnl_r101-d8_769x769_80k_cityscapes_20200821_051111-95ff84ab.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_769x769_80k_cityscapes/dnl_r101-d8_769x769_80k_cityscapes-20200821_051111.log.json) | ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------: | -------------- | ------ | ----: | ------------- | -------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DNLNet | R-50-D8 | 512x512 | 80000 | 8.8 | 20.66 | V100 | 41.76 | 42.99 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dnlnet/dnl_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x512_80k_ade20k/dnl_r50-d8_512x512_80k_ade20k_20200826_183354-1cf6e0c1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x512_80k_ade20k/dnl_r50-d8_512x512_80k_ade20k-20200826_183354.log.json) | -| DNLNet | R-101-D8 | 512x512 | 80000 | 12.8 | 12.54 | V100 | 43.76 | 44.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dnlnet/dnl_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x512_80k_ade20k/dnl_r101-d8_512x512_80k_ade20k_20200826_183354-d820d6ea.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x512_80k_ade20k/dnl_r101-d8_512x512_80k_ade20k-20200826_183354.log.json) | -| DNLNet | R-50-D8 | 512x512 | 160000 | - | - | V100 | 41.87 | 43.01 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dnlnet/dnl_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x512_160k_ade20k/dnl_r50-d8_512x512_160k_ade20k_20200826_183350-37837798.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x512_160k_ade20k/dnl_r50-d8_512x512_160k_ade20k-20200826_183350.log.json) | -| DNLNet | R-101-D8 | 512x512 | 160000 | - | - | V100 | 44.25 | 45.78 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dnlnet/dnl_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x512_160k_ade20k/dnl_r101-d8_512x512_160k_ade20k_20200826_183350-ed522c61.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x512_160k_ade20k/dnl_r101-d8_512x512_160k_ade20k-20200826_183350.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------: | -------------- | ------ | ----: | ------------- | ----------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DNLNet | R-50-D8 | 512x512 | 80000 | 8.8 | 20.66 | V100 | 41.76 | 42.99 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/dnlnet/dnl_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x512_80k_ade20k/dnl_r50-d8_512x512_80k_ade20k_20200826_183354-1cf6e0c1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x512_80k_ade20k/dnl_r50-d8_512x512_80k_ade20k-20200826_183354.log.json) | +| DNLNet | R-101-D8 | 512x512 | 80000 | 12.8 | 12.54 | V100 | 43.76 | 44.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/dnlnet/dnl_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x512_80k_ade20k/dnl_r101-d8_512x512_80k_ade20k_20200826_183354-d820d6ea.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x512_80k_ade20k/dnl_r101-d8_512x512_80k_ade20k-20200826_183354.log.json) | +| DNLNet | R-50-D8 | 512x512 | 160000 | - | - | V100 | 41.87 | 43.01 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/dnlnet/dnl_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x512_160k_ade20k/dnl_r50-d8_512x512_160k_ade20k_20200826_183350-37837798.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r50-d8_512x512_160k_ade20k/dnl_r50-d8_512x512_160k_ade20k-20200826_183350.log.json) | +| DNLNet | R-101-D8 | 512x512 | 160000 | - | - | V100 | 44.25 | 45.78 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/dnlnet/dnl_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x512_160k_ade20k/dnl_r101-d8_512x512_160k_ade20k_20200826_183350-ed522c61.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dnlnet/dnl_r101-d8_512x512_160k_ade20k/dnl_r101-d8_512x512_160k_ade20k-20200826_183350.log.json) | ## Notes diff --git a/configs/dpt/README.md b/configs/dpt/README.md index 432d1dd226..b3a5573a65 100644 --- a/configs/dpt/README.md +++ b/configs/dpt/README.md @@ -44,9 +44,9 @@ This script convert model from `PRETRAIN_PATH` and store the converted model in ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| DPT | ViT-B | 512x512 | 160000 | 8.09 | 10.41 | V100 | 46.97 | 48.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/dpt/dpt_vit-b16_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dpt/dpt_vit-b16_512x512_160k_ade20k/dpt_vit-b16_512x512_160k_ade20k-db31cf52.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dpt/dpt_vit-b16_512x512_160k_ade20k/dpt_vit-b16_512x512_160k_ade20k-20210809_172025.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| DPT | ViT-B | 512x512 | 160000 | 8.09 | 10.41 | V100 | 46.97 | 48.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/dpt/dpt_vit-b16_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/dpt/dpt_vit-b16_512x512_160k_ade20k/dpt_vit-b16_512x512_160k_ade20k-db31cf52.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/dpt/dpt_vit-b16_512x512_160k_ade20k/dpt_vit-b16_512x512_160k_ade20k-20210809_172025.log.json) | ## Citation diff --git a/configs/encnet/README.md b/configs/encnet/README.md index 31bbd98c6b..ff09bc32f8 100644 --- a/configs/encnet/README.md +++ b/configs/encnet/README.md @@ -26,25 +26,25 @@ Recent work has made significant progress in improving spatial resolution for pi ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| EncNet | R-50-D8 | 512x1024 | 40000 | 8.6 | 4.58 | V100 | 75.67 | 77.08 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet/encnet_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x1024_40k_cityscapes/encnet_r50-d8_512x1024_40k_cityscapes_20200621_220958-68638a47.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x1024_40k_cityscapes/encnet_r50-d8_512x1024_40k_cityscapes-20200621_220958.log.json) | -| EncNet | R-101-D8 | 512x1024 | 40000 | 12.1 | 2.66 | V100 | 75.81 | 77.21 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet/encnet_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x1024_40k_cityscapes/encnet_r101-d8_512x1024_40k_cityscapes_20200621_220933-35e0a3e8.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x1024_40k_cityscapes/encnet_r101-d8_512x1024_40k_cityscapes-20200621_220933.log.json) | -| EncNet | R-50-D8 | 769x769 | 40000 | 9.8 | 1.82 | V100 | 76.24 | 77.85 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet/encnet_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_769x769_40k_cityscapes/encnet_r50-d8_769x769_40k_cityscapes_20200621_220958-3bcd2884.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_769x769_40k_cityscapes/encnet_r50-d8_769x769_40k_cityscapes-20200621_220958.log.json) | -| EncNet | R-101-D8 | 769x769 | 40000 | 13.7 | 1.26 | V100 | 74.25 | 76.25 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet/encnet_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_769x769_40k_cityscapes/encnet_r101-d8_769x769_40k_cityscapes_20200621_220933-2fafed55.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_769x769_40k_cityscapes/encnet_r101-d8_769x769_40k_cityscapes-20200621_220933.log.json) | -| EncNet | R-50-D8 | 512x1024 | 80000 | - | - | V100 | 77.94 | 79.13 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet/encnet_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x1024_80k_cityscapes/encnet_r50-d8_512x1024_80k_cityscapes_20200622_003554-fc5c5624.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x1024_80k_cityscapes/encnet_r50-d8_512x1024_80k_cityscapes-20200622_003554.log.json) | -| EncNet | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 78.55 | 79.47 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet/encnet_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x1024_80k_cityscapes/encnet_r101-d8_512x1024_80k_cityscapes_20200622_003555-1de64bec.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x1024_80k_cityscapes/encnet_r101-d8_512x1024_80k_cityscapes-20200622_003555.log.json) | -| EncNet | R-50-D8 | 769x769 | 80000 | - | - | V100 | 77.44 | 78.72 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet/encnet_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_769x769_80k_cityscapes/encnet_r50-d8_769x769_80k_cityscapes_20200622_003554-55096dcb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_769x769_80k_cityscapes/encnet_r50-d8_769x769_80k_cityscapes-20200622_003554.log.json) | -| EncNet | R-101-D8 | 769x769 | 80000 | - | - | V100 | 76.10 | 76.97 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet/encnet_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_769x769_80k_cityscapes/encnet_r101-d8_769x769_80k_cityscapes_20200622_003555-470ef79d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_769x769_80k_cityscapes/encnet_r101-d8_769x769_80k_cityscapes-20200622_003555.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| EncNet | R-50-D8 | 512x1024 | 40000 | 8.6 | 4.58 | V100 | 75.67 | 77.08 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/encnet/encnet_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x1024_40k_cityscapes/encnet_r50-d8_512x1024_40k_cityscapes_20200621_220958-68638a47.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x1024_40k_cityscapes/encnet_r50-d8_512x1024_40k_cityscapes-20200621_220958.log.json) | +| EncNet | R-101-D8 | 512x1024 | 40000 | 12.1 | 2.66 | V100 | 75.81 | 77.21 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/encnet/encnet_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x1024_40k_cityscapes/encnet_r101-d8_512x1024_40k_cityscapes_20200621_220933-35e0a3e8.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x1024_40k_cityscapes/encnet_r101-d8_512x1024_40k_cityscapes-20200621_220933.log.json) | +| EncNet | R-50-D8 | 769x769 | 40000 | 9.8 | 1.82 | V100 | 76.24 | 77.85 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/encnet/encnet_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_769x769_40k_cityscapes/encnet_r50-d8_769x769_40k_cityscapes_20200621_220958-3bcd2884.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_769x769_40k_cityscapes/encnet_r50-d8_769x769_40k_cityscapes-20200621_220958.log.json) | +| EncNet | R-101-D8 | 769x769 | 40000 | 13.7 | 1.26 | V100 | 74.25 | 76.25 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/encnet/encnet_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_769x769_40k_cityscapes/encnet_r101-d8_769x769_40k_cityscapes_20200621_220933-2fafed55.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_769x769_40k_cityscapes/encnet_r101-d8_769x769_40k_cityscapes-20200621_220933.log.json) | +| EncNet | R-50-D8 | 512x1024 | 80000 | - | - | V100 | 77.94 | 79.13 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/encnet/encnet_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x1024_80k_cityscapes/encnet_r50-d8_512x1024_80k_cityscapes_20200622_003554-fc5c5624.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x1024_80k_cityscapes/encnet_r50-d8_512x1024_80k_cityscapes-20200622_003554.log.json) | +| EncNet | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 78.55 | 79.47 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/encnet/encnet_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x1024_80k_cityscapes/encnet_r101-d8_512x1024_80k_cityscapes_20200622_003555-1de64bec.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x1024_80k_cityscapes/encnet_r101-d8_512x1024_80k_cityscapes-20200622_003555.log.json) | +| EncNet | R-50-D8 | 769x769 | 80000 | - | - | V100 | 77.44 | 78.72 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/encnet/encnet_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_769x769_80k_cityscapes/encnet_r50-d8_769x769_80k_cityscapes_20200622_003554-55096dcb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_769x769_80k_cityscapes/encnet_r50-d8_769x769_80k_cityscapes-20200622_003554.log.json) | +| EncNet | R-101-D8 | 769x769 | 80000 | - | - | V100 | 76.10 | 76.97 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/encnet/encnet_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_769x769_80k_cityscapes/encnet_r101-d8_769x769_80k_cityscapes_20200622_003555-470ef79d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_769x769_80k_cityscapes/encnet_r101-d8_769x769_80k_cityscapes-20200622_003555.log.json) | ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| EncNet | R-50-D8 | 512x512 | 80000 | 10.1 | 22.81 | V100 | 39.53 | 41.17 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet/encnet_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x512_80k_ade20k/encnet_r50-d8_512x512_80k_ade20k_20200622_042412-44b46b04.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x512_80k_ade20k/encnet_r50-d8_512x512_80k_ade20k-20200622_042412.log.json) | -| EncNet | R-101-D8 | 512x512 | 80000 | 13.6 | 14.87 | V100 | 42.11 | 43.61 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet/encnet_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x512_80k_ade20k/encnet_r101-d8_512x512_80k_ade20k_20200622_101128-dd35e237.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x512_80k_ade20k/encnet_r101-d8_512x512_80k_ade20k-20200622_101128.log.json) | -| EncNet | R-50-D8 | 512x512 | 160000 | - | - | V100 | 40.10 | 41.71 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet/encnet_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x512_160k_ade20k/encnet_r50-d8_512x512_160k_ade20k_20200622_101059-b2db95e0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x512_160k_ade20k/encnet_r50-d8_512x512_160k_ade20k-20200622_101059.log.json) | -| EncNet | R-101-D8 | 512x512 | 160000 | - | - | V100 | 42.61 | 44.01 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet/encnet_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x512_160k_ade20k/encnet_r101-d8_512x512_160k_ade20k_20200622_073348-7989641f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x512_160k_ade20k/encnet_r101-d8_512x512_160k_ade20k-20200622_073348.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| EncNet | R-50-D8 | 512x512 | 80000 | 10.1 | 22.81 | V100 | 39.53 | 41.17 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/encnet/encnet_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x512_80k_ade20k/encnet_r50-d8_512x512_80k_ade20k_20200622_042412-44b46b04.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x512_80k_ade20k/encnet_r50-d8_512x512_80k_ade20k-20200622_042412.log.json) | +| EncNet | R-101-D8 | 512x512 | 80000 | 13.6 | 14.87 | V100 | 42.11 | 43.61 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/encnet/encnet_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x512_80k_ade20k/encnet_r101-d8_512x512_80k_ade20k_20200622_101128-dd35e237.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x512_80k_ade20k/encnet_r101-d8_512x512_80k_ade20k-20200622_101128.log.json) | +| EncNet | R-50-D8 | 512x512 | 160000 | - | - | V100 | 40.10 | 41.71 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/encnet/encnet_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x512_160k_ade20k/encnet_r50-d8_512x512_160k_ade20k_20200622_101059-b2db95e0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x512_160k_ade20k/encnet_r50-d8_512x512_160k_ade20k-20200622_101059.log.json) | +| EncNet | R-101-D8 | 512x512 | 160000 | - | - | V100 | 42.61 | 44.01 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/encnet/encnet_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x512_160k_ade20k/encnet_r101-d8_512x512_160k_ade20k_20200622_073348-7989641f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x512_160k_ade20k/encnet_r101-d8_512x512_160k_ade20k-20200622_073348.log.json) | ## Citation diff --git a/configs/erfnet/README.md b/configs/erfnet/README.md index e29afc485d..55d71973a3 100644 --- a/configs/erfnet/README.md +++ b/configs/erfnet/README.md @@ -26,9 +26,9 @@ Semantic segmentation is a challenging task that addresses most of the perceptio ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ---: | ------------- | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| ERFNet | ERFNet | 512x1024 | 160000 | 6.04 | 15.26 | V100 | 72.5 | 74.75 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/erfnet/erfnet_fcn_4xb4-160k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/erfnet/erfnet_fcn_4x4_512x1024_160k_cityscapes/erfnet_fcn_4x4_512x1024_160k_cityscapes_20220704_162145-dc90157a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/erfnet/erfnet_fcn_4x4_512x1024_160k_cityscapes/erfnet_fcn_4x4_512x1024_160k_cityscapes_20220704_162145.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ---: | ------------- | --------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| ERFNet | ERFNet | 512x1024 | 160000 | 6.04 | 15.26 | V100 | 72.5 | 74.75 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/erfnet/erfnet_fcn_4xb4-160k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/erfnet/erfnet_fcn_4x4_512x1024_160k_cityscapes/erfnet_fcn_4x4_512x1024_160k_cityscapes_20220704_162145-dc90157a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/erfnet/erfnet_fcn_4x4_512x1024_160k_cityscapes/erfnet_fcn_4x4_512x1024_160k_cityscapes_20220704_162145.log.json) | Note: diff --git a/configs/fastfcn/README.md b/configs/fastfcn/README.md index 0b26a33edd..48644e57e3 100644 --- a/configs/fastfcn/README.md +++ b/configs/fastfcn/README.md @@ -26,30 +26,30 @@ Modern approaches for semantic segmentation usually employ dilated convolutions ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------------------- | -------------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| FastFCN + DeepLabV3 | R-50-D32 | 512x1024 | 80000 | 5.67 | 2.64 | V100 | 79.12 | 80.58 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastfcn/fastfcn_r50-d32_jpu_aspp_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_aspp_512x1024_80k_cityscapes_20210928_053722-5d1a2648.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_aspp_512x1024_80k_cityscapes_20210928_053722.log.json) | -| FastFCN + DeepLabV3 | R-50-D32 (4x4) | 512x1024 | 80000 | 9.79 | - | V100 | 79.52 | 80.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastfcn/fastfcn_r50-d32_jpu_aspp_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_4x4_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_aspp_4x4_512x1024_80k_cityscapes_20210924_214357-72220849.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_4x4_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_aspp_4x4_512x1024_80k_cityscapes_20210924_214357.log.json) | -| FastFCN + PSPNet | R-50-D32 | 512x1024 | 80000 | 5.67 | 4.40 | V100 | 79.26 | 80.86 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastfcn/fastfcn_r50-d32_jpu_psp_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_psp_512x1024_80k_cityscapes_20210928_053722-57749bed.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_psp_512x1024_80k_cityscapes_20210928_053722.log.json) | -| FastFCN + PSPNet | R-50-D32 (4x4) | 512x1024 | 80000 | 9.94 | - | V100 | 78.76 | 80.03 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastfcn/fastfcn_r50-d32_jpu_psp_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_4x4_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_psp_4x4_512x1024_80k_cityscapes_20210925_061841-77e87b0a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_4x4_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_psp_4x4_512x1024_80k_cityscapes_20210925_061841.log.json) | -| FastFCN + EncNet | R-50-D32 | 512x1024 | 80000 | 8.15 | 4.77 | V100 | 77.97 | 79.92 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastfcn/fastfcn_r50-d32_jpu_enc_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_enc_512x1024_80k_cityscapes_20210928_030036-78da5046.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_enc_512x1024_80k_cityscapes_20210928_030036.log.json) | -| FastFCN + EncNet | R-50-D32 (4x4) | 512x1024 | 80000 | 15.45 | - | V100 | 78.6 | 80.25 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastfcn/fastfcn_r50-d32_jpu_enc_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_4x4_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_enc_4x4_512x1024_80k_cityscapes_20210926_093217-e1eb6dbb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_4x4_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_enc_4x4_512x1024_80k_cityscapes_20210926_093217.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------------------- | -------------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| FastFCN + DeepLabV3 | R-50-D32 | 512x1024 | 80000 | 5.67 | 2.64 | V100 | 79.12 | 80.58 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fastfcn/fastfcn_r50-d32_jpu_aspp_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_aspp_512x1024_80k_cityscapes_20210928_053722-5d1a2648.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_aspp_512x1024_80k_cityscapes_20210928_053722.log.json) | +| FastFCN + DeepLabV3 | R-50-D32 (4x4) | 512x1024 | 80000 | 9.79 | - | V100 | 79.52 | 80.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fastfcn/fastfcn_r50-d32_jpu_aspp_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_4x4_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_aspp_4x4_512x1024_80k_cityscapes_20210924_214357-72220849.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_4x4_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_aspp_4x4_512x1024_80k_cityscapes_20210924_214357.log.json) | +| FastFCN + PSPNet | R-50-D32 | 512x1024 | 80000 | 5.67 | 4.40 | V100 | 79.26 | 80.86 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fastfcn/fastfcn_r50-d32_jpu_psp_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_psp_512x1024_80k_cityscapes_20210928_053722-57749bed.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_psp_512x1024_80k_cityscapes_20210928_053722.log.json) | +| FastFCN + PSPNet | R-50-D32 (4x4) | 512x1024 | 80000 | 9.94 | - | V100 | 78.76 | 80.03 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fastfcn/fastfcn_r50-d32_jpu_psp_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_4x4_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_psp_4x4_512x1024_80k_cityscapes_20210925_061841-77e87b0a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_4x4_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_psp_4x4_512x1024_80k_cityscapes_20210925_061841.log.json) | +| FastFCN + EncNet | R-50-D32 | 512x1024 | 80000 | 8.15 | 4.77 | V100 | 77.97 | 79.92 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fastfcn/fastfcn_r50-d32_jpu_enc_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_enc_512x1024_80k_cityscapes_20210928_030036-78da5046.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_enc_512x1024_80k_cityscapes_20210928_030036.log.json) | +| FastFCN + EncNet | R-50-D32 (4x4) | 512x1024 | 80000 | 15.45 | - | V100 | 78.6 | 80.25 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fastfcn/fastfcn_r50-d32_jpu_enc_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_4x4_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_enc_4x4_512x1024_80k_cityscapes_20210926_093217-e1eb6dbb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_4x4_512x1024_80k_cityscapes/fastfcn_r50-d32_jpu_enc_4x4_512x1024_80k_cityscapes_20210926_093217.log.json) | ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------------------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| FastFCN + DeepLabV3 | R-50-D32 | 512x1024 | 80000 | 8.46 | 12.06 | V100 | 41.88 | 42.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastfcn/fastfcn_r50-d32_jpu_aspp_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_512x512_80k_ade20k/fastfcn_r50-d32_jpu_aspp_512x512_80k_ade20k_20211013_190619-3aa40f2d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_512x512_80k_ade20k/fastfcn_r50-d32_jpu_aspp_512x512_80k_ade20k_20211013_190619.log.json) | -| FastFCN + DeepLabV3 | R-50-D32 | 512x1024 | 160000 | - | - | V100 | 43.58 | 44.92 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastfcn/fastfcn_r50-d32_jpu_aspp_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_512x512_160k_ade20k/fastfcn_r50-d32_jpu_aspp_512x512_160k_ade20k_20211008_152246-27036aee.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_512x512_160k_ade20k/fastfcn_r50-d32_jpu_aspp_512x512_160k_ade20k_20211008_152246.log.json) | -| FastFCN + PSPNet | R-50-D32 | 512x1024 | 80000 | 8.02 | 19.21 | V100 | 41.40 | 42.12 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastfcn/fastfcn_r50-d32_jpu_psp_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_512x512_80k_ade20k/fastfcn_r50-d32_jpu_psp_512x512_80k_ade20k_20210930_225137-993d07c8.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_512x512_80k_ade20k/fastfcn_r50-d32_jpu_psp_512x512_80k_ade20k_20210930_225137.log.json) | -| FastFCN + PSPNet | R-50-D32 | 512x1024 | 160000 | - | - | V100 | 42.63 | 43.71 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastfcn/fastfcn_r50-d32_jpu_psp_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_512x512_160k_ade20k/fastfcn_r50-d32_jpu_psp_512x512_160k_ade20k_20211008_105455-e8f5a2fd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_512x512_160k_ade20k/fastfcn_r50-d32_jpu_psp_512x512_160k_ade20k_20211008_105455.log.json) | -| FastFCN + EncNet | R-50-D32 | 512x1024 | 80000 | 9.67 | 17.23 | V100 | 40.88 | 42.36 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastfcn/fastfcn_r50-d32_jpu_enc_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_512x512_80k_ade20k/fastfcn_r50-d32_jpu_enc_512x512_80k_ade20k_20210930_225214-65aef6dd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_512x512_80k_ade20k/fastfcn_r50-d32_jpu_enc_512x512_80k_ade20k_20210930_225214.log.json) | -| FastFCN + EncNet | R-50-D32 | 512x1024 | 160000 | - | - | V100 | 42.50 | 44.21 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastfcn/fastfcn_r50-d32_jpu_enc_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_512x512_160k_ade20k/fastfcn_r50-d32_jpu_enc_512x512_160k_ade20k_20211008_105456-d875ce3c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_512x512_160k_ade20k/fastfcn_r50-d32_jpu_enc_512x512_160k_ade20k_20211008_105456.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------------------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------- | ------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| FastFCN + DeepLabV3 | R-50-D32 | 512x1024 | 80000 | 8.46 | 12.06 | V100 | 41.88 | 42.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fastfcn/fastfcn_r50-d32_jpu_aspp_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_512x512_80k_ade20k/fastfcn_r50-d32_jpu_aspp_512x512_80k_ade20k_20211013_190619-3aa40f2d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_512x512_80k_ade20k/fastfcn_r50-d32_jpu_aspp_512x512_80k_ade20k_20211013_190619.log.json) | +| FastFCN + DeepLabV3 | R-50-D32 | 512x1024 | 160000 | - | - | V100 | 43.58 | 44.92 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fastfcn/fastfcn_r50-d32_jpu_aspp_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_512x512_160k_ade20k/fastfcn_r50-d32_jpu_aspp_512x512_160k_ade20k_20211008_152246-27036aee.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_aspp_512x512_160k_ade20k/fastfcn_r50-d32_jpu_aspp_512x512_160k_ade20k_20211008_152246.log.json) | +| FastFCN + PSPNet | R-50-D32 | 512x1024 | 80000 | 8.02 | 19.21 | V100 | 41.40 | 42.12 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fastfcn/fastfcn_r50-d32_jpu_psp_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_512x512_80k_ade20k/fastfcn_r50-d32_jpu_psp_512x512_80k_ade20k_20210930_225137-993d07c8.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_512x512_80k_ade20k/fastfcn_r50-d32_jpu_psp_512x512_80k_ade20k_20210930_225137.log.json) | +| FastFCN + PSPNet | R-50-D32 | 512x1024 | 160000 | - | - | V100 | 42.63 | 43.71 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fastfcn/fastfcn_r50-d32_jpu_psp_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_512x512_160k_ade20k/fastfcn_r50-d32_jpu_psp_512x512_160k_ade20k_20211008_105455-e8f5a2fd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_psp_512x512_160k_ade20k/fastfcn_r50-d32_jpu_psp_512x512_160k_ade20k_20211008_105455.log.json) | +| FastFCN + EncNet | R-50-D32 | 512x1024 | 80000 | 9.67 | 17.23 | V100 | 40.88 | 42.36 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fastfcn/fastfcn_r50-d32_jpu_enc_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_512x512_80k_ade20k/fastfcn_r50-d32_jpu_enc_512x512_80k_ade20k_20210930_225214-65aef6dd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_512x512_80k_ade20k/fastfcn_r50-d32_jpu_enc_512x512_80k_ade20k_20210930_225214.log.json) | +| FastFCN + EncNet | R-50-D32 | 512x1024 | 160000 | - | - | V100 | 42.50 | 44.21 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fastfcn/fastfcn_r50-d32_jpu_enc_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_512x512_160k_ade20k/fastfcn_r50-d32_jpu_enc_512x512_160k_ade20k_20211008_105456-d875ce3c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fastfcn/fastfcn_r50-d32_jpu_enc_512x512_160k_ade20k/fastfcn_r50-d32_jpu_enc_512x512_160k_ade20k_20211008_105456.log.json) | Note: - `4x4` means 4 GPUs with 4 samples per GPU in training, default setting is 4 GPUs with 2 samples per GPU in training. -- Results of [DeepLabV3 (mIoU: 79.32)](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/deeplabv3), [PSPNet (mIoU: 78.55)](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet) and [ENCNet (mIoU: 77.94)](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/encnet) can be found in each original repository. +- Results of [DeepLabV3 (mIoU: 79.32)](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3), [PSPNet (mIoU: 78.55)](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet) and [ENCNet (mIoU: 77.94)](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/encnet) can be found in each original repository. ## Citation diff --git a/configs/fastscnn/README.md b/configs/fastscnn/README.md index ea3449fd2c..6be981462a 100644 --- a/configs/fastscnn/README.md +++ b/configs/fastscnn/README.md @@ -26,9 +26,9 @@ The encoder-decoder framework is state-of-the-art for offline semantic image seg ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| -------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| FastSCNN | FastSCNN | 512x1024 | 160000 | 3.3 | 56.45 | V100 | 70.96 | 72.65 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fastscnn/fast_scnn_8xb4-160k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fast_scnn/fast_scnn_lr0.12_8x4_160k_cityscapes/fast_scnn_lr0.12_8x4_160k_cityscapes_20210630_164853-0cec9937.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fast_scnn/fast_scnn_lr0.12_8x4_160k_cityscapes/fast_scnn_lr0.12_8x4_160k_cityscapes_20210630_164853.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| -------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------- | ---------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| FastSCNN | FastSCNN | 512x1024 | 160000 | 3.3 | 56.45 | V100 | 70.96 | 72.65 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fastscnn/fast_scnn_8xb4-160k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fast_scnn/fast_scnn_lr0.12_8x4_160k_cityscapes/fast_scnn_lr0.12_8x4_160k_cityscapes_20210630_164853-0cec9937.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fast_scnn/fast_scnn_lr0.12_8x4_160k_cityscapes/fast_scnn_lr0.12_8x4_160k_cityscapes_20210630_164853.log.json) | ## Citation diff --git a/configs/fcn/README.md b/configs/fcn/README.md index 6134933710..cf7379ff3d 100644 --- a/configs/fcn/README.md +++ b/configs/fcn/README.md @@ -26,69 +26,69 @@ Convolutional networks are powerful visual models that yield hierarchies of feat ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ---------- | ---------- | --------- | ------: | -------- | -------------- | -------- | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| FCN | R-50-D8 | 512x1024 | 40000 | 5.7 | 4.17 | V100 | 72.25 | 73.36 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x1024_40k_cityscapes/fcn_r50-d8_512x1024_40k_cityscapes_20200604_192608-efe53f0d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x1024_40k_cityscapes/fcn_r50-d8_512x1024_40k_cityscapes_20200604_192608.log.json) | -| FCN | R-101-D8 | 512x1024 | 40000 | 9.2 | 2.66 | V100 | 75.45 | 76.58 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x1024_40k_cityscapes/fcn_r101-d8_512x1024_40k_cityscapes_20200604_181852-a883d3a1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x1024_40k_cityscapes/fcn_r101-d8_512x1024_40k_cityscapes_20200604_181852.log.json) | -| FCN | R-50-D8 | 769x769 | 40000 | 6.5 | 1.80 | V100 | 71.47 | 72.54 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_769x769_40k_cityscapes/fcn_r50-d8_769x769_40k_cityscapes_20200606_113104-977b5d02.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_769x769_40k_cityscapes/fcn_r50-d8_769x769_40k_cityscapes_20200606_113104.log.json) | -| FCN | R-101-D8 | 769x769 | 40000 | 10.4 | 1.19 | V100 | 73.93 | 75.14 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_769x769_40k_cityscapes/fcn_r101-d8_769x769_40k_cityscapes_20200606_113208-7d4ab69c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_769x769_40k_cityscapes/fcn_r101-d8_769x769_40k_cityscapes_20200606_113208.log.json) | -| FCN | R-18-D8 | 512x1024 | 80000 | 1.7 | 14.65 | V100 | 71.11 | 72.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r18-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18-d8_512x1024_80k_cityscapes/fcn_r18-d8_512x1024_80k_cityscapes_20201225_021327-6c50f8b4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18-d8_512x1024_80k_cityscapes/fcn_r18-d8_512x1024_80k_cityscapes-20201225_021327.log.json) | -| FCN | R-50-D8 | 512x1024 | 80000 | - | | V100 | 73.61 | 74.24 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x1024_80k_cityscapes/fcn_r50-d8_512x1024_80k_cityscapes_20200606_113019-03aa804d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x1024_80k_cityscapes/fcn_r50-d8_512x1024_80k_cityscapes_20200606_113019.log.json) | -| FCN | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 75.13 | 75.94 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x1024_80k_cityscapes/fcn_r101-d8_512x1024_80k_cityscapes_20200606_113038-3fb937eb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x1024_80k_cityscapes/fcn_r101-d8_512x1024_80k_cityscapes_20200606_113038.log.json) | -| FCN (FP16) | R-101-D8 | 512x1024 | 80000 | 5.37 | 8.64 | V100 | 76.80 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb2-amp-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_fp16_512x1024_80k_cityscapes/fcn_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230921-fb13e883.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_fp16_512x1024_80k_cityscapes/fcn_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230921.log.json) | -| FCN | R-18-D8 | 769x769 | 80000 | 1.9 | 6.40 | V100 | 70.80 | 73.16 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r18-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18-d8_769x769_80k_cityscapes/fcn_r18-d8_769x769_80k_cityscapes_20201225_021451-9739d1b8.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18-d8_769x769_80k_cityscapes/fcn_r18-d8_769x769_80k_cityscapes-20201225_021451.log.json) | -| FCN | R-50-D8 | 769x769 | 80000 | - | - | V100 | 72.64 | 73.32 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_769x769_80k_cityscapes/fcn_r50-d8_769x769_80k_cityscapes_20200606_195749-f5caeabc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_769x769_80k_cityscapes/fcn_r50-d8_769x769_80k_cityscapes_20200606_195749.log.json) | -| FCN | R-101-D8 | 769x769 | 80000 | - | - | V100 | 75.52 | 76.61 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_769x769_80k_cityscapes/fcn_r101-d8_769x769_80k_cityscapes_20200606_214354-45cbac68.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_769x769_80k_cityscapes/fcn_r101-d8_769x769_80k_cityscapes_20200606_214354.log.json) | -| FCN | R-18b-D8 | 512x1024 | 80000 | 1.6 | 16.74 | V100 | 70.24 | 72.77 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r18b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18b-d8_512x1024_80k_cityscapes/fcn_r18b-d8_512x1024_80k_cityscapes_20201225_230143-92c0f445.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18b-d8_512x1024_80k_cityscapes/fcn_r18b-d8_512x1024_80k_cityscapes-20201225_230143.log.json) | -| FCN | R-50b-D8 | 512x1024 | 80000 | 5.6 | 4.20 | V100 | 75.65 | 77.59 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r50b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50b-d8_512x1024_80k_cityscapes/fcn_r50b-d8_512x1024_80k_cityscapes_20201225_094221-82957416.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50b-d8_512x1024_80k_cityscapes/fcn_r50b-d8_512x1024_80k_cityscapes-20201225_094221.log.json) | -| FCN | R-101b-D8 | 512x1024 | 80000 | 9.1 | 2.73 | V100 | 77.37 | 78.77 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101b-d8_512x1024_80k_cityscapes/fcn_r101b-d8_512x1024_80k_cityscapes_20201226_160213-4543858f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101b-d8_512x1024_80k_cityscapes/fcn_r101b-d8_512x1024_80k_cityscapes-20201226_160213.log.json) | -| FCN | R-18b-D8 | 769x769 | 80000 | 1.7 | 6.70 | V100 | 69.66 | 72.07 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r18b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18b-d8_769x769_80k_cityscapes/fcn_r18b-d8_769x769_80k_cityscapes_20201226_004430-32d504e5.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18b-d8_769x769_80k_cityscapes/fcn_r18b-d8_769x769_80k_cityscapes-20201226_004430.log.json) | -| FCN | R-50b-D8 | 769x769 | 80000 | 6.3 | 1.82 | V100 | 73.83 | 76.60 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r50b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50b-d8_769x769_80k_cityscapes/fcn_r50b-d8_769x769_80k_cityscapes_20201225_094223-94552d38.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50b-d8_769x769_80k_cityscapes/fcn_r50b-d8_769x769_80k_cityscapes-20201225_094223.log.json) | -| FCN | R-101b-D8 | 769x769 | 80000 | 10.3 | 1.15 | V100 | 77.02 | 78.67 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101b-d8_769x769_80k_cityscapes/fcn_r101b-d8_769x769_80k_cityscapes_20201226_170012-82be37e2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101b-d8_769x769_80k_cityscapes/fcn_r101b-d8_769x769_80k_cityscapes-20201226_170012.log.json) | -| FCN (D6) | R-50-D16 | 512x1024 | 40000 | 3.4 | 10.22 | TITAN Xp | 77.06 | 78.85 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn-d6_r50-d16_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_512x1024_40k_cityscapes/fcn_d6_r50-d16_512x1024_40k_cityscapes_20210305_130133-98d5d1bc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_512x1024_40k_cityscapes/fcn_d6_r50-d16_512x1024_40k_cityscapes-20210305_130133.log.json) | -| FCN (D6) | R-50-D16 | 512x1024 | 80000 | - | 10.35 | TITAN Xp | 77.27 | 78.88 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn-d6_r50-d16_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_512x1024_80k_cityscapes/fcn_d6_r50-d16_512x1024_80k_cityscapes_20210306_115604-133c292f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_512x1024_80k_cityscapes/fcn_d6_r50-d16_512x1024_80k_cityscapes-20210306_115604.log.json) | -| FCN (D6) | R-50-D16 | 769x769 | 40000 | 3.7 | 4.17 | TITAN Xp | 76.82 | 78.22 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn-d6_r50-d16_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_769x769_40k_cityscapes/fcn_d6_r50-d16_769x769_40k_cityscapes_20210305_185744-1aab18ed.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_769x769_40k_cityscapes/fcn_d6_r50-d16_769x769_40k_cityscapes-20210305_185744.log.json) | -| FCN (D6) | R-50-D16 | 769x769 | 80000 | - | 4.15 | TITAN Xp | 77.04 | 78.40 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn-d6_r50-d16_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_769x769_80k_cityscapes/fcn_d6_r50-d16_769x769_80k_cityscapes_20210305_200413-109d88eb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_769x769_80k_cityscapes/fcn_d6_r50-d16_769x769_80k_cityscapes-20210305_200413.log.json) | -| FCN (D6) | R-101-D16 | 512x1024 | 40000 | 4.5 | 8.04 | TITAN Xp | 77.36 | 79.18 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn-d6_r101-d16_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_512x1024_40k_cityscapes/fcn_d6_r101-d16_512x1024_40k_cityscapes_20210305_130337-9cf2b450.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_512x1024_40k_cityscapes/fcn_d6_r101-d16_512x1024_40k_cityscapes-20210305_130337.log.json) | -| FCN (D6) | R-101-D16 | 512x1024 | 80000 | - | 8.26 | TITAN Xp | 78.46 | 80.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn-d6_r101-d16_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_512x1024_80k_cityscapes/fcn_d6_r101-d16_512x1024_80k_cityscapes_20210308_102747-cb336445.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_512x1024_80k_cityscapes/fcn_d6_r101-d16_512x1024_80k_cityscapes-20210308_102747.log.json) | -| FCN (D6) | R-101-D16 | 769x769 | 40000 | 5.0 | 3.12 | TITAN Xp | 77.28 | 78.95 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn-d6_r101-d16_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_769x769_40k_cityscapes/fcn_d6_r101-d16_769x769_40k_cityscapes_20210308_102453-60b114e9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_769x769_40k_cityscapes/fcn_d6_r101-d16_769x769_40k_cityscapes-20210308_102453.log.json) | -| FCN (D6) | R-101-D16 | 769x769 | 80000 | - | 3.21 | TITAN Xp | 78.06 | 79.58 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn-d6_r101-d16_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_769x769_80k_cityscapes/fcn_d6_r101-d16_769x769_80k_cityscapes_20210306_120016-e33adc4f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_769x769_80k_cityscapes/fcn_d6_r101-d16_769x769_80k_cityscapes-20210306_120016.log.json) | -| FCN (D6) | R-50b-D16 | 512x1024 | 80000 | 3.2 | 10.16 | TITAN Xp | 76.99 | 79.03 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn-d6_r50b-d16_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50b-d16_512x1024_80k_cityscapes/fcn_d6_r50b-d16_512x1024_80k_cityscapes_20210311_125550-6a0b62e9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50b_d16_512x1024_80k_cityscapes/fcn_d6_r50b_d16_512x1024_80k_cityscapes-20210311_125550.log.json) | -| FCN (D6) | R-50b-D16 | 769x769 | 80000 | 3.6 | 4.17 | TITAN Xp | 76.86 | 78.52 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn-d6_r50b-d16_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50b-d16_769x769_80k_cityscapes/fcn_d6_r50b-d16_769x769_80k_cityscapes_20210311_131012-d665f231.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50b_d16_769x769_80k_cityscapes/fcn_d6_r50b_d16_769x769_80k_cityscapes-20210311_131012.log.json) | -| FCN (D6) | R-101b-D16 | 512x1024 | 80000 | 4.3 | 8.46 | TITAN Xp | 77.72 | 79.53 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn-d6_r101b-d16_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101b-d16_512x1024_80k_cityscapes/fcn_d6_r101b-d16_512x1024_80k_cityscapes_20210311_144305-3f2eb5b4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101b_d16_512x1024_80k_cityscapes/fcn_d6_r101b_d16_512x1024_80k_cityscapes-20210311_144305.log.json) | -| FCN (D6) | R-101b-D16 | 769x769 | 80000 | 4.8 | 3.32 | TITAN Xp | 77.34 | 78.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn-d6_r101b-d16_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101b-d16_769x769_80k_cityscapes/fcn_d6_r101b-d16_769x769_80k_cityscapes_20210311_154527-c4d8bfbc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101b_d16_769x769_80k_cityscapes/fcn_d6_r101b_d16_769x769_80k_cityscapes-20210311_154527.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------- | ---------- | --------- | ------: | -------- | -------------- | -------- | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| FCN | R-50-D8 | 512x1024 | 40000 | 5.7 | 4.17 | V100 | 72.25 | 73.36 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x1024_40k_cityscapes/fcn_r50-d8_512x1024_40k_cityscapes_20200604_192608-efe53f0d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x1024_40k_cityscapes/fcn_r50-d8_512x1024_40k_cityscapes_20200604_192608.log.json) | +| FCN | R-101-D8 | 512x1024 | 40000 | 9.2 | 2.66 | V100 | 75.45 | 76.58 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x1024_40k_cityscapes/fcn_r101-d8_512x1024_40k_cityscapes_20200604_181852-a883d3a1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x1024_40k_cityscapes/fcn_r101-d8_512x1024_40k_cityscapes_20200604_181852.log.json) | +| FCN | R-50-D8 | 769x769 | 40000 | 6.5 | 1.80 | V100 | 71.47 | 72.54 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_769x769_40k_cityscapes/fcn_r50-d8_769x769_40k_cityscapes_20200606_113104-977b5d02.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_769x769_40k_cityscapes/fcn_r50-d8_769x769_40k_cityscapes_20200606_113104.log.json) | +| FCN | R-101-D8 | 769x769 | 40000 | 10.4 | 1.19 | V100 | 73.93 | 75.14 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_769x769_40k_cityscapes/fcn_r101-d8_769x769_40k_cityscapes_20200606_113208-7d4ab69c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_769x769_40k_cityscapes/fcn_r101-d8_769x769_40k_cityscapes_20200606_113208.log.json) | +| FCN | R-18-D8 | 512x1024 | 80000 | 1.7 | 14.65 | V100 | 71.11 | 72.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn_r18-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18-d8_512x1024_80k_cityscapes/fcn_r18-d8_512x1024_80k_cityscapes_20201225_021327-6c50f8b4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18-d8_512x1024_80k_cityscapes/fcn_r18-d8_512x1024_80k_cityscapes-20201225_021327.log.json) | +| FCN | R-50-D8 | 512x1024 | 80000 | - | | V100 | 73.61 | 74.24 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x1024_80k_cityscapes/fcn_r50-d8_512x1024_80k_cityscapes_20200606_113019-03aa804d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x1024_80k_cityscapes/fcn_r50-d8_512x1024_80k_cityscapes_20200606_113019.log.json) | +| FCN | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 75.13 | 75.94 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x1024_80k_cityscapes/fcn_r101-d8_512x1024_80k_cityscapes_20200606_113038-3fb937eb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x1024_80k_cityscapes/fcn_r101-d8_512x1024_80k_cityscapes_20200606_113038.log.json) | +| FCN (FP16) | R-101-D8 | 512x1024 | 80000 | 5.37 | 8.64 | V100 | 76.80 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn_r101-d8_4xb2-amp-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_fp16_512x1024_80k_cityscapes/fcn_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230921-fb13e883.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_fp16_512x1024_80k_cityscapes/fcn_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230921.log.json) | +| FCN | R-18-D8 | 769x769 | 80000 | 1.9 | 6.40 | V100 | 70.80 | 73.16 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn_r18-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18-d8_769x769_80k_cityscapes/fcn_r18-d8_769x769_80k_cityscapes_20201225_021451-9739d1b8.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18-d8_769x769_80k_cityscapes/fcn_r18-d8_769x769_80k_cityscapes-20201225_021451.log.json) | +| FCN | R-50-D8 | 769x769 | 80000 | - | - | V100 | 72.64 | 73.32 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_769x769_80k_cityscapes/fcn_r50-d8_769x769_80k_cityscapes_20200606_195749-f5caeabc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_769x769_80k_cityscapes/fcn_r50-d8_769x769_80k_cityscapes_20200606_195749.log.json) | +| FCN | R-101-D8 | 769x769 | 80000 | - | - | V100 | 75.52 | 76.61 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_769x769_80k_cityscapes/fcn_r101-d8_769x769_80k_cityscapes_20200606_214354-45cbac68.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_769x769_80k_cityscapes/fcn_r101-d8_769x769_80k_cityscapes_20200606_214354.log.json) | +| FCN | R-18b-D8 | 512x1024 | 80000 | 1.6 | 16.74 | V100 | 70.24 | 72.77 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn_r18b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18b-d8_512x1024_80k_cityscapes/fcn_r18b-d8_512x1024_80k_cityscapes_20201225_230143-92c0f445.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18b-d8_512x1024_80k_cityscapes/fcn_r18b-d8_512x1024_80k_cityscapes-20201225_230143.log.json) | +| FCN | R-50b-D8 | 512x1024 | 80000 | 5.6 | 4.20 | V100 | 75.65 | 77.59 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn_r50b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50b-d8_512x1024_80k_cityscapes/fcn_r50b-d8_512x1024_80k_cityscapes_20201225_094221-82957416.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50b-d8_512x1024_80k_cityscapes/fcn_r50b-d8_512x1024_80k_cityscapes-20201225_094221.log.json) | +| FCN | R-101b-D8 | 512x1024 | 80000 | 9.1 | 2.73 | V100 | 77.37 | 78.77 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn_r101b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101b-d8_512x1024_80k_cityscapes/fcn_r101b-d8_512x1024_80k_cityscapes_20201226_160213-4543858f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101b-d8_512x1024_80k_cityscapes/fcn_r101b-d8_512x1024_80k_cityscapes-20201226_160213.log.json) | +| FCN | R-18b-D8 | 769x769 | 80000 | 1.7 | 6.70 | V100 | 69.66 | 72.07 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn_r18b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18b-d8_769x769_80k_cityscapes/fcn_r18b-d8_769x769_80k_cityscapes_20201226_004430-32d504e5.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r18b-d8_769x769_80k_cityscapes/fcn_r18b-d8_769x769_80k_cityscapes-20201226_004430.log.json) | +| FCN | R-50b-D8 | 769x769 | 80000 | 6.3 | 1.82 | V100 | 73.83 | 76.60 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn_r50b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50b-d8_769x769_80k_cityscapes/fcn_r50b-d8_769x769_80k_cityscapes_20201225_094223-94552d38.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50b-d8_769x769_80k_cityscapes/fcn_r50b-d8_769x769_80k_cityscapes-20201225_094223.log.json) | +| FCN | R-101b-D8 | 769x769 | 80000 | 10.3 | 1.15 | V100 | 77.02 | 78.67 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn_r101b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101b-d8_769x769_80k_cityscapes/fcn_r101b-d8_769x769_80k_cityscapes_20201226_170012-82be37e2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101b-d8_769x769_80k_cityscapes/fcn_r101b-d8_769x769_80k_cityscapes-20201226_170012.log.json) | +| FCN (D6) | R-50-D16 | 512x1024 | 40000 | 3.4 | 10.22 | TITAN Xp | 77.06 | 78.85 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn-d6_r50-d16_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_512x1024_40k_cityscapes/fcn_d6_r50-d16_512x1024_40k_cityscapes_20210305_130133-98d5d1bc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_512x1024_40k_cityscapes/fcn_d6_r50-d16_512x1024_40k_cityscapes-20210305_130133.log.json) | +| FCN (D6) | R-50-D16 | 512x1024 | 80000 | - | 10.35 | TITAN Xp | 77.27 | 78.88 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn-d6_r50-d16_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_512x1024_80k_cityscapes/fcn_d6_r50-d16_512x1024_80k_cityscapes_20210306_115604-133c292f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_512x1024_80k_cityscapes/fcn_d6_r50-d16_512x1024_80k_cityscapes-20210306_115604.log.json) | +| FCN (D6) | R-50-D16 | 769x769 | 40000 | 3.7 | 4.17 | TITAN Xp | 76.82 | 78.22 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn-d6_r50-d16_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_769x769_40k_cityscapes/fcn_d6_r50-d16_769x769_40k_cityscapes_20210305_185744-1aab18ed.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_769x769_40k_cityscapes/fcn_d6_r50-d16_769x769_40k_cityscapes-20210305_185744.log.json) | +| FCN (D6) | R-50-D16 | 769x769 | 80000 | - | 4.15 | TITAN Xp | 77.04 | 78.40 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn-d6_r50-d16_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_769x769_80k_cityscapes/fcn_d6_r50-d16_769x769_80k_cityscapes_20210305_200413-109d88eb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50-d16_769x769_80k_cityscapes/fcn_d6_r50-d16_769x769_80k_cityscapes-20210305_200413.log.json) | +| FCN (D6) | R-101-D16 | 512x1024 | 40000 | 4.5 | 8.04 | TITAN Xp | 77.36 | 79.18 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn-d6_r101-d16_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_512x1024_40k_cityscapes/fcn_d6_r101-d16_512x1024_40k_cityscapes_20210305_130337-9cf2b450.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_512x1024_40k_cityscapes/fcn_d6_r101-d16_512x1024_40k_cityscapes-20210305_130337.log.json) | +| FCN (D6) | R-101-D16 | 512x1024 | 80000 | - | 8.26 | TITAN Xp | 78.46 | 80.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn-d6_r101-d16_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_512x1024_80k_cityscapes/fcn_d6_r101-d16_512x1024_80k_cityscapes_20210308_102747-cb336445.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_512x1024_80k_cityscapes/fcn_d6_r101-d16_512x1024_80k_cityscapes-20210308_102747.log.json) | +| FCN (D6) | R-101-D16 | 769x769 | 40000 | 5.0 | 3.12 | TITAN Xp | 77.28 | 78.95 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn-d6_r101-d16_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_769x769_40k_cityscapes/fcn_d6_r101-d16_769x769_40k_cityscapes_20210308_102453-60b114e9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_769x769_40k_cityscapes/fcn_d6_r101-d16_769x769_40k_cityscapes-20210308_102453.log.json) | +| FCN (D6) | R-101-D16 | 769x769 | 80000 | - | 3.21 | TITAN Xp | 78.06 | 79.58 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn-d6_r101-d16_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_769x769_80k_cityscapes/fcn_d6_r101-d16_769x769_80k_cityscapes_20210306_120016-e33adc4f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101-d16_769x769_80k_cityscapes/fcn_d6_r101-d16_769x769_80k_cityscapes-20210306_120016.log.json) | +| FCN (D6) | R-50b-D16 | 512x1024 | 80000 | 3.2 | 10.16 | TITAN Xp | 76.99 | 79.03 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn-d6_r50b-d16_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50b-d16_512x1024_80k_cityscapes/fcn_d6_r50b-d16_512x1024_80k_cityscapes_20210311_125550-6a0b62e9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50b_d16_512x1024_80k_cityscapes/fcn_d6_r50b_d16_512x1024_80k_cityscapes-20210311_125550.log.json) | +| FCN (D6) | R-50b-D16 | 769x769 | 80000 | 3.6 | 4.17 | TITAN Xp | 76.86 | 78.52 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn-d6_r50b-d16_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50b-d16_769x769_80k_cityscapes/fcn_d6_r50b-d16_769x769_80k_cityscapes_20210311_131012-d665f231.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r50b_d16_769x769_80k_cityscapes/fcn_d6_r50b_d16_769x769_80k_cityscapes-20210311_131012.log.json) | +| FCN (D6) | R-101b-D16 | 512x1024 | 80000 | 4.3 | 8.46 | TITAN Xp | 77.72 | 79.53 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn-d6_r101b-d16_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101b-d16_512x1024_80k_cityscapes/fcn_d6_r101b-d16_512x1024_80k_cityscapes_20210311_144305-3f2eb5b4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101b_d16_512x1024_80k_cityscapes/fcn_d6_r101b_d16_512x1024_80k_cityscapes-20210311_144305.log.json) | +| FCN (D6) | R-101b-D16 | 769x769 | 80000 | 4.8 | 3.32 | TITAN Xp | 77.34 | 78.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn-d6_r101b-d16_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101b-d16_769x769_80k_cityscapes/fcn_d6_r101b-d16_769x769_80k_cityscapes_20210311_154527-c4d8bfbc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_d6_r101b_d16_769x769_80k_cityscapes/fcn_d6_r101b_d16_769x769_80k_cityscapes-20210311_154527.log.json) | ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| FCN | R-50-D8 | 512x512 | 80000 | 8.5 | 23.49 | V100 | 35.94 | 37.94 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_80k_ade20k/fcn_r50-d8_512x512_80k_ade20k_20200614_144016-f8ac5082.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_80k_ade20k/fcn_r50-d8_512x512_80k_ade20k_20200614_144016.log.json) | -| FCN | R-101-D8 | 512x512 | 80000 | 12 | 14.78 | V100 | 39.61 | 40.83 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb4-80k_ade20k-512x512.pyy) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_80k_ade20k/fcn_r101-d8_512x512_80k_ade20k_20200615_014143-bc1809f7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_80k_ade20k/fcn_r101-d8_512x512_80k_ade20k_20200615_014143.log.json) | -| FCN | R-50-D8 | 512x512 | 160000 | - | - | V100 | 36.10 | 38.08 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_160k_ade20k/fcn_r50-d8_512x512_160k_ade20k_20200615_100713-4edbc3b4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_160k_ade20k/fcn_r50-d8_512x512_160k_ade20k_20200615_100713.log.json) | -| FCN | R-101-D8 | 512x512 | 160000 | - | - | V100 | 39.91 | 41.40 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_160k_ade20k/fcn_r101-d8_512x512_160k_ade20k_20200615_105816-fd192bd5.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_160k_ade20k/fcn_r101-d8_512x512_160k_ade20k_20200615_105816.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| FCN | R-50-D8 | 512x512 | 80000 | 8.5 | 23.49 | V100 | 35.94 | 37.94 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_80k_ade20k/fcn_r50-d8_512x512_80k_ade20k_20200614_144016-f8ac5082.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_80k_ade20k/fcn_r50-d8_512x512_80k_ade20k_20200614_144016.log.json) | +| FCN | R-101-D8 | 512x512 | 80000 | 12 | 14.78 | V100 | 39.61 | 40.83 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn_r101-d8_4xb4-80k_ade20k-512x512.pyy) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_80k_ade20k/fcn_r101-d8_512x512_80k_ade20k_20200615_014143-bc1809f7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_80k_ade20k/fcn_r101-d8_512x512_80k_ade20k_20200615_014143.log.json) | +| FCN | R-50-D8 | 512x512 | 160000 | - | - | V100 | 36.10 | 38.08 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_160k_ade20k/fcn_r50-d8_512x512_160k_ade20k_20200615_100713-4edbc3b4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_160k_ade20k/fcn_r50-d8_512x512_160k_ade20k_20200615_100713.log.json) | +| FCN | R-101-D8 | 512x512 | 160000 | - | - | V100 | 39.91 | 41.40 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_160k_ade20k/fcn_r101-d8_512x512_160k_ade20k_20200615_105816-fd192bd5.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_160k_ade20k/fcn_r101-d8_512x512_160k_ade20k_20200615_105816.log.json) | ### Pascal VOC 2012 + Aug -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| FCN | R-50-D8 | 512x512 | 20000 | 5.7 | 23.28 | V100 | 67.08 | 69.94 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_20k_voc12aug/fcn_r50-d8_512x512_20k_voc12aug_20200617_010715-52dc5306.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_20k_voc12aug/fcn_r50-d8_512x512_20k_voc12aug_20200617_010715.log.json) | -| FCN | R-101-D8 | 512x512 | 20000 | 9.2 | 14.81 | V100 | 71.16 | 73.57 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_20k_voc12aug/fcn_r101-d8_512x512_20k_voc12aug_20200617_010842-0bb4e798.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_20k_voc12aug/fcn_r101-d8_512x512_20k_voc12aug_20200617_010842.log.json) | -| FCN | R-50-D8 | 512x512 | 40000 | - | - | V100 | 66.97 | 69.04 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_40k_voc12aug/fcn_r50-d8_512x512_40k_voc12aug_20200613_161222-5e2dbf40.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_40k_voc12aug/fcn_r50-d8_512x512_40k_voc12aug_20200613_161222.log.json) | -| FCN | R-101-D8 | 512x512 | 40000 | - | - | V100 | 69.91 | 72.38 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_40k_voc12aug/fcn_r101-d8_512x512_40k_voc12aug_20200613_161240-4c8bcefd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_40k_voc12aug/fcn_r101-d8_512x512_40k_voc12aug_20200613_161240.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| FCN | R-50-D8 | 512x512 | 20000 | 5.7 | 23.28 | V100 | 67.08 | 69.94 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_20k_voc12aug/fcn_r50-d8_512x512_20k_voc12aug_20200617_010715-52dc5306.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_20k_voc12aug/fcn_r50-d8_512x512_20k_voc12aug_20200617_010715.log.json) | +| FCN | R-101-D8 | 512x512 | 20000 | 9.2 | 14.81 | V100 | 71.16 | 73.57 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_20k_voc12aug/fcn_r101-d8_512x512_20k_voc12aug_20200617_010842-0bb4e798.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_20k_voc12aug/fcn_r101-d8_512x512_20k_voc12aug_20200617_010842.log.json) | +| FCN | R-50-D8 | 512x512 | 40000 | - | - | V100 | 66.97 | 69.04 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_40k_voc12aug/fcn_r50-d8_512x512_40k_voc12aug_20200613_161222-5e2dbf40.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_40k_voc12aug/fcn_r50-d8_512x512_40k_voc12aug_20200613_161222.log.json) | +| FCN | R-101-D8 | 512x512 | 40000 | - | - | V100 | 69.91 | 72.38 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_40k_voc12aug/fcn_r101-d8_512x512_40k_voc12aug_20200613_161240-4c8bcefd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_40k_voc12aug/fcn_r101-d8_512x512_40k_voc12aug_20200613_161240.log.json) | ### Pascal Context -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| FCN | R-101-D8 | 480x480 | 40000 | - | 9.93 | V100 | 44.43 | 45.63 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb4-40k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_40k_pascal_context/fcn_r101-d8_480x480_40k_pascal_context_20210421_154757-b5e97937.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_40k_pascal_context/fcn_r101-d8_480x480_40k_pascal_context-20210421_154757.log.json) | -| FCN | R-101-D8 | 480x480 | 80000 | - | - | V100 | 44.13 | 45.26 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb4-80k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_80k_pascal_context/fcn_r101-d8_480x480_80k_pascal_context_20210421_163310-4711813f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_80k_pascal_context/fcn_r101-d8_480x480_80k_pascal_context-20210421_163310.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| FCN | R-101-D8 | 480x480 | 40000 | - | 9.93 | V100 | 44.43 | 45.63 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn_r101-d8_4xb4-40k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_40k_pascal_context/fcn_r101-d8_480x480_40k_pascal_context_20210421_154757-b5e97937.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_40k_pascal_context/fcn_r101-d8_480x480_40k_pascal_context-20210421_154757.log.json) | +| FCN | R-101-D8 | 480x480 | 80000 | - | - | V100 | 44.13 | 45.26 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn_r101-d8_4xb4-80k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_80k_pascal_context/fcn_r101-d8_480x480_80k_pascal_context_20210421_163310-4711813f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_80k_pascal_context/fcn_r101-d8_480x480_80k_pascal_context-20210421_163310.log.json) | ### Pascal Context 59 -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| FCN | R-101-D8 | 480x480 | 40000 | - | - | V100 | 48.42 | 50.4 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb4-40k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_40k_pascal_context_59/fcn_r101-d8_480x480_40k_pascal_context_59_20210415_230724-8cf83682.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_40k_pascal_context_59/fcn_r101-d8_480x480_40k_pascal_context_59-20210415_230724.log.json) | -| FCN | R-101-D8 | 480x480 | 80000 | - | - | V100 | 49.35 | 51.38 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn_r101-d8_4xb4-80k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_80k_pascal_context_59/fcn_r101-d8_480x480_80k_pascal_context_59_20210416_110804-9a6f2c94.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_80k_pascal_context_59/fcn_r101-d8_480x480_80k_pascal_context_59-20210416_110804.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| FCN | R-101-D8 | 480x480 | 40000 | - | - | V100 | 48.42 | 50.4 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn_r101-d8_4xb4-40k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_40k_pascal_context_59/fcn_r101-d8_480x480_40k_pascal_context_59_20210415_230724-8cf83682.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_40k_pascal_context_59/fcn_r101-d8_480x480_40k_pascal_context_59-20210415_230724.log.json) | +| FCN | R-101-D8 | 480x480 | 80000 | - | - | V100 | 49.35 | 51.38 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn_r101-d8_4xb4-80k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_80k_pascal_context_59/fcn_r101-d8_480x480_80k_pascal_context_59_20210416_110804-9a6f2c94.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_480x480_80k_pascal_context_59/fcn_r101-d8_480x480_80k_pascal_context_59-20210416_110804.log.json) | Note: diff --git a/configs/gcnet/README.md b/configs/gcnet/README.md index 26a478808f..ba1a21e851 100644 --- a/configs/gcnet/README.md +++ b/configs/gcnet/README.md @@ -26,34 +26,34 @@ The Non-Local Network (NLNet) presents a pioneering approach for capturing long- ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| GCNet | R-50-D8 | 512x1024 | 40000 | 5.8 | 3.93 | V100 | 77.69 | 78.56 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x1024_40k_cityscapes/gcnet_r50-d8_512x1024_40k_cityscapes_20200618_074436-4b0fd17b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x1024_40k_cityscapes/gcnet_r50-d8_512x1024_40k_cityscapes_20200618_074436.log.json) | -| GCNet | R-101-D8 | 512x1024 | 40000 | 9.2 | 2.61 | V100 | 78.28 | 79.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x1024_40k_cityscapes/gcnet_r101-d8_512x1024_40k_cityscapes_20200618_074436-5e62567f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x1024_40k_cityscapes/gcnet_r101-d8_512x1024_40k_cityscapes_20200618_074436.log.json) | -| GCNet | R-50-D8 | 769x769 | 40000 | 6.5 | 1.67 | V100 | 78.12 | 80.09 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_769x769_40k_cityscapes/gcnet_r50-d8_769x769_40k_cityscapes_20200618_182814-a26f4471.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_769x769_40k_cityscapes/gcnet_r50-d8_769x769_40k_cityscapes_20200618_182814.log.json) | -| GCNet | R-101-D8 | 769x769 | 40000 | 10.5 | 1.13 | V100 | 78.95 | 80.71 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_769x769_40k_cityscapes/gcnet_r101-d8_769x769_40k_cityscapes_20200619_092550-ca4f0a84.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_769x769_40k_cityscapes/gcnet_r101-d8_769x769_40k_cityscapes_20200619_092550.log.json) | -| GCNet | R-50-D8 | 512x1024 | 80000 | - | - | V100 | 78.48 | 80.01 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x1024_80k_cityscapes/gcnet_r50-d8_512x1024_80k_cityscapes_20200618_074450-ef8f069b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x1024_80k_cityscapes/gcnet_r50-d8_512x1024_80k_cityscapes_20200618_074450.log.json) | -| GCNet | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 79.03 | 79.84 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r101-d8_4xb2-80k_cityscapes-512x1024.pyy) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x1024_80k_cityscapes/gcnet_r101-d8_512x1024_80k_cityscapes_20200618_074450-778ebf69.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x1024_80k_cityscapes/gcnet_r101-d8_512x1024_80k_cityscapes_20200618_074450.log.json) | -| GCNet | R-50-D8 | 769x769 | 80000 | - | - | V100 | 78.68 | 80.66 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_769x769_80k_cityscapes/gcnet_r50-d8_769x769_80k_cityscapes_20200619_092516-4839565b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_769x769_80k_cityscapes/gcnet_r50-d8_769x769_80k_cityscapes_20200619_092516.log.json) | -| GCNet | R-101-D8 | 769x769 | 80000 | - | - | V100 | 79.18 | 80.71 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_769x769_80k_cityscapes/gcnet_r101-d8_769x769_80k_cityscapes_20200619_092628-8e043423.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_769x769_80k_cityscapes/gcnet_r101-d8_769x769_80k_cityscapes_20200619_092628.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| GCNet | R-50-D8 | 512x1024 | 40000 | 5.8 | 3.93 | V100 | 77.69 | 78.56 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/gcnet/gcnet_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x1024_40k_cityscapes/gcnet_r50-d8_512x1024_40k_cityscapes_20200618_074436-4b0fd17b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x1024_40k_cityscapes/gcnet_r50-d8_512x1024_40k_cityscapes_20200618_074436.log.json) | +| GCNet | R-101-D8 | 512x1024 | 40000 | 9.2 | 2.61 | V100 | 78.28 | 79.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/gcnet/gcnet_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x1024_40k_cityscapes/gcnet_r101-d8_512x1024_40k_cityscapes_20200618_074436-5e62567f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x1024_40k_cityscapes/gcnet_r101-d8_512x1024_40k_cityscapes_20200618_074436.log.json) | +| GCNet | R-50-D8 | 769x769 | 40000 | 6.5 | 1.67 | V100 | 78.12 | 80.09 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/gcnet/gcnet_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_769x769_40k_cityscapes/gcnet_r50-d8_769x769_40k_cityscapes_20200618_182814-a26f4471.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_769x769_40k_cityscapes/gcnet_r50-d8_769x769_40k_cityscapes_20200618_182814.log.json) | +| GCNet | R-101-D8 | 769x769 | 40000 | 10.5 | 1.13 | V100 | 78.95 | 80.71 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/gcnet/gcnet_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_769x769_40k_cityscapes/gcnet_r101-d8_769x769_40k_cityscapes_20200619_092550-ca4f0a84.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_769x769_40k_cityscapes/gcnet_r101-d8_769x769_40k_cityscapes_20200619_092550.log.json) | +| GCNet | R-50-D8 | 512x1024 | 80000 | - | - | V100 | 78.48 | 80.01 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/gcnet/gcnet_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x1024_80k_cityscapes/gcnet_r50-d8_512x1024_80k_cityscapes_20200618_074450-ef8f069b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x1024_80k_cityscapes/gcnet_r50-d8_512x1024_80k_cityscapes_20200618_074450.log.json) | +| GCNet | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 79.03 | 79.84 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/gcnet/gcnet_r101-d8_4xb2-80k_cityscapes-512x1024.pyy) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x1024_80k_cityscapes/gcnet_r101-d8_512x1024_80k_cityscapes_20200618_074450-778ebf69.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x1024_80k_cityscapes/gcnet_r101-d8_512x1024_80k_cityscapes_20200618_074450.log.json) | +| GCNet | R-50-D8 | 769x769 | 80000 | - | - | V100 | 78.68 | 80.66 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/gcnet/gcnet_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_769x769_80k_cityscapes/gcnet_r50-d8_769x769_80k_cityscapes_20200619_092516-4839565b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_769x769_80k_cityscapes/gcnet_r50-d8_769x769_80k_cityscapes_20200619_092516.log.json) | +| GCNet | R-101-D8 | 769x769 | 80000 | - | - | V100 | 79.18 | 80.71 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/gcnet/gcnet_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_769x769_80k_cityscapes/gcnet_r101-d8_769x769_80k_cityscapes_20200619_092628-8e043423.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_769x769_80k_cityscapes/gcnet_r101-d8_769x769_80k_cityscapes_20200619_092628.log.json) | ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| GCNet | R-50-D8 | 512x512 | 80000 | 8.5 | 23.38 | V100 | 41.47 | 42.85 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_80k_ade20k/gcnet_r50-d8_512x512_80k_ade20k_20200614_185146-91a6da41.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_80k_ade20k/gcnet_r50-d8_512x512_80k_ade20k_20200614_185146.log.json) | -| GCNet | R-101-D8 | 512x512 | 80000 | 12 | 15.20 | V100 | 42.82 | 44.54 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_80k_ade20k/gcnet_r101-d8_512x512_80k_ade20k_20200615_020811-c3fcb6dd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_80k_ade20k/gcnet_r101-d8_512x512_80k_ade20k_20200615_020811.log.json) | -| GCNet | R-50-D8 | 512x512 | 160000 | - | - | V100 | 42.37 | 43.52 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_160k_ade20k/gcnet_r50-d8_512x512_160k_ade20k_20200615_224122-d95f3e1f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_160k_ade20k/gcnet_r50-d8_512x512_160k_ade20k_20200615_224122.log.json) | -| GCNet | R-101-D8 | 512x512 | 160000 | - | - | V100 | 43.69 | 45.21 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_160k_ade20k/gcnet_r101-d8_512x512_160k_ade20k_20200615_225406-615528d7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_160k_ade20k/gcnet_r101-d8_512x512_160k_ade20k_20200615_225406.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| GCNet | R-50-D8 | 512x512 | 80000 | 8.5 | 23.38 | V100 | 41.47 | 42.85 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/gcnet/gcnet_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_80k_ade20k/gcnet_r50-d8_512x512_80k_ade20k_20200614_185146-91a6da41.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_80k_ade20k/gcnet_r50-d8_512x512_80k_ade20k_20200614_185146.log.json) | +| GCNet | R-101-D8 | 512x512 | 80000 | 12 | 15.20 | V100 | 42.82 | 44.54 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/gcnet/gcnet_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_80k_ade20k/gcnet_r101-d8_512x512_80k_ade20k_20200615_020811-c3fcb6dd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_80k_ade20k/gcnet_r101-d8_512x512_80k_ade20k_20200615_020811.log.json) | +| GCNet | R-50-D8 | 512x512 | 160000 | - | - | V100 | 42.37 | 43.52 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/gcnet/gcnet_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_160k_ade20k/gcnet_r50-d8_512x512_160k_ade20k_20200615_224122-d95f3e1f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_160k_ade20k/gcnet_r50-d8_512x512_160k_ade20k_20200615_224122.log.json) | +| GCNet | R-101-D8 | 512x512 | 160000 | - | - | V100 | 43.69 | 45.21 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/gcnet/gcnet_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_160k_ade20k/gcnet_r101-d8_512x512_160k_ade20k_20200615_225406-615528d7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_160k_ade20k/gcnet_r101-d8_512x512_160k_ade20k_20200615_225406.log.json) | ### Pascal VOC 2012 + Aug -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| GCNet | R-50-D8 | 512x512 | 20000 | 5.8 | 23.35 | V100 | 76.42 | 77.51 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_20k_voc12aug/gcnet_r50-d8_512x512_20k_voc12aug_20200617_165701-3cbfdab1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_20k_voc12aug/gcnet_r50-d8_512x512_20k_voc12aug_20200617_165701.log.json) | -| GCNet | R-101-D8 | 512x512 | 20000 | 9.2 | 14.80 | V100 | 77.41 | 78.56 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_20k_voc12aug/gcnet_r101-d8_512x512_20k_voc12aug_20200617_165713-6c720aa9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_20k_voc12aug/gcnet_r101-d8_512x512_20k_voc12aug_20200617_165713.log.json) | -| GCNet | R-50-D8 | 512x512 | 40000 | - | - | V100 | 76.24 | 77.63 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_40k_voc12aug/gcnet_r50-d8_512x512_40k_voc12aug_20200613_195105-9797336d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_40k_voc12aug/gcnet_r50-d8_512x512_40k_voc12aug_20200613_195105.log.json) | -| GCNet | R-101-D8 | 512x512 | 40000 | - | - | V100 | 77.84 | 78.59 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/gcnet/gcnet_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_40k_voc12aug/gcnet_r101-d8_512x512_40k_voc12aug_20200613_185806-1e38208d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_40k_voc12aug/gcnet_r101-d8_512x512_40k_voc12aug_20200613_185806.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| GCNet | R-50-D8 | 512x512 | 20000 | 5.8 | 23.35 | V100 | 76.42 | 77.51 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/gcnet/gcnet_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_20k_voc12aug/gcnet_r50-d8_512x512_20k_voc12aug_20200617_165701-3cbfdab1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_20k_voc12aug/gcnet_r50-d8_512x512_20k_voc12aug_20200617_165701.log.json) | +| GCNet | R-101-D8 | 512x512 | 20000 | 9.2 | 14.80 | V100 | 77.41 | 78.56 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/gcnet/gcnet_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_20k_voc12aug/gcnet_r101-d8_512x512_20k_voc12aug_20200617_165713-6c720aa9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_20k_voc12aug/gcnet_r101-d8_512x512_20k_voc12aug_20200617_165713.log.json) | +| GCNet | R-50-D8 | 512x512 | 40000 | - | - | V100 | 76.24 | 77.63 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/gcnet/gcnet_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_40k_voc12aug/gcnet_r50-d8_512x512_40k_voc12aug_20200613_195105-9797336d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_40k_voc12aug/gcnet_r50-d8_512x512_40k_voc12aug_20200613_195105.log.json) | +| GCNet | R-101-D8 | 512x512 | 40000 | - | - | V100 | 77.84 | 78.59 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/gcnet/gcnet_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_40k_voc12aug/gcnet_r101-d8_512x512_40k_voc12aug_20200613_185806-1e38208d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_40k_voc12aug/gcnet_r101-d8_512x512_40k_voc12aug_20200613_185806.log.json) | ## Citation diff --git a/configs/hrnet/README.md b/configs/hrnet/README.md index 38a6bd0e76..b529fc895e 100644 --- a/configs/hrnet/README.md +++ b/configs/hrnet/README.md @@ -26,85 +26,85 @@ High-resolution representations are essential for position-sensitive vision prob ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | ------------------ | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| FCN | HRNetV2p-W18-Small | 512x1024 | 40000 | 1.7 | 23.74 | V100 | 73.86 | 75.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18s_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_40k_cityscapes/fcn_hr18s_512x1024_40k_cityscapes_20200601_014216-93db27d0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_40k_cityscapes/fcn_hr18s_512x1024_40k_cityscapes_20200601_014216.log.json) | -| FCN | HRNetV2p-W18 | 512x1024 | 40000 | 2.9 | 12.97 | V100 | 77.19 | 78.92 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_40k_cityscapes/fcn_hr18_512x1024_40k_cityscapes_20200601_014216-f196fb4e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_40k_cityscapes/fcn_hr18_512x1024_40k_cityscapes_20200601_014216.log.json) | -| FCN | HRNetV2p-W48 | 512x1024 | 40000 | 6.2 | 6.42 | V100 | 78.48 | 79.69 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_40k_cityscapes/fcn_hr48_512x1024_40k_cityscapes_20200601_014240-a989b146.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_40k_cityscapes/fcn_hr48_512x1024_40k_cityscapes_20200601_014240.log.json) | -| FCN | HRNetV2p-W18-Small | 512x1024 | 80000 | - | - | V100 | 75.31 | 77.48 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18s_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_80k_cityscapes/fcn_hr18s_512x1024_80k_cityscapes_20200601_202700-1462b75d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_80k_cityscapes/fcn_hr18s_512x1024_80k_cityscapes_20200601_202700.log.json) | -| FCN | HRNetV2p-W18 | 512x1024 | 80000 | - | - | V100 | 78.65 | 80.35 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_80k_cityscapes/fcn_hr18_512x1024_80k_cityscapes_20200601_223255-4e7b345e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_80k_cityscapes/fcn_hr18_512x1024_80k_cityscapes_20200601_223255.log.json) | -| FCN | HRNetV2p-W48 | 512x1024 | 80000 | - | - | V100 | 79.93 | 80.72 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_80k_cityscapes/fcn_hr48_512x1024_80k_cityscapes_20200601_202606-58ea95d6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_80k_cityscapes/fcn_hr48_512x1024_80k_cityscapes_20200601_202606.log.json) | -| FCN | HRNetV2p-W18-Small | 512x1024 | 160000 | - | - | V100 | 76.31 | 78.31 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18s_4xb2-160k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_160k_cityscapes/fcn_hr18s_512x1024_160k_cityscapes_20200602_190901-4a0797ea.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_160k_cityscapes/fcn_hr18s_512x1024_160k_cityscapes_20200602_190901.log.json) | -| FCN | HRNetV2p-W18 | 512x1024 | 160000 | - | - | V100 | 78.80 | 80.74 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18_4xb2-160k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_160k_cityscapes/fcn_hr18_512x1024_160k_cityscapes_20200602_190822-221e4a4f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_160k_cityscapes/fcn_hr18_512x1024_160k_cityscapes_20200602_190822.log.json) | -| FCN | HRNetV2p-W48 | 512x1024 | 160000 | - | - | V100 | 80.65 | 81.92 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb2-160k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_160k_cityscapes/fcn_hr48_512x1024_160k_cityscapes_20200602_190946-59b7973e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_160k_cityscapes/fcn_hr48_512x1024_160k_cityscapes_20200602_190946.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | ------------------ | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| FCN | HRNetV2p-W18-Small | 512x1024 | 40000 | 1.7 | 23.74 | V100 | 73.86 | 75.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet/fcn_hr18s_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_40k_cityscapes/fcn_hr18s_512x1024_40k_cityscapes_20200601_014216-93db27d0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_40k_cityscapes/fcn_hr18s_512x1024_40k_cityscapes_20200601_014216.log.json) | +| FCN | HRNetV2p-W18 | 512x1024 | 40000 | 2.9 | 12.97 | V100 | 77.19 | 78.92 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet/fcn_hr18_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_40k_cityscapes/fcn_hr18_512x1024_40k_cityscapes_20200601_014216-f196fb4e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_40k_cityscapes/fcn_hr18_512x1024_40k_cityscapes_20200601_014216.log.json) | +| FCN | HRNetV2p-W48 | 512x1024 | 40000 | 6.2 | 6.42 | V100 | 78.48 | 79.69 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet/fcn_hr48_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_40k_cityscapes/fcn_hr48_512x1024_40k_cityscapes_20200601_014240-a989b146.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_40k_cityscapes/fcn_hr48_512x1024_40k_cityscapes_20200601_014240.log.json) | +| FCN | HRNetV2p-W18-Small | 512x1024 | 80000 | - | - | V100 | 75.31 | 77.48 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet/fcn_hr18s_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_80k_cityscapes/fcn_hr18s_512x1024_80k_cityscapes_20200601_202700-1462b75d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_80k_cityscapes/fcn_hr18s_512x1024_80k_cityscapes_20200601_202700.log.json) | +| FCN | HRNetV2p-W18 | 512x1024 | 80000 | - | - | V100 | 78.65 | 80.35 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet/fcn_hr18_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_80k_cityscapes/fcn_hr18_512x1024_80k_cityscapes_20200601_223255-4e7b345e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_80k_cityscapes/fcn_hr18_512x1024_80k_cityscapes_20200601_223255.log.json) | +| FCN | HRNetV2p-W48 | 512x1024 | 80000 | - | - | V100 | 79.93 | 80.72 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet/fcn_hr48_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_80k_cityscapes/fcn_hr48_512x1024_80k_cityscapes_20200601_202606-58ea95d6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_80k_cityscapes/fcn_hr48_512x1024_80k_cityscapes_20200601_202606.log.json) | +| FCN | HRNetV2p-W18-Small | 512x1024 | 160000 | - | - | V100 | 76.31 | 78.31 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet/fcn_hr18s_4xb2-160k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_160k_cityscapes/fcn_hr18s_512x1024_160k_cityscapes_20200602_190901-4a0797ea.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_160k_cityscapes/fcn_hr18s_512x1024_160k_cityscapes_20200602_190901.log.json) | +| FCN | HRNetV2p-W18 | 512x1024 | 160000 | - | - | V100 | 78.80 | 80.74 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet/fcn_hr18_4xb2-160k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_160k_cityscapes/fcn_hr18_512x1024_160k_cityscapes_20200602_190822-221e4a4f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_160k_cityscapes/fcn_hr18_512x1024_160k_cityscapes_20200602_190822.log.json) | +| FCN | HRNetV2p-W48 | 512x1024 | 160000 | - | - | V100 | 80.65 | 81.92 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet/fcn_hr48_4xb2-160k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_160k_cityscapes/fcn_hr48_512x1024_160k_cityscapes_20200602_190946-59b7973e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_160k_cityscapes/fcn_hr48_512x1024_160k_cityscapes_20200602_190946.log.json) | ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | ------------------ | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| FCN | HRNetV2p-W18-Small | 512x512 | 80000 | 3.8 | 38.66 | V100 | 31.38 | 32.45 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18s_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_80k_ade20k/fcn_hr18s_512x512_80k_ade20k_20200614_144345-77fc814a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_80k_ade20k/fcn_hr18s_512x512_80k_ade20k_20200614_144345.log.json) | -| FCN | HRNetV2p-W18 | 512x512 | 80000 | 4.9 | 22.57 | V100 | 36.27 | 37.28 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_80k_ade20k/fcn_hr18_512x512_80k_ade20k_20210827_114910-6c9382c0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_80k_ade20k/fcn_hr18_512x512_80k_ade20k_20210827_114910.log.json) | -| FCN | HRNetV2p-W48 | 512x512 | 80000 | 8.2 | 21.23 | V100 | 41.90 | 43.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_80k_ade20k/fcn_hr48_512x512_80k_ade20k_20200614_193946-7ba5258d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_80k_ade20k/fcn_hr48_512x512_80k_ade20k_20200614_193946.log.json) | -| FCN | HRNetV2p-W18-Small | 512x512 | 160000 | - | - | V100 | 33.07 | 34.56 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18s_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_160k_ade20k/fcn_hr18s_512x512_160k_ade20k_20210829_174739-f1e7c2e7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_160k_ade20k/fcn_hr18s_512x512_160k_ade20k_20210829_174739.log.json) | -| FCN | HRNetV2p-W18 | 512x512 | 160000 | - | - | V100 | 36.79 | 38.58 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_160k_ade20k/fcn_hr18_512x512_160k_ade20k_20200614_214426-ca961836.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_160k_ade20k/fcn_hr18_512x512_160k_ade20k_20200614_214426.log.json) | -| FCN | HRNetV2p-W48 | 512x512 | 160000 | - | - | V100 | 42.02 | 43.86 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_160k_ade20k/fcn_hr48_512x512_160k_ade20k_20200614_214407-a52fc02c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_160k_ade20k/fcn_hr48_512x512_160k_ade20k_20200614_214407.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | ------------------ | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| FCN | HRNetV2p-W18-Small | 512x512 | 80000 | 3.8 | 38.66 | V100 | 31.38 | 32.45 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet/fcn_hr18s_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_80k_ade20k/fcn_hr18s_512x512_80k_ade20k_20200614_144345-77fc814a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_80k_ade20k/fcn_hr18s_512x512_80k_ade20k_20200614_144345.log.json) | +| FCN | HRNetV2p-W18 | 512x512 | 80000 | 4.9 | 22.57 | V100 | 36.27 | 37.28 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet/fcn_hr18_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_80k_ade20k/fcn_hr18_512x512_80k_ade20k_20210827_114910-6c9382c0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_80k_ade20k/fcn_hr18_512x512_80k_ade20k_20210827_114910.log.json) | +| FCN | HRNetV2p-W48 | 512x512 | 80000 | 8.2 | 21.23 | V100 | 41.90 | 43.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet/fcn_hr48_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_80k_ade20k/fcn_hr48_512x512_80k_ade20k_20200614_193946-7ba5258d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_80k_ade20k/fcn_hr48_512x512_80k_ade20k_20200614_193946.log.json) | +| FCN | HRNetV2p-W18-Small | 512x512 | 160000 | - | - | V100 | 33.07 | 34.56 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet/fcn_hr18s_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_160k_ade20k/fcn_hr18s_512x512_160k_ade20k_20210829_174739-f1e7c2e7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_160k_ade20k/fcn_hr18s_512x512_160k_ade20k_20210829_174739.log.json) | +| FCN | HRNetV2p-W18 | 512x512 | 160000 | - | - | V100 | 36.79 | 38.58 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet/fcn_hr18_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_160k_ade20k/fcn_hr18_512x512_160k_ade20k_20200614_214426-ca961836.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_160k_ade20k/fcn_hr18_512x512_160k_ade20k_20200614_214426.log.json) | +| FCN | HRNetV2p-W48 | 512x512 | 160000 | - | - | V100 | 42.02 | 43.86 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet/fcn_hr48_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_160k_ade20k/fcn_hr48_512x512_160k_ade20k_20200614_214407-a52fc02c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_160k_ade20k/fcn_hr48_512x512_160k_ade20k_20200614_214407.log.json) | ### Pascal VOC 2012 + Aug -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | ------------------ | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| FCN | HRNetV2p-W18-Small | 512x512 | 20000 | 1.8 | 43.36 | V100 | 65.5 | 68.89 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18s_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_20k_voc12aug/fcn_hr18s_512x512_20k_voc12aug_20210829_174910-0aceadb4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_20k_voc12aug/fcn_hr18s_512x512_20k_voc12aug_20210829_174910.log.json) | -| FCN | HRNetV2p-W18 | 512x512 | 20000 | 2.9 | 23.48 | V100 | 72.30 | 74.71 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_20k_voc12aug/fcn_hr18_512x512_20k_voc12aug_20200617_224503-488d45f7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_20k_voc12aug/fcn_hr18_512x512_20k_voc12aug_20200617_224503.log.json) | -| FCN | HRNetV2p-W48 | 512x512 | 20000 | 6.2 | 22.05 | V100 | 75.87 | 78.58 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_20k_voc12aug/fcn_hr48_512x512_20k_voc12aug_20200617_224419-89de05cd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_20k_voc12aug/fcn_hr48_512x512_20k_voc12aug_20200617_224419.log.json) | -| FCN | HRNetV2p-W18-Small | 512x512 | 40000 | - | - | V100 | 66.61 | 70.00 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18s_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_40k_voc12aug/fcn_hr18s_512x512_40k_voc12aug_20200614_000648-4f8d6e7f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_40k_voc12aug/fcn_hr18s_512x512_40k_voc12aug_20200614_000648.log.json) | -| FCN | HRNetV2p-W18 | 512x512 | 40000 | - | - | V100 | 72.90 | 75.59 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_40k_voc12aug/fcn_hr18_512x512_40k_voc12aug_20200613_224401-1b4b76cd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_40k_voc12aug/fcn_hr18_512x512_40k_voc12aug_20200613_224401.log.json) | -| FCN | HRNetV2p-W48 | 512x512 | 40000 | - | - | V100 | 76.24 | 78.49 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_40k_voc12aug/fcn_hr48_512x512_40k_voc12aug_20200613_222111-1b0f18bc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_40k_voc12aug/fcn_hr48_512x512_40k_voc12aug_20200613_222111.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | ------------------ | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| FCN | HRNetV2p-W18-Small | 512x512 | 20000 | 1.8 | 43.36 | V100 | 65.5 | 68.89 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet/fcn_hr18s_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_20k_voc12aug/fcn_hr18s_512x512_20k_voc12aug_20210829_174910-0aceadb4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_20k_voc12aug/fcn_hr18s_512x512_20k_voc12aug_20210829_174910.log.json) | +| FCN | HRNetV2p-W18 | 512x512 | 20000 | 2.9 | 23.48 | V100 | 72.30 | 74.71 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet/fcn_hr18_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_20k_voc12aug/fcn_hr18_512x512_20k_voc12aug_20200617_224503-488d45f7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_20k_voc12aug/fcn_hr18_512x512_20k_voc12aug_20200617_224503.log.json) | +| FCN | HRNetV2p-W48 | 512x512 | 20000 | 6.2 | 22.05 | V100 | 75.87 | 78.58 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet/fcn_hr48_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_20k_voc12aug/fcn_hr48_512x512_20k_voc12aug_20200617_224419-89de05cd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_20k_voc12aug/fcn_hr48_512x512_20k_voc12aug_20200617_224419.log.json) | +| FCN | HRNetV2p-W18-Small | 512x512 | 40000 | - | - | V100 | 66.61 | 70.00 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet/fcn_hr18s_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_40k_voc12aug/fcn_hr18s_512x512_40k_voc12aug_20200614_000648-4f8d6e7f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_40k_voc12aug/fcn_hr18s_512x512_40k_voc12aug_20200614_000648.log.json) | +| FCN | HRNetV2p-W18 | 512x512 | 40000 | - | - | V100 | 72.90 | 75.59 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet/fcn_hr18_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_40k_voc12aug/fcn_hr18_512x512_40k_voc12aug_20200613_224401-1b4b76cd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_40k_voc12aug/fcn_hr18_512x512_40k_voc12aug_20200613_224401.log.json) | +| FCN | HRNetV2p-W48 | 512x512 | 40000 | - | - | V100 | 76.24 | 78.49 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet/fcn_hr48_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_40k_voc12aug/fcn_hr48_512x512_40k_voc12aug_20200613_222111-1b0f18bc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_40k_voc12aug/fcn_hr48_512x512_40k_voc12aug_20200613_222111.log.json) | ### Pascal Context -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | ------------ | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| FCN | HRNetV2p-W48 | 480x480 | 40000 | 6.1 | 8.86 | V100 | 45.14 | 47.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb4-40k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_40k_pascal_context/fcn_hr48_480x480_40k_pascal_context_20200911_164852-667d00b0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_40k_pascal_context/fcn_hr48_480x480_40k_pascal_context-20200911_164852.log.json) | -| FCN | HRNetV2p-W48 | 480x480 | 80000 | - | - | V100 | 45.84 | 47.84 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb4-80k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_80k_pascal_context/fcn_hr48_480x480_80k_pascal_context_20200911_155322-847a6711.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_80k_pascal_context/fcn_hr48_480x480_80k_pascal_context-20200911_155322.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | ------------ | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| FCN | HRNetV2p-W48 | 480x480 | 40000 | 6.1 | 8.86 | V100 | 45.14 | 47.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet/fcn_hr48_4xb4-40k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_40k_pascal_context/fcn_hr48_480x480_40k_pascal_context_20200911_164852-667d00b0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_40k_pascal_context/fcn_hr48_480x480_40k_pascal_context-20200911_164852.log.json) | +| FCN | HRNetV2p-W48 | 480x480 | 80000 | - | - | V100 | 45.84 | 47.84 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet/fcn_hr48_4xb4-80k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_80k_pascal_context/fcn_hr48_480x480_80k_pascal_context_20200911_155322-847a6711.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_80k_pascal_context/fcn_hr48_480x480_80k_pascal_context-20200911_155322.log.json) | ### Pascal Context 59 -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | ------------ | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| FCN | HRNetV2p-W48 | 480x480 | 40000 | - | - | V100 | 50.33 | 52.83 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb4-40k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_40k_pascal_context_59/fcn_hr48_480x480_40k_pascal_context_59_20210410_122738-b808b8b2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_40k_pascal_context_59/fcn_hr48_480x480_40k_pascal_context_59-20210410_122738.log.json) | -| FCN | HRNetV2p-W48 | 480x480 | 80000 | - | - | V100 | 51.12 | 53.56 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb4-80k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_80k_pascal_context_59/fcn_hr48_480x480_80k_pascal_context_59_20210411_003240-3ae7081e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_80k_pascal_context_59/fcn_hr48_480x480_80k_pascal_context_59-20210411_003240.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | ------------ | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| FCN | HRNetV2p-W48 | 480x480 | 40000 | - | - | V100 | 50.33 | 52.83 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet/fcn_hr48_4xb4-40k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_40k_pascal_context_59/fcn_hr48_480x480_40k_pascal_context_59_20210410_122738-b808b8b2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_40k_pascal_context_59/fcn_hr48_480x480_40k_pascal_context_59-20210410_122738.log.json) | +| FCN | HRNetV2p-W48 | 480x480 | 80000 | - | - | V100 | 51.12 | 53.56 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet/fcn_hr48_4xb4-80k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_80k_pascal_context_59/fcn_hr48_480x480_80k_pascal_context_59_20210411_003240-3ae7081e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_480x480_80k_pascal_context_59/fcn_hr48_480x480_80k_pascal_context_59-20210411_003240.log.json) | ### LoveDA -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | ------------------ | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| FCN | HRNetV2p-W18-Small | 512x512 | 80000 | 1.59 | 24.87 | V100 | 49.28 | 49.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18s_4xb4-80k_loveda-512x512.pyy) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_80k_loveda/fcn_hr18s_512x512_80k_loveda_20211210_203228-60a86a7a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_80k_loveda/fcn_hr18s_512x512_80k_loveda_20211210_203228.log.json) | -| FCN | HRNetV2p-W18 | 512x512 | 80000 | 2.76 | 12.92 | V100 | 50.81 | 50.95 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18_4xb4-80k_loveda-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_80k_loveda/fcn_hr18_512x512_80k_loveda_20211210_203952-93d9c3b3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_80k_loveda/fcn_hr18_512x512_80k_loveda_20211210_203952.log.json) | -| FCN | HRNetV2p-W48 | 512x512 | 80000 | 6.20 | 9.61 | V100 | 51.42 | 51.64 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb4-80k_loveda-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_80k_loveda/fcn_hr48_512x512_80k_loveda_20211211_044756-67072f55.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_80k_loveda/fcn_hr48_512x512_80k_loveda_20211211_044756.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | ------------------ | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| FCN | HRNetV2p-W18-Small | 512x512 | 80000 | 1.59 | 24.87 | V100 | 49.28 | 49.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet/fcn_hr18s_4xb4-80k_loveda-512x512.pyy) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_80k_loveda/fcn_hr18s_512x512_80k_loveda_20211210_203228-60a86a7a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_80k_loveda/fcn_hr18s_512x512_80k_loveda_20211210_203228.log.json) | +| FCN | HRNetV2p-W18 | 512x512 | 80000 | 2.76 | 12.92 | V100 | 50.81 | 50.95 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet/fcn_hr18_4xb4-80k_loveda-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_80k_loveda/fcn_hr18_512x512_80k_loveda_20211210_203952-93d9c3b3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_80k_loveda/fcn_hr18_512x512_80k_loveda_20211210_203952.log.json) | +| FCN | HRNetV2p-W48 | 512x512 | 80000 | 6.20 | 9.61 | V100 | 51.42 | 51.64 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet/fcn_hr48_4xb4-80k_loveda-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_80k_loveda/fcn_hr48_512x512_80k_loveda_20211211_044756-67072f55.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_80k_loveda/fcn_hr48_512x512_80k_loveda_20211211_044756.log.json) | ### Potsdam -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | ------------------ | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| FCN | HRNetV2p-W18-Small | 512x512 | 80000 | 1.58 | 36.00 | V100 | 77.64 | 78.8 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18s_4xb4-80k_potsdam-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_80k_potsdam/fcn_hr18s_512x512_80k_potsdam_20211218_205517-ba32af63.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_80k_potsdam/fcn_hr18s_512x512_80k_potsdam_20211218_205517.log.json) | -| FCN | HRNetV2p-W18 | 512x512 | 80000 | 2.76 | 19.25 | V100 | 78.26 | 79.24 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18_4xb4-80k_potsdam-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_80k_potsdam/fcn_hr18_512x512_80k_potsdam_20211218_205517-5d0387ad.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_80k_potsdam/fcn_hr18_512x512_80k_potsdam_20211218_205517.log.json) | -| FCN | HRNetV2p-W48 | 512x512 | 80000 | 6.20 | 16.42 | V100 | 78.39 | 79.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb4-80k_potsdam-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_80k_potsdam/fcn_hr48_512x512_80k_potsdam_20211219_020601-97434c78.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_80k_potsdam/fcn_hr48_512x512_80k_potsdam_20211219_020601.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | ------------------ | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| FCN | HRNetV2p-W18-Small | 512x512 | 80000 | 1.58 | 36.00 | V100 | 77.64 | 78.8 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet/fcn_hr18s_4xb4-80k_potsdam-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_80k_potsdam/fcn_hr18s_512x512_80k_potsdam_20211218_205517-ba32af63.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_80k_potsdam/fcn_hr18s_512x512_80k_potsdam_20211218_205517.log.json) | +| FCN | HRNetV2p-W18 | 512x512 | 80000 | 2.76 | 19.25 | V100 | 78.26 | 79.24 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet/fcn_hr18_4xb4-80k_potsdam-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_80k_potsdam/fcn_hr18_512x512_80k_potsdam_20211218_205517-5d0387ad.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_80k_potsdam/fcn_hr18_512x512_80k_potsdam_20211218_205517.log.json) | +| FCN | HRNetV2p-W48 | 512x512 | 80000 | 6.20 | 16.42 | V100 | 78.39 | 79.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet/fcn_hr48_4xb4-80k_potsdam-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_80k_potsdam/fcn_hr48_512x512_80k_potsdam_20211219_020601-97434c78.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_80k_potsdam/fcn_hr48_512x512_80k_potsdam_20211219_020601.log.json) | ### Vaihingen -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | ------------------ | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| FCN | HRNetV2p-W18-Small | 512x512 | 80000 | 1.58 | 38.11 | V100 | 71.81 | 73.1 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18s_4xb4-80k_vaihingen-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_4x4_512x512_80k_vaihingen/fcn_hr18s_4x4_512x512_80k_vaihingen_20211231_230909-b23aae02.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_4x4_512x512_80k_vaihingen/fcn_hr18s_4x4_512x512_80k_vaihingen_20211231_230909.log.json) | -| FCN | HRNetV2p-W18 | 512x512 | 80000 | 2.76 | 19.55 | V100 | 72.57 | 74.09 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18_4xb4-80k_vaihingen-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_4x4_512x512_80k_vaihingen/fcn_hr18_4x4_512x512_80k_vaihingen_20211231_231216-2ec3ae8a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_4x4_512x512_80k_vaihingen/fcn_hr18_4x4_512x512_80k_vaihingen_20211231_231216.log.json) | -| FCN | HRNetV2p-W48 | 512x512 | 80000 | 6.20 | 17.25 | V100 | 72.50 | 73.52 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb4-80k_vaihingen-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_4x4_512x512_80k_vaihingen/fcn_hr48_4x4_512x512_80k_vaihingen_20211231_231244-7133cb22.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_4x4_512x512_80k_vaihingen/fcn_hr48_4x4_512x512_80k_vaihingen_20211231_231244.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | ------------------ | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| FCN | HRNetV2p-W18-Small | 512x512 | 80000 | 1.58 | 38.11 | V100 | 71.81 | 73.1 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet/fcn_hr18s_4xb4-80k_vaihingen-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_4x4_512x512_80k_vaihingen/fcn_hr18s_4x4_512x512_80k_vaihingen_20211231_230909-b23aae02.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_4x4_512x512_80k_vaihingen/fcn_hr18s_4x4_512x512_80k_vaihingen_20211231_230909.log.json) | +| FCN | HRNetV2p-W18 | 512x512 | 80000 | 2.76 | 19.55 | V100 | 72.57 | 74.09 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet/fcn_hr18_4xb4-80k_vaihingen-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_4x4_512x512_80k_vaihingen/fcn_hr18_4x4_512x512_80k_vaihingen_20211231_231216-2ec3ae8a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_4x4_512x512_80k_vaihingen/fcn_hr18_4x4_512x512_80k_vaihingen_20211231_231216.log.json) | +| FCN | HRNetV2p-W48 | 512x512 | 80000 | 6.20 | 17.25 | V100 | 72.50 | 73.52 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet/fcn_hr48_4xb4-80k_vaihingen-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_4x4_512x512_80k_vaihingen/fcn_hr48_4x4_512x512_80k_vaihingen_20211231_231244-7133cb22.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_4x4_512x512_80k_vaihingen/fcn_hr48_4x4_512x512_80k_vaihingen_20211231_231244.log.json) | ### iSAID -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | ------------------ | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| FCN | HRNetV2p-W18-Small | 896x896 | 80000 | 4.95 | 13.84 | V100 | 62.30 | 62.97 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18s_4xb4-80k_isaid-896x896.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_4x4_896x896_80k_isaid/fcn_hr18s_4x4_896x896_80k_isaid_20220118_001603-3cc0769b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_4x4_896x896_80k_isaid/fcn_hr18s_4x4_896x896_80k_isaid_20220118_001603.log.json) | -| FCN | HRNetV2p-W18 | 896x896 | 80000 | 8.30 | 7.71 | V100 | 65.06 | 65.60 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr18_4xb4-80k_isaid-896x896.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_4x4_896x896_80k_isaid/fcn_hr18_4x4_896x896_80k_isaid_20220110_182230-49bf752e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_4x4_896x896_80k_isaid/fcn_hr18_4x4_896x896_80k_isaid_20220110_182230.log.json) | -| FCN | HRNetV2p-W48 | 896x896 | 80000 | 16.89 | 7.34 | V100 | 67.80 | 68.53 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/hrnet/fcn_hr48_4xb4-80k_isaid-896x896.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_4x4_896x896_80k_isaid/fcn_hr48_4x4_896x896_80k_isaid_20220114_174643-547fc420.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_4x4_896x896_80k_isaid/fcn_hr48_4x4_896x896_80k_isaid_20220114_174643.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | ------------------ | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| FCN | HRNetV2p-W18-Small | 896x896 | 80000 | 4.95 | 13.84 | V100 | 62.30 | 62.97 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet/fcn_hr18s_4xb4-80k_isaid-896x896.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_4x4_896x896_80k_isaid/fcn_hr18s_4x4_896x896_80k_isaid_20220118_001603-3cc0769b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_4x4_896x896_80k_isaid/fcn_hr18s_4x4_896x896_80k_isaid_20220118_001603.log.json) | +| FCN | HRNetV2p-W18 | 896x896 | 80000 | 8.30 | 7.71 | V100 | 65.06 | 65.60 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet/fcn_hr18_4xb4-80k_isaid-896x896.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_4x4_896x896_80k_isaid/fcn_hr18_4x4_896x896_80k_isaid_20220110_182230-49bf752e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr18_4x4_896x896_80k_isaid/fcn_hr18_4x4_896x896_80k_isaid_20220110_182230.log.json) | +| FCN | HRNetV2p-W48 | 896x896 | 80000 | 16.89 | 7.34 | V100 | 67.80 | 68.53 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet/fcn_hr48_4xb4-80k_isaid-896x896.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_4x4_896x896_80k_isaid/fcn_hr48_4x4_896x896_80k_isaid_20220114_174643-547fc420.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/hrnet/fcn_hr48_4x4_896x896_80k_isaid/fcn_hr48_4x4_896x896_80k_isaid_20220114_174643.log.json) | Note: diff --git a/configs/icnet/README.md b/configs/icnet/README.md index 2b58c2eed8..fa2327fc39 100644 --- a/configs/icnet/README.md +++ b/configs/icnet/README.md @@ -26,20 +26,20 @@ We focus on the challenging task of real-time semantic segmentation in this pape ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ---------------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| ICNet | R-18-D8 | 832x832 | 80000 | 1.70 | 27.12 | V100 | 68.14 | 70.16 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/icnet/icnet_r18-d8_4xb2-80k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_832x832_80k_cityscapes/icnet_r18-d8_832x832_80k_cityscapes_20210925_225521-2e36638d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_832x832_80k_cityscapes/icnet_r18-d8_832x832_80k_cityscapes_20210925_225521.log.json) | -| ICNet | R-18-D8 | 832x832 | 160000 | - | - | V100 | 71.64 | 74.18 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/icnet/icnet_r18-d8_4xb2-160k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_832x832_160k_cityscapes/icnet_r18-d8_832x832_160k_cityscapes_20210925_230153-2c6eb6e0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_832x832_160k_cityscapes/icnet_r18-d8_832x832_160k_cityscapes_20210925_230153.log.json) | -| ICNet (in1k-pre) | R-18-D8 | 832x832 | 80000 | - | - | V100 | 72.51 | 74.78 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/icnet/icnet_r18-d8-in1k-pre_4xb2-80k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_in1k-pre_832x832_80k_cityscapes/icnet_r18-d8_in1k-pre_832x832_80k_cityscapes_20210925_230354-1cbe3022.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_in1k-pre_832x832_80k_cityscapes/icnet_r18-d8_in1k-pre_832x832_80k_cityscapes_20210925_230354.log.json) | -| ICNet (in1k-pre) | R-18-D8 | 832x832 | 160000 | - | - | V100 | 74.43 | 76.72 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/icnet/icnet_r18-d8-in1k-pre_4xb2-160k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_in1k-pre_832x832_160k_cityscapes/icnet_r18-d8_in1k-pre_832x832_160k_cityscapes_20210926_052702-619c8ae1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_in1k-pre_832x832_160k_cityscapes/icnet_r18-d8_in1k-pre_832x832_160k_cityscapes_20210926_052702.log.json) | -| ICNet | R-50-D8 | 832x832 | 80000 | 2.53 | 20.08 | V100 | 68.91 | 69.72 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/icnet/icnet_r50-d8_4xb2-80k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_832x832_80k_cityscapes/icnet_r50-d8_832x832_80k_cityscapes_20210926_044625-c6407341.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_832x832_80k_cityscapes/icnet_r50-d8_832x832_80k_cityscapes_20210926_044625.log.json) | -| ICNet | R-50-D8 | 832x832 | 160000 | - | - | V100 | 73.82 | 75.67 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/icnet/icnet_r50-d8_4xb2-160k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_832x832_160k_cityscapes/icnet_r50-d8_832x832_160k_cityscapes_20210925_232612-a95f0d4e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_832x832_160k_cityscapes/icnet_r50-d8_832x832_160k_cityscapes_20210925_232612.log.json) | -| ICNet (in1k-pre) | R-50-D8 | 832x832 | 80000 | - | - | V100 | 74.58 | 76.41 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/icnet/icnet_r50-d8-in1k-pre_4xb2-80k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_in1k-pre_832x832_80k_cityscapes/icnet_r50-d8_in1k-pre_832x832_80k_cityscapes_20210926_032943-1743dc7b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_in1k-pre_832x832_80k_cityscapes/icnet_r50-d8_in1k-pre_832x832_80k_cityscapes_20210926_032943.log.json) | -| ICNet (in1k-pre) | R-50-D8 | 832x832 | 160000 | - | - | V100 | 76.29 | 78.09 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/icnet/icnet_r50-d8-in1k-pre_4xb2-160k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_in1k-pre_832x832_160k_cityscapes/icnet_r50-d8_in1k-pre_832x832_160k_cityscapes_20210926_042715-ce310aea.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_in1k-pre_832x832_160k_cityscapes/icnet_r50-d8_in1k-pre_832x832_160k_cityscapes_20210926_042715.log.json) | -| ICNet | R-101-D8 | 832x832 | 80000 | 3.08 | 16.95 | V100 | 70.28 | 71.95 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/icnet/icnet_r101-d8_4xb2-80k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_832x832_80k_cityscapes/icnet_r101-d8_832x832_80k_cityscapes_20210926_072447-b52f936e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_832x832_80k_cityscapes/icnet_r101-d8_832x832_80k_cityscapes_20210926_072447.log.json) | -| ICNet | R-101-D8 | 832x832 | 160000 | - | - | V100 | 73.80 | 76.10 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/icnet/icnet_r101-d8_4xb2-160k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_832x832_160k_cityscapes/icnet_r101-d8_832x832_160k_cityscapes_20210926_092350-3a1ebf1a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_832x832_160k_cityscapes/icnet_r101-d8_832x832_160k_cityscapes_20210926_092350.log.json) | -| ICNet (in1k-pre) | R-101-D8 | 832x832 | 80000 | - | - | V100 | 75.57 | 77.86 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/icnet/icnet_r101-d8-in1k-pre_4xb2-80k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_in1k-pre_832x832_80k_cityscapes/icnet_r101-d8_in1k-pre_832x832_80k_cityscapes_20210926_020414-7ceb12c5.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_in1k-pre_832x832_80k_cityscapes/icnet_r101-d8_in1k-pre_832x832_80k_cityscapes_20210926_020414.log.json) | -| ICNet (in1k-pre) | R-101-D8 | 832x832 | 160000 | - | - | V100 | 76.15 | 77.98 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/icnet/icnet_r101-d8-in1k-pre_4xb2-160k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_in1k-pre_832x832_160k_cityscapes/icnet_r101-d8_in1k-pre_832x832_160k_cityscapes_20210925_232612-9484ae8a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_in1k-pre_832x832_160k_cityscapes/icnet_r101-d8_in1k-pre_832x832_160k_cityscapes_20210925_232612.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| ICNet | R-18-D8 | 832x832 | 80000 | 1.70 | 27.12 | V100 | 68.14 | 70.16 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/icnet/icnet_r18-d8_4xb2-80k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_832x832_80k_cityscapes/icnet_r18-d8_832x832_80k_cityscapes_20210925_225521-2e36638d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_832x832_80k_cityscapes/icnet_r18-d8_832x832_80k_cityscapes_20210925_225521.log.json) | +| ICNet | R-18-D8 | 832x832 | 160000 | - | - | V100 | 71.64 | 74.18 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/icnet/icnet_r18-d8_4xb2-160k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_832x832_160k_cityscapes/icnet_r18-d8_832x832_160k_cityscapes_20210925_230153-2c6eb6e0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_832x832_160k_cityscapes/icnet_r18-d8_832x832_160k_cityscapes_20210925_230153.log.json) | +| ICNet (in1k-pre) | R-18-D8 | 832x832 | 80000 | - | - | V100 | 72.51 | 74.78 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/icnet/icnet_r18-d8-in1k-pre_4xb2-80k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_in1k-pre_832x832_80k_cityscapes/icnet_r18-d8_in1k-pre_832x832_80k_cityscapes_20210925_230354-1cbe3022.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_in1k-pre_832x832_80k_cityscapes/icnet_r18-d8_in1k-pre_832x832_80k_cityscapes_20210925_230354.log.json) | +| ICNet (in1k-pre) | R-18-D8 | 832x832 | 160000 | - | - | V100 | 74.43 | 76.72 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/icnet/icnet_r18-d8-in1k-pre_4xb2-160k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_in1k-pre_832x832_160k_cityscapes/icnet_r18-d8_in1k-pre_832x832_160k_cityscapes_20210926_052702-619c8ae1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r18-d8_in1k-pre_832x832_160k_cityscapes/icnet_r18-d8_in1k-pre_832x832_160k_cityscapes_20210926_052702.log.json) | +| ICNet | R-50-D8 | 832x832 | 80000 | 2.53 | 20.08 | V100 | 68.91 | 69.72 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/icnet/icnet_r50-d8_4xb2-80k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_832x832_80k_cityscapes/icnet_r50-d8_832x832_80k_cityscapes_20210926_044625-c6407341.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_832x832_80k_cityscapes/icnet_r50-d8_832x832_80k_cityscapes_20210926_044625.log.json) | +| ICNet | R-50-D8 | 832x832 | 160000 | - | - | V100 | 73.82 | 75.67 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/icnet/icnet_r50-d8_4xb2-160k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_832x832_160k_cityscapes/icnet_r50-d8_832x832_160k_cityscapes_20210925_232612-a95f0d4e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_832x832_160k_cityscapes/icnet_r50-d8_832x832_160k_cityscapes_20210925_232612.log.json) | +| ICNet (in1k-pre) | R-50-D8 | 832x832 | 80000 | - | - | V100 | 74.58 | 76.41 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/icnet/icnet_r50-d8-in1k-pre_4xb2-80k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_in1k-pre_832x832_80k_cityscapes/icnet_r50-d8_in1k-pre_832x832_80k_cityscapes_20210926_032943-1743dc7b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_in1k-pre_832x832_80k_cityscapes/icnet_r50-d8_in1k-pre_832x832_80k_cityscapes_20210926_032943.log.json) | +| ICNet (in1k-pre) | R-50-D8 | 832x832 | 160000 | - | - | V100 | 76.29 | 78.09 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/icnet/icnet_r50-d8-in1k-pre_4xb2-160k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_in1k-pre_832x832_160k_cityscapes/icnet_r50-d8_in1k-pre_832x832_160k_cityscapes_20210926_042715-ce310aea.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r50-d8_in1k-pre_832x832_160k_cityscapes/icnet_r50-d8_in1k-pre_832x832_160k_cityscapes_20210926_042715.log.json) | +| ICNet | R-101-D8 | 832x832 | 80000 | 3.08 | 16.95 | V100 | 70.28 | 71.95 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/icnet/icnet_r101-d8_4xb2-80k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_832x832_80k_cityscapes/icnet_r101-d8_832x832_80k_cityscapes_20210926_072447-b52f936e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_832x832_80k_cityscapes/icnet_r101-d8_832x832_80k_cityscapes_20210926_072447.log.json) | +| ICNet | R-101-D8 | 832x832 | 160000 | - | - | V100 | 73.80 | 76.10 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/icnet/icnet_r101-d8_4xb2-160k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_832x832_160k_cityscapes/icnet_r101-d8_832x832_160k_cityscapes_20210926_092350-3a1ebf1a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_832x832_160k_cityscapes/icnet_r101-d8_832x832_160k_cityscapes_20210926_092350.log.json) | +| ICNet (in1k-pre) | R-101-D8 | 832x832 | 80000 | - | - | V100 | 75.57 | 77.86 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/icnet/icnet_r101-d8-in1k-pre_4xb2-80k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_in1k-pre_832x832_80k_cityscapes/icnet_r101-d8_in1k-pre_832x832_80k_cityscapes_20210926_020414-7ceb12c5.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_in1k-pre_832x832_80k_cityscapes/icnet_r101-d8_in1k-pre_832x832_80k_cityscapes_20210926_020414.log.json) | +| ICNet (in1k-pre) | R-101-D8 | 832x832 | 160000 | - | - | V100 | 76.15 | 77.98 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/icnet/icnet_r101-d8-in1k-pre_4xb2-160k_cityscapes-832x832.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_in1k-pre_832x832_160k_cityscapes/icnet_r101-d8_in1k-pre_832x832_160k_cityscapes_20210925_232612-9484ae8a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/icnet/icnet_r101-d8_in1k-pre_832x832_160k_cityscapes/icnet_r101-d8_in1k-pre_832x832_160k_cityscapes_20210925_232612.log.json) | Note: `in1k-pre` means pretrained model is used. diff --git a/configs/isanet/README.md b/configs/isanet/README.md index da9f0104c5..c11744ffef 100644 --- a/configs/isanet/README.md +++ b/configs/isanet/README.md @@ -26,34 +26,34 @@ In this paper, we present a so-called interlaced sparse self-attention approach ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------- | -------: | -------------- | ------ | ----- | ------------: | --------------------------------------------------------------------------------------------------------------------------------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| ISANet | R-50-D8 | 512x1024 | 40000 | 5.869 | 2.91 | V100 | 78.49 | 79.44 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x1024_40k_cityscapes/isanet_r50-d8_512x1024_40k_cityscapes_20210901_054739-981bd763.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x1024_40k_cityscapes/isanet_r50-d8_512x1024_40k_cityscapes_20210901_054739.log.json) | -| ISANet | R-50-D8 | 512x1024 | 80000 | 5.869 | 2.91 | V100 | 78.68 | 80.25 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x1024_80k_cityscapes/isanet_r50-d8_512x1024_80k_cityscapes_20210901_074202-89384497.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x1024_80k_cityscapes/isanet_r50-d8_512x1024_80k_cityscapes_20210901_074202.log.json) | -| ISANet | R-50-D8 | 769x769 | 40000 | 6.759 | 1.54 | V100 | 78.70 | 80.28 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_769x769_40k_cityscapes/isanet_r50-d8_769x769_40k_cityscapes_20210903_050200-4ae7e65b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_769x769_40k_cityscapes/isanet_r50-d8_769x769_40k_cityscapes_20210903_050200.log.json) | -| ISANet | R-50-D8 | 769x769 | 80000 | 6.759 | 1.54 | V100 | 79.29 | 80.53 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_769x769_80k_cityscapes/isanet_r50-d8_769x769_80k_cityscapes_20210903_101126-99b54519.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_769x769_80k_cityscapes/isanet_r50-d8_769x769_80k_cityscapes_20210903_101126.log.json) | -| ISANet | R-101-D8 | 512x1024 | 40000 | 9.425 | 2.35 | V100 | 79.58 | 81.05 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x1024_40k_cityscapes/isanet_r101-d8_512x1024_40k_cityscapes_20210901_145553-293e6bd6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x1024_40k_cityscapes/isanet_r101-d8_512x1024_40k_cityscapes_20210901_145553.log.json) | -| ISANet | R-101-D8 | 512x1024 | 80000 | 9.425 | 2.35 | V100 | 80.32 | 81.58 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x1024_80k_cityscapes/isanet_r101-d8_512x1024_80k_cityscapes_20210901_145243-5b99c9b2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x1024_80k_cityscapes/isanet_r101-d8_512x1024_80k_cityscapes_20210901_145243.log.json) | -| ISANet | R-101-D8 | 769x769 | 40000 | 10.815 | 0.92 | V100 | 79.68 | 80.95 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_769x769_40k_cityscapes/isanet_r101-d8_769x769_40k_cityscapes_20210903_111320-509e7224.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_769x769_40k_cityscapes/isanet_r101-d8_769x769_40k_cityscapes_20210903_111320.log.json) | -| ISANet | R-101-D8 | 769x769 | 80000 | 10.815 | 0.92 | V100 | 80.61 | 81.59 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_769x769_80k_cityscapes/isanet_r101-d8_769x769_80k_cityscapes_20210903_111319-24f71dfa.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_769x769_80k_cityscapes/isanet_r101-d8_769x769_80k_cityscapes_20210903_111319.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------- | -------: | -------------- | ------ | ----- | ------------: | -----------------------------------------------------------------------------------------------------------------------------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| ISANet | R-50-D8 | 512x1024 | 40000 | 5.869 | 2.91 | V100 | 78.49 | 79.44 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/isanet/isanet_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x1024_40k_cityscapes/isanet_r50-d8_512x1024_40k_cityscapes_20210901_054739-981bd763.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x1024_40k_cityscapes/isanet_r50-d8_512x1024_40k_cityscapes_20210901_054739.log.json) | +| ISANet | R-50-D8 | 512x1024 | 80000 | 5.869 | 2.91 | V100 | 78.68 | 80.25 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/isanet/isanet_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x1024_80k_cityscapes/isanet_r50-d8_512x1024_80k_cityscapes_20210901_074202-89384497.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x1024_80k_cityscapes/isanet_r50-d8_512x1024_80k_cityscapes_20210901_074202.log.json) | +| ISANet | R-50-D8 | 769x769 | 40000 | 6.759 | 1.54 | V100 | 78.70 | 80.28 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/isanet/isanet_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_769x769_40k_cityscapes/isanet_r50-d8_769x769_40k_cityscapes_20210903_050200-4ae7e65b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_769x769_40k_cityscapes/isanet_r50-d8_769x769_40k_cityscapes_20210903_050200.log.json) | +| ISANet | R-50-D8 | 769x769 | 80000 | 6.759 | 1.54 | V100 | 79.29 | 80.53 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/isanet/isanet_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_769x769_80k_cityscapes/isanet_r50-d8_769x769_80k_cityscapes_20210903_101126-99b54519.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_769x769_80k_cityscapes/isanet_r50-d8_769x769_80k_cityscapes_20210903_101126.log.json) | +| ISANet | R-101-D8 | 512x1024 | 40000 | 9.425 | 2.35 | V100 | 79.58 | 81.05 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/isanet/isanet_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x1024_40k_cityscapes/isanet_r101-d8_512x1024_40k_cityscapes_20210901_145553-293e6bd6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x1024_40k_cityscapes/isanet_r101-d8_512x1024_40k_cityscapes_20210901_145553.log.json) | +| ISANet | R-101-D8 | 512x1024 | 80000 | 9.425 | 2.35 | V100 | 80.32 | 81.58 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/isanet/isanet_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x1024_80k_cityscapes/isanet_r101-d8_512x1024_80k_cityscapes_20210901_145243-5b99c9b2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x1024_80k_cityscapes/isanet_r101-d8_512x1024_80k_cityscapes_20210901_145243.log.json) | +| ISANet | R-101-D8 | 769x769 | 40000 | 10.815 | 0.92 | V100 | 79.68 | 80.95 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/isanet/isanet_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_769x769_40k_cityscapes/isanet_r101-d8_769x769_40k_cityscapes_20210903_111320-509e7224.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_769x769_40k_cityscapes/isanet_r101-d8_769x769_40k_cityscapes_20210903_111320.log.json) | +| ISANet | R-101-D8 | 769x769 | 80000 | 10.815 | 0.92 | V100 | 80.61 | 81.59 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/isanet/isanet_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_769x769_80k_cityscapes/isanet_r101-d8_769x769_80k_cityscapes_20210903_111319-24f71dfa.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_769x769_80k_cityscapes/isanet_r101-d8_769x769_80k_cityscapes_20210903_111319.log.json) | ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------- | -------: | -------------- | ------ | ----- | ------------: | ----------------------------------------------------------------------------------------------------------------------------: | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| ISANet | R-50-D8 | 512x512 | 80000 | 9.0 | 22.55 | V100 | 41.12 | 42.35 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_80k_ade20k/isanet_r50-d8_512x512_80k_ade20k_20210903_124557-6ed83a0c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_80k_ade20k/isanet_r50-d8_512x512_80k_ade20k_20210903_124557.log.json) | -| ISANet | R-50-D8 | 512x512 | 160000 | 9.0 | 22.55 | V100 | 42.59 | 43.07 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_160k_ade20k/isanet_r50-d8_512x512_160k_ade20k_20210903_104850-f752d0a3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_160k_ade20k/isanet_r50-d8_512x512_160k_ade20k_20210903_104850.log.json) | -| ISANet | R-101-D8 | 512x512 | 80000 | 12.562 | 10.56 | V100 | 43.51 | 44.38 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_80k_ade20k/isanet_r101-d8_512x512_80k_ade20k_20210903_162056-68b235c2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_80k_ade20k/isanet_r101-d8_512x512_80k_ade20k_20210903_162056.log.json) | -| ISANet | R-101-D8 | 512x512 | 160000 | 12.562 | 10.56 | V100 | 43.80 | 45.4 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_160k_ade20k/isanet_r101-d8_512x512_160k_ade20k_20210903_211431-a7879dcd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_160k_ade20k/isanet_r101-d8_512x512_160k_ade20k_20210903_211431.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------- | -------: | -------------- | ------ | ----- | ------------: | -------------------------------------------------------------------------------------------------------------------------: | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| ISANet | R-50-D8 | 512x512 | 80000 | 9.0 | 22.55 | V100 | 41.12 | 42.35 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/isanet/isanet_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_80k_ade20k/isanet_r50-d8_512x512_80k_ade20k_20210903_124557-6ed83a0c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_80k_ade20k/isanet_r50-d8_512x512_80k_ade20k_20210903_124557.log.json) | +| ISANet | R-50-D8 | 512x512 | 160000 | 9.0 | 22.55 | V100 | 42.59 | 43.07 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/isanet/isanet_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_160k_ade20k/isanet_r50-d8_512x512_160k_ade20k_20210903_104850-f752d0a3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_160k_ade20k/isanet_r50-d8_512x512_160k_ade20k_20210903_104850.log.json) | +| ISANet | R-101-D8 | 512x512 | 80000 | 12.562 | 10.56 | V100 | 43.51 | 44.38 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/isanet/isanet_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_80k_ade20k/isanet_r101-d8_512x512_80k_ade20k_20210903_162056-68b235c2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_80k_ade20k/isanet_r101-d8_512x512_80k_ade20k_20210903_162056.log.json) | +| ISANet | R-101-D8 | 512x512 | 160000 | 12.562 | 10.56 | V100 | 43.80 | 45.4 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/isanet/isanet_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_160k_ade20k/isanet_r101-d8_512x512_160k_ade20k_20210903_211431-a7879dcd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_160k_ade20k/isanet_r101-d8_512x512_160k_ade20k_20210903_211431.log.json) | ### Pascal VOC 2012 + Aug -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------- | -------: | -------------- | ------ | ----- | ------------: | -----------------------------------------------------------------------------------------------------------------------------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| ISANet | R-50-D8 | 512x512 | 20000 | 5.9 | 23.08 | V100 | 76.78 | 77.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_20k_voc12aug/isanet_r50-d8_512x512_20k_voc12aug_20210901_164838-79d59b80.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_20k_voc12aug/isanet_r50-d8_512x512_20k_voc12aug_20210901_164838.log.json) | -| ISANet | R-50-D8 | 512x512 | 40000 | 5.9 | 23.08 | V100 | 76.20 | 77.22 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_40k_voc12aug/isanet_r50-d8_512x512_40k_voc12aug_20210901_151349-7d08a54e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_40k_voc12aug/isanet_r50-d8_512x512_40k_voc12aug_20210901_151349.log.json) | -| ISANet | R-101-D8 | 512x512 | 20000 | 9.465 | 7.42 | V100 | 78.46 | 79.16 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_20k_voc12aug/isanet_r101-d8_512x512_20k_voc12aug_20210901_115805-3ccbf355.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_20k_voc12aug/isanet_r101-d8_512x512_20k_voc12aug_20210901_115805.log.json) | -| ISANet | R-101-D8 | 512x512 | 40000 | 9.465 | 7.42 | V100 | 78.12 | 79.04 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/isanet/isanet_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_40k_voc12aug/isanet_r101-d8_512x512_40k_voc12aug_20210901_145814-bc71233b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_40k_voc12aug/isanet_r101-d8_512x512_40k_voc12aug_20210901_145814.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------- | -------: | -------------- | ------ | ----- | ------------: | --------------------------------------------------------------------------------------------------------------------------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| ISANet | R-50-D8 | 512x512 | 20000 | 5.9 | 23.08 | V100 | 76.78 | 77.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/isanet/isanet_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_20k_voc12aug/isanet_r50-d8_512x512_20k_voc12aug_20210901_164838-79d59b80.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_20k_voc12aug/isanet_r50-d8_512x512_20k_voc12aug_20210901_164838.log.json) | +| ISANet | R-50-D8 | 512x512 | 40000 | 5.9 | 23.08 | V100 | 76.20 | 77.22 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/isanet/isanet_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_40k_voc12aug/isanet_r50-d8_512x512_40k_voc12aug_20210901_151349-7d08a54e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r50-d8_512x512_40k_voc12aug/isanet_r50-d8_512x512_40k_voc12aug_20210901_151349.log.json) | +| ISANet | R-101-D8 | 512x512 | 20000 | 9.465 | 7.42 | V100 | 78.46 | 79.16 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/isanet/isanet_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_20k_voc12aug/isanet_r101-d8_512x512_20k_voc12aug_20210901_115805-3ccbf355.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_20k_voc12aug/isanet_r101-d8_512x512_20k_voc12aug_20210901_115805.log.json) | +| ISANet | R-101-D8 | 512x512 | 40000 | 9.465 | 7.42 | V100 | 78.12 | 79.04 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/isanet/isanet_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_40k_voc12aug/isanet_r101-d8_512x512_40k_voc12aug_20210901_145814-bc71233b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/isanet/isanet_r101-d8_512x512_40k_voc12aug/isanet_r101-d8_512x512_40k_voc12aug_20210901_145814.log.json) | ## Citation diff --git a/configs/knet/README.md b/configs/knet/README.md index 070c7256da..1f3f2ae268 100644 --- a/configs/knet/README.md +++ b/configs/knet/README.md @@ -26,15 +26,15 @@ Semantic, instance, and panoptic segmentations have been addressed using differe ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ---------------- | -------- | --------- | ------- | -------- | -------------- | ------ | ----- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| KNet + FCN | R-50-D8 | 512x512 | 80000 | 7.01 | 19.24 | V100 | 43.60 | 45.12 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/knet/knet-s3_r50-d8_fcn_8xb2-adamw-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_fcn_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_fcn_r50-d8_8x2_512x512_adamw_80k_ade20k_20220228_043751-abcab920.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_fcn_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_fcn_r50-d8_8x2_512x512_adamw_80k_ade20k_20220228_043751.log.json) | -| KNet + PSPNet | R-50-D8 | 512x512 | 80000 | 6.98 | 20.04 | V100 | 44.18 | 45.58 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/knet/knet-s3_r50-d8_pspnet_8xb2-adamw-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_pspnet_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_pspnet_r50-d8_8x2_512x512_adamw_80k_ade20k_20220228_054634-d2c72240.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_pspnet_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_pspnet_r50-d8_8x2_512x512_adamw_80k_ade20k_20220228_054634.log.json) | -| KNet + DeepLabV3 | R-50-D8 | 512x512 | 80000 | 7.42 | 12.10 | V100 | 45.06 | 46.11 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/knet/knet-s3_r50-d8_deeplabv3_8xb2-adamw-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_deeplabv3_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_deeplabv3_r50-d8_8x2_512x512_adamw_80k_ade20k_20220228_041642-00c8fbeb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_deeplabv3_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_deeplabv3_r50-d8_8x2_512x512_adamw_80k_ade20k_20220228_041642.log.json) | -| KNet + UperNet | R-50-D8 | 512x512 | 80000 | 7.34 | 17.11 | V100 | 43.45 | 44.07 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/knet/knet-s3_r50-d8_upernet_8xb2-adamw-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_upernet_r50-d8_8x2_512x512_adamw_80k_ade20k_20220304_125657-215753b0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_upernet_r50-d8_8x2_512x512_adamw_80k_ade20k_20220304_125657.log.json) | -| KNet + UperNet | Swin-T | 512x512 | 80000 | 7.57 | 15.56 | V100 | 45.84 | 46.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/knet/knet-s3_swin-t_upernet_8xb2-adamw-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_swin-t_8x2_512x512_adamw_80k_ade20k/knet_s3_upernet_swin-t_8x2_512x512_adamw_80k_ade20k_20220303_133059-7545e1dc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_swin-t_8x2_512x512_adamw_80k_ade20k/knet_s3_upernet_swin-t_8x2_512x512_adamw_80k_ade20k_20220303_133059.log.json) | -| KNet + UperNet | Swin-L | 512x512 | 80000 | 13.5 | 8.29 | V100 | 52.05 | 53.24 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/knet/knet-s3_swin-l_upernet_8xb2-adamw-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_swin-l_8x2_512x512_adamw_80k_ade20k/knet_s3_upernet_swin-l_8x2_512x512_adamw_80k_ade20k_20220303_154559-d8da9a90.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_swin-l_8x2_512x512_adamw_80k_ade20k/knet_s3_upernet_swin-l_8x2_512x512_adamw_80k_ade20k_20220303_154559.log.json) | -| KNet + UperNet | Swin-L | 640x640 | 80000 | 13.54 | 8.29 | V100 | 52.21 | 53.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/knet/knet-s3_swin-l_upernet_8xb2-adamw-80k_ade20k-640x640.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_swin-l_8x2_640x640_adamw_80k_ade20k/knet_s3_upernet_swin-l_8x2_640x640_adamw_80k_ade20k_20220301_220747-8787fc71.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_swin-l_8x2_640x640_adamw_80k_ade20k/knet_s3_upernet_swin-l_8x2_640x640_adamw_80k_ade20k_20220301_220747.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------------- | -------- | --------- | ------- | -------- | -------------- | ------ | ----- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| KNet + FCN | R-50-D8 | 512x512 | 80000 | 7.01 | 19.24 | V100 | 43.60 | 45.12 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/knet/knet-s3_r50-d8_fcn_8xb2-adamw-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_fcn_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_fcn_r50-d8_8x2_512x512_adamw_80k_ade20k_20220228_043751-abcab920.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_fcn_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_fcn_r50-d8_8x2_512x512_adamw_80k_ade20k_20220228_043751.log.json) | +| KNet + PSPNet | R-50-D8 | 512x512 | 80000 | 6.98 | 20.04 | V100 | 44.18 | 45.58 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/knet/knet-s3_r50-d8_pspnet_8xb2-adamw-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_pspnet_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_pspnet_r50-d8_8x2_512x512_adamw_80k_ade20k_20220228_054634-d2c72240.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_pspnet_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_pspnet_r50-d8_8x2_512x512_adamw_80k_ade20k_20220228_054634.log.json) | +| KNet + DeepLabV3 | R-50-D8 | 512x512 | 80000 | 7.42 | 12.10 | V100 | 45.06 | 46.11 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/knet/knet-s3_r50-d8_deeplabv3_8xb2-adamw-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_deeplabv3_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_deeplabv3_r50-d8_8x2_512x512_adamw_80k_ade20k_20220228_041642-00c8fbeb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_deeplabv3_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_deeplabv3_r50-d8_8x2_512x512_adamw_80k_ade20k_20220228_041642.log.json) | +| KNet + UperNet | R-50-D8 | 512x512 | 80000 | 7.34 | 17.11 | V100 | 43.45 | 44.07 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/knet/knet-s3_r50-d8_upernet_8xb2-adamw-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_upernet_r50-d8_8x2_512x512_adamw_80k_ade20k_20220304_125657-215753b0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_r50-d8_8x2_512x512_adamw_80k_ade20k/knet_s3_upernet_r50-d8_8x2_512x512_adamw_80k_ade20k_20220304_125657.log.json) | +| KNet + UperNet | Swin-T | 512x512 | 80000 | 7.57 | 15.56 | V100 | 45.84 | 46.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/knet/knet-s3_swin-t_upernet_8xb2-adamw-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_swin-t_8x2_512x512_adamw_80k_ade20k/knet_s3_upernet_swin-t_8x2_512x512_adamw_80k_ade20k_20220303_133059-7545e1dc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_swin-t_8x2_512x512_adamw_80k_ade20k/knet_s3_upernet_swin-t_8x2_512x512_adamw_80k_ade20k_20220303_133059.log.json) | +| KNet + UperNet | Swin-L | 512x512 | 80000 | 13.5 | 8.29 | V100 | 52.05 | 53.24 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/knet/knet-s3_swin-l_upernet_8xb2-adamw-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_swin-l_8x2_512x512_adamw_80k_ade20k/knet_s3_upernet_swin-l_8x2_512x512_adamw_80k_ade20k_20220303_154559-d8da9a90.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_swin-l_8x2_512x512_adamw_80k_ade20k/knet_s3_upernet_swin-l_8x2_512x512_adamw_80k_ade20k_20220303_154559.log.json) | +| KNet + UperNet | Swin-L | 640x640 | 80000 | 13.54 | 8.29 | V100 | 52.21 | 53.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/knet/knet-s3_swin-l_upernet_8xb2-adamw-80k_ade20k-640x640.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_swin-l_8x2_640x640_adamw_80k_ade20k/knet_s3_upernet_swin-l_8x2_640x640_adamw_80k_ade20k_20220301_220747-8787fc71.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/knet/knet_s3_upernet_swin-l_8x2_640x640_adamw_80k_ade20k/knet_s3_upernet_swin-l_8x2_640x640_adamw_80k_ade20k_20220301_220747.log.json) | Note: diff --git a/configs/mae/README.md b/configs/mae/README.md index 94ade08823..d14e3830be 100644 --- a/configs/mae/README.md +++ b/configs/mae/README.md @@ -66,9 +66,9 @@ upernet_mae-base_fp16_8x2_512x512_160k_ade20k_20220426_174752-f92a2975.pth $GPUS ### ADE20K -| Method | Backbone | Crop Size | pretrain | pretrain img size | Batch Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------- | -------- | --------- | ----------- | ----------------- | ---------- | ------- | -------- | -------------- | ------ | ----- | ------------: | -------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| UPerNet | ViT-B | 512x512 | ImageNet-1K | 224x224 | 16 | 160000 | 9.96 | 7.14 | V100 | 48.13 | 48.70 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mae/mae-base_upernet_8xb2-amp-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mae/upernet_mae-base_fp16_8x2_512x512_160k_ade20k/upernet_mae-base_fp16_8x2_512x512_160k_ade20k_20220426_174752-f92a2975.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mae/upernet_mae-base_fp16_8x2_512x512_160k_ade20k/upernet_mae-base_fp16_8x2_512x512_160k_ade20k_20220426_174752.log.json) | +| Method | Backbone | Crop Size | pretrain | pretrain img size | Batch Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------- | -------- | --------- | ----------- | ----------------- | ---------- | ------- | -------- | -------------- | ------ | ----- | ------------: | ----------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| UPerNet | ViT-B | 512x512 | ImageNet-1K | 224x224 | 16 | 160000 | 9.96 | 7.14 | V100 | 48.13 | 48.70 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/mae/mae-base_upernet_8xb2-amp-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mae/upernet_mae-base_fp16_8x2_512x512_160k_ade20k/upernet_mae-base_fp16_8x2_512x512_160k_ade20k_20220426_174752-f92a2975.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mae/upernet_mae-base_fp16_8x2_512x512_160k_ade20k/upernet_mae-base_fp16_8x2_512x512_160k_ade20k_20220426_174752.log.json) | ## Citation diff --git a/configs/mask2former/README.md b/configs/mask2former/README.md index 02639bef58..c21ab0d0c6 100644 --- a/configs/mask2former/README.md +++ b/configs/mask2former/README.md @@ -28,26 +28,26 @@ pip install "mmdet>=3.0.0rc4" ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ----------- | -------------- | --------- | ------- | -------: | -------------- | ------ | ----- | ------------: | -----------------------------------------------------------------------------------------------------------------------------------------------------------: | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Mask2Former | R-50-D32 | 512x1024 | 90000 | 5.67 | 9.17 | A100 | 80.44 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_r50_8xb2-90k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r50_8xb2-90k_cityscapes-512x1024/mask2former_r50_8xb2-90k_cityscapes-512x1024_20221202_140802-ffd9d750.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r50_8xb2-90k_cityscapes-512x1024/mask2former_r50_8xb2-90k_cityscapes-512x1024_20221202_140802.json) | -| Mask2Former | R-101-D32 | 512x1024 | 90000 | 6.81 | 7.11 | A100 | 80.80 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_r101_8xb2-90k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r101_8xb2-90k_cityscapes-512x1024/mask2former_r101_8xb2-90k_cityscapes-512x1024_20221130_031628-43e68666.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r101_8xb2-90k_cityscapes-512x1024/mask2former_r101_8xb2-90k_cityscapes-512x1024_20221130_031628.json)) | -| Mask2Former | Swin-T | 512x1024 | 90000 | 6.36 | 7.18 | A100 | 81.71 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_swin-t_8xb2-90k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-t_8xb2-90k_cityscapes-512x1024/mask2former_swin-t_8xb2-90k_cityscapes-512x1024_20221127_144501-36c59341.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-t_8xb2-90k_cityscapes-512x1024/mask2former_swin-t_8xb2-90k_cityscapes-512x1024_20221127_144501.json)) | -| Mask2Former | Swin-S | 512x1024 | 90000 | 8.09 | 5.57 | A100 | 82.57 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_swin-s_8xb2-90k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-s_8xb2-90k_cityscapes-512x1024/mask2former_swin-s_8xb2-90k_cityscapes-512x1024_20221127_143802-9ab177f6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-s_8xb2-90k_cityscapes-512x1024/mask2former_swin-s_8xb2-90k_cityscapes-512x1024_20221127_143802.json)) | -| Mask2Former | Swin-B (in22k) | 512x1024 | 90000 | 10.89 | 4.32 | A100 | 83.52 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_swin-b-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-b-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024/mask2former_swin-b-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024_20221203_045030-9a86a225.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-b-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024/mask2former_swin-b-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024_20221203_045030.json)) | -| Mask2Former | Swin-L (in22k) | 512x1024 | 90000 | 15.83 | 2.86 | A100 | 83.65 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_swin-l-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-l-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024/mask2former_swin-l-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024_20221202_141901-28ad20f1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-l-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024/mask2former_swin-l-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024_20221202_141901.json)) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ----------- | -------------- | --------- | ------- | -------: | -------------- | ------ | ----- | ------------: | --------------------------------------------------------------------------------------------------------------------------------------------------------: | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Mask2Former | R-50-D32 | 512x1024 | 90000 | 5.67 | 9.17 | A100 | 80.44 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/mask2former/mask2former_r50_8xb2-90k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r50_8xb2-90k_cityscapes-512x1024/mask2former_r50_8xb2-90k_cityscapes-512x1024_20221202_140802-ffd9d750.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r50_8xb2-90k_cityscapes-512x1024/mask2former_r50_8xb2-90k_cityscapes-512x1024_20221202_140802.json) | +| Mask2Former | R-101-D32 | 512x1024 | 90000 | 6.81 | 7.11 | A100 | 80.80 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/mask2former/mask2former_r101_8xb2-90k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r101_8xb2-90k_cityscapes-512x1024/mask2former_r101_8xb2-90k_cityscapes-512x1024_20221130_031628-43e68666.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r101_8xb2-90k_cityscapes-512x1024/mask2former_r101_8xb2-90k_cityscapes-512x1024_20221130_031628.json)) | +| Mask2Former | Swin-T | 512x1024 | 90000 | 6.36 | 7.18 | A100 | 81.71 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/mask2former/mask2former_swin-t_8xb2-90k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-t_8xb2-90k_cityscapes-512x1024/mask2former_swin-t_8xb2-90k_cityscapes-512x1024_20221127_144501-36c59341.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-t_8xb2-90k_cityscapes-512x1024/mask2former_swin-t_8xb2-90k_cityscapes-512x1024_20221127_144501.json)) | +| Mask2Former | Swin-S | 512x1024 | 90000 | 8.09 | 5.57 | A100 | 82.57 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/mask2former/mask2former_swin-s_8xb2-90k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-s_8xb2-90k_cityscapes-512x1024/mask2former_swin-s_8xb2-90k_cityscapes-512x1024_20221127_143802-9ab177f6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-s_8xb2-90k_cityscapes-512x1024/mask2former_swin-s_8xb2-90k_cityscapes-512x1024_20221127_143802.json)) | +| Mask2Former | Swin-B (in22k) | 512x1024 | 90000 | 10.89 | 4.32 | A100 | 83.52 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/mask2former/mask2former_swin-b-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-b-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024/mask2former_swin-b-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024_20221203_045030-9a86a225.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-b-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024/mask2former_swin-b-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024_20221203_045030.json)) | +| Mask2Former | Swin-L (in22k) | 512x1024 | 90000 | 15.83 | 2.86 | A100 | 83.65 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/mask2former/mask2former_swin-l-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-l-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024/mask2former_swin-l-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024_20221202_141901-28ad20f1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-l-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024/mask2former_swin-l-in22k-384x384-pre_8xb2-90k_cityscapes-512x1024_20221202_141901.json)) | ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ----------- | -------------- | --------- | ------- | -------: | -------------- | ------ | ----- | ------------: | -------------------------------------------------------------------------------------------------------------------------------------------------------: | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Mask2Former | R-50-D32 | 512x512 | 160000 | 3.31 | 26.59 | A100 | 47.87 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_r50_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r50_8xb2-160k_ade20k-512x512/mask2former_r50_8xb2-160k_ade20k-512x512_20221204_000055-2d1f55f1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r50_8xb2-160k_ade20k-512x512/mask2former_r50_8xb2-160k_ade20k-512x512_20221204_000055.json)) | -| Mask2Former | R-101-D32 | 512x512 | 160000 | 4.09 | 22.97 | A100 | 48.60 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_r101_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r101_8xb2-160k_ade20k-512x512/mask2former_r101_8xb2-160k_ade20k-512x512_20221203_233905-b7135890.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r101_8xb2-160k_ade20k-512x512/mask2former_r101_8xb2-160k_ade20k-512x512_20221203_233905.json)) | -| Mask2Former | Swin-T | 512x512 | 160000 | 3826 | 23.82 | A100 | 48.66 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_swin-t_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-t_8xb2-160k_ade20k-512x512/mask2former_swin-t_8xb2-160k_ade20k-512x512_20221203_234230-7d64e5dd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-t_8xb2-160k_ade20k-512x512/mask2former_swin-t_8xb2-160k_ade20k-512x512_20221203_234230.json)) | -| Mask2Former | Swin-S | 512x512 | 160000 | 3.74 | 19.69 | A100 | 51.24 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_swin-s_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-s_8xb2-160k_ade20k-512x512/mask2former_swin-s_8xb2-160k_ade20k-512x512_20221204_143905-e715144e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-s_8xb2-160k_ade20k-512x512/mask2former_swin-s_8xb2-160k_ade20k-512x512_20221204_143905.json)) | -| Mask2Former | Swin-B | 640x640 | 160000 | 5.66 | 12.48 | A100 | 52.44 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_swin-b-in1k-384x384-pre_8xb2-160k_ade20k-640x640.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-b-in1k-384x384-pre_8xb2-160k_ade20k-640x640/mask2former_swin-b-in1k-384x384-pre_8xb2-160k_ade20k-640x640_20221129_125118-a4a086d2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-b-in1k-384x384-pre_8xb2-160k_ade20k-640x640/mask2former_swin-b-in1k-384x384-pre_8xb2-160k_ade20k-640x640_20221129_125118.json)) | -| Mask2Former | Swin-B (in22k) | 640x640 | 160000 | 5.66 | 12.43 | A100 | 53.90 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_swin-b-in22k-384x384-pre_8xb2-160k_ade20k-640x640.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-b-in22k-384x384-pre_8xb2-160k_ade20k-640x640/mask2former_swin-b-in22k-384x384-pre_8xb2-160k_ade20k-640x640_20221203_235230-7ec0f569.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-b-in22k-384x384-pre_8xb2-160k_ade20k-640x640/mask2former_swin-b-in22k-384x384-pre_8xb2-160k_ade20k-640x640_20221203_235230.json)) | -| Mask2Former | Swin-L (in22k) | 640x640 | 160000 | 8.86 | 8.81 | A100 | 56.01 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mask2former/mask2former_swin-l-in22k-384x384-pre_8xb2-160k_ade20k-640x640.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-l-in22k-384x384-pre_8xb2-160k_ade20k-640x640/mask2former_swin-l-in22k-384x384-pre_8xb2-160k_ade20k-640x640_20221203_235933-7120c214.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-l-in22k-384x384-pre_8xb2-160k_ade20k-640x640/mask2former_swin-l-in22k-384x384-pre_8xb2-160k_ade20k-640x640_20221203_235933.json)) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ----------- | -------------- | --------- | ------- | -------: | -------------- | ------ | ----- | ------------: | ----------------------------------------------------------------------------------------------------------------------------------------------------: | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Mask2Former | R-50-D32 | 512x512 | 160000 | 3.31 | 26.59 | A100 | 47.87 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/mask2former/mask2former_r50_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r50_8xb2-160k_ade20k-512x512/mask2former_r50_8xb2-160k_ade20k-512x512_20221204_000055-2d1f55f1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r50_8xb2-160k_ade20k-512x512/mask2former_r50_8xb2-160k_ade20k-512x512_20221204_000055.json)) | +| Mask2Former | R-101-D32 | 512x512 | 160000 | 4.09 | 22.97 | A100 | 48.60 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/mask2former/mask2former_r101_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r101_8xb2-160k_ade20k-512x512/mask2former_r101_8xb2-160k_ade20k-512x512_20221203_233905-b7135890.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_r101_8xb2-160k_ade20k-512x512/mask2former_r101_8xb2-160k_ade20k-512x512_20221203_233905.json)) | +| Mask2Former | Swin-T | 512x512 | 160000 | 3826 | 23.82 | A100 | 48.66 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/mask2former/mask2former_swin-t_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-t_8xb2-160k_ade20k-512x512/mask2former_swin-t_8xb2-160k_ade20k-512x512_20221203_234230-7d64e5dd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-t_8xb2-160k_ade20k-512x512/mask2former_swin-t_8xb2-160k_ade20k-512x512_20221203_234230.json)) | +| Mask2Former | Swin-S | 512x512 | 160000 | 3.74 | 19.69 | A100 | 51.24 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/mask2former/mask2former_swin-s_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-s_8xb2-160k_ade20k-512x512/mask2former_swin-s_8xb2-160k_ade20k-512x512_20221204_143905-e715144e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-s_8xb2-160k_ade20k-512x512/mask2former_swin-s_8xb2-160k_ade20k-512x512_20221204_143905.json)) | +| Mask2Former | Swin-B | 640x640 | 160000 | 5.66 | 12.48 | A100 | 52.44 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/mask2former/mask2former_swin-b-in1k-384x384-pre_8xb2-160k_ade20k-640x640.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-b-in1k-384x384-pre_8xb2-160k_ade20k-640x640/mask2former_swin-b-in1k-384x384-pre_8xb2-160k_ade20k-640x640_20221129_125118-a4a086d2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-b-in1k-384x384-pre_8xb2-160k_ade20k-640x640/mask2former_swin-b-in1k-384x384-pre_8xb2-160k_ade20k-640x640_20221129_125118.json)) | +| Mask2Former | Swin-B (in22k) | 640x640 | 160000 | 5.66 | 12.43 | A100 | 53.90 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/mask2former/mask2former_swin-b-in22k-384x384-pre_8xb2-160k_ade20k-640x640.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-b-in22k-384x384-pre_8xb2-160k_ade20k-640x640/mask2former_swin-b-in22k-384x384-pre_8xb2-160k_ade20k-640x640_20221203_235230-7ec0f569.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-b-in22k-384x384-pre_8xb2-160k_ade20k-640x640/mask2former_swin-b-in22k-384x384-pre_8xb2-160k_ade20k-640x640_20221203_235230.json)) | +| Mask2Former | Swin-L (in22k) | 640x640 | 160000 | 8.86 | 8.81 | A100 | 56.01 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/mask2former/mask2former_swin-l-in22k-384x384-pre_8xb2-160k_ade20k-640x640.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-l-in22k-384x384-pre_8xb2-160k_ade20k-640x640/mask2former_swin-l-in22k-384x384-pre_8xb2-160k_ade20k-640x640_20221203_235933-7120c214.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mask2former/mask2former_swin-l-in22k-384x384-pre_8xb2-160k_ade20k-640x640/mask2former_swin-l-in22k-384x384-pre_8xb2-160k_ade20k-640x640_20221203_235933.json)) | Note: diff --git a/configs/maskformer/README.md b/configs/maskformer/README.md index aa54a27088..a899bac090 100644 --- a/configs/maskformer/README.md +++ b/configs/maskformer/README.md @@ -34,12 +34,12 @@ pip install "mmdet>=3.0.0rc4" ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ---------- | --------- | --------- | ------- | -------- | -------------- | ------ | ----- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| MaskFormer | R-50-D32 | 512x512 | 160000 | 3.29 | A100 | 42.20 | 44.29 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/maskformer/maskformer_r50-d32_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_r50-d32_8xb2-160k_ade20k-512x512/maskformer_r50-d32_8xb2-160k_ade20k-512x512_20221030_182724-3a9cfe45.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_r50-d32_8xb2-160k_ade20k-512x512/maskformer_r50-d32_8xb2-160k_ade20k-512x512_20221030_182724.json) | -| MaskFormer | R-101-D32 | 512x512 | 160000 | 4.12 | A100 | 34.90 | 45.11 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/maskformer/maskformer_r101-d32_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_r101-d32_8xb2-160k_ade20k-512x512/maskformer_r101-d32_8xb2-160k_ade20k-512x512_20221031_223053-84adbfcb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_r101-d32_8xb2-160k_ade20k-512x512/maskformer_r101-d32_8xb2-160k_ade20k-512x512_20221031_223053.json) | -| MaskFormer | Swin-T | 512x512 | 160000 | 3.73 | A100 | 40.53 | 46.69 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/maskformer/maskformer_swin-t_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_swin-t_upernet_8xb2-160k_ade20k-512x512/maskformer_swin-t_upernet_8xb2-160k_ade20k-512x512_20221114_232813-f14e7ce0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_swin-t_upernet_8xb2-160k_ade20k-512x512/maskformer_swin-t_upernet_8xb2-160k_ade20k-512x512_20221114_232813.json) | -| MaskFormer | Swin-S | 512x512 | 160000 | 5.33 | A100 | 26.98 | 49.36 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/maskformer/maskformer_swin-s_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_swin-s_upernet_8xb2-160k_ade20k-512x512/maskformer_swin-s_upernet_8xb2-160k_ade20k-512x512_20221115_114710-723512c7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_swin-s_upernet_8xb2-160k_ade20k-512x512/maskformer_swin-s_upernet_8xb2-160k_ade20k-512x512_20221115_114710.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------- | --------- | --------- | ------- | -------- | -------------- | ------ | ----- | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| MaskFormer | R-50-D32 | 512x512 | 160000 | 3.29 | A100 | 42.20 | 44.29 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/maskformer/maskformer_r50-d32_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_r50-d32_8xb2-160k_ade20k-512x512/maskformer_r50-d32_8xb2-160k_ade20k-512x512_20221030_182724-3a9cfe45.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_r50-d32_8xb2-160k_ade20k-512x512/maskformer_r50-d32_8xb2-160k_ade20k-512x512_20221030_182724.json) | +| MaskFormer | R-101-D32 | 512x512 | 160000 | 4.12 | A100 | 34.90 | 45.11 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/maskformer/maskformer_r101-d32_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_r101-d32_8xb2-160k_ade20k-512x512/maskformer_r101-d32_8xb2-160k_ade20k-512x512_20221031_223053-84adbfcb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_r101-d32_8xb2-160k_ade20k-512x512/maskformer_r101-d32_8xb2-160k_ade20k-512x512_20221031_223053.json) | +| MaskFormer | Swin-T | 512x512 | 160000 | 3.73 | A100 | 40.53 | 46.69 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/maskformer/maskformer_swin-t_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_swin-t_upernet_8xb2-160k_ade20k-512x512/maskformer_swin-t_upernet_8xb2-160k_ade20k-512x512_20221114_232813-f14e7ce0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_swin-t_upernet_8xb2-160k_ade20k-512x512/maskformer_swin-t_upernet_8xb2-160k_ade20k-512x512_20221114_232813.json) | +| MaskFormer | Swin-S | 512x512 | 160000 | 5.33 | A100 | 26.98 | 49.36 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/maskformer/maskformer_swin-s_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_swin-s_upernet_8xb2-160k_ade20k-512x512/maskformer_swin-s_upernet_8xb2-160k_ade20k-512x512_20221115_114710-723512c7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/maskformer/maskformer_swin-s_upernet_8xb2-160k_ade20k-512x512/maskformer_swin-s_upernet_8xb2-160k_ade20k-512x512_20221115_114710.json) | Note: diff --git a/configs/mobilenet_v2/README.md b/configs/mobilenet_v2/README.md index 6d8e5945cb..bff5259129 100644 --- a/configs/mobilenet_v2/README.md +++ b/configs/mobilenet_v2/README.md @@ -27,21 +27,21 @@ The MobileNetV2 architecture is based on an inverted residual structure where th ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ---------- | -------- | --------- | ------: | -------: | -------------- | ------ | ----: | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| FCN | M-V2-D8 | 512x1024 | 80000 | 3.4 | 14.2 | A100 | 71.19 | 73.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mobilenet_v2/mobilenet-v2-d8_fcn_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/mobilenet-v2-d8_fcn_4xb2-80k_cityscapes-512x1024/mobilenet-v2-d8_fcn_4xb2-80k_cityscapes-512x1024-20230224_185436-13fef4ea.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/mobilenet-v2-d8_fcn_4xb2-80k_cityscapes-512x1024/mobilenet-v2-d8_fcn_4xb2-80k_cityscapes-512x1024_20230224_185436.json) | -| PSPNet | M-V2-D8 | 512x1024 | 80000 | 3.6 | 11.2 | V100 | 70.23 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mobilenet_v2/mobilenet-v2-d8_pspnet_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/pspnet_m-v2-d8_512x1024_80k_cityscapes/pspnet_m-v2-d8_512x1024_80k_cityscapes_20200825_124817-19e81d51.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/pspnet_m-v2-d8_512x1024_80k_cityscapes/pspnet_m-v2-d8_512x1024_80k_cityscapes-20200825_124817.log.json) | -| DeepLabV3 | M-V2-D8 | 512x1024 | 80000 | 3.9 | 8.4 | V100 | 73.84 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mobilenet_v2/mobilenet-v2-d8_deeplabv3_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3_m-v2-d8_512x1024_80k_cityscapes/deeplabv3_m-v2-d8_512x1024_80k_cityscapes_20200825_124836-bef03590.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3_m-v2-d8_512x1024_80k_cityscapes/deeplabv3_m-v2-d8_512x1024_80k_cityscapes-20200825_124836.log.json) | -| DeepLabV3+ | M-V2-D8 | 512x1024 | 80000 | 5.1 | 8.4 | V100 | 75.20 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mobilenet_v2/mobilenet-v2-d8_deeplabv3plus_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3plus_m-v2-d8_512x1024_80k_cityscapes/deeplabv3plus_m-v2-d8_512x1024_80k_cityscapes_20200825_124836-d256dd4b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3plus_m-v2-d8_512x1024_80k_cityscapes/deeplabv3plus_m-v2-d8_512x1024_80k_cityscapes-20200825_124836.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------- | -------- | --------- | ------: | -------: | -------------- | ------ | ----: | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| FCN | M-V2-D8 | 512x1024 | 80000 | 3.4 | 14.2 | A100 | 71.19 | 73.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/mobilenet_v2/mobilenet-v2-d8_fcn_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/mobilenet-v2-d8_fcn_4xb2-80k_cityscapes-512x1024/mobilenet-v2-d8_fcn_4xb2-80k_cityscapes-512x1024-20230224_185436-13fef4ea.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/mobilenet-v2-d8_fcn_4xb2-80k_cityscapes-512x1024/mobilenet-v2-d8_fcn_4xb2-80k_cityscapes-512x1024_20230224_185436.json) | +| PSPNet | M-V2-D8 | 512x1024 | 80000 | 3.6 | 11.2 | V100 | 70.23 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/mobilenet_v2/mobilenet-v2-d8_pspnet_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/pspnet_m-v2-d8_512x1024_80k_cityscapes/pspnet_m-v2-d8_512x1024_80k_cityscapes_20200825_124817-19e81d51.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/pspnet_m-v2-d8_512x1024_80k_cityscapes/pspnet_m-v2-d8_512x1024_80k_cityscapes-20200825_124817.log.json) | +| DeepLabV3 | M-V2-D8 | 512x1024 | 80000 | 3.9 | 8.4 | V100 | 73.84 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/mobilenet_v2/mobilenet-v2-d8_deeplabv3_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3_m-v2-d8_512x1024_80k_cityscapes/deeplabv3_m-v2-d8_512x1024_80k_cityscapes_20200825_124836-bef03590.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3_m-v2-d8_512x1024_80k_cityscapes/deeplabv3_m-v2-d8_512x1024_80k_cityscapes-20200825_124836.log.json) | +| DeepLabV3+ | M-V2-D8 | 512x1024 | 80000 | 5.1 | 8.4 | V100 | 75.20 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/mobilenet_v2/mobilenet-v2-d8_deeplabv3plus_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3plus_m-v2-d8_512x1024_80k_cityscapes/deeplabv3plus_m-v2-d8_512x1024_80k_cityscapes_20200825_124836-d256dd4b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3plus_m-v2-d8_512x1024_80k_cityscapes/deeplabv3plus_m-v2-d8_512x1024_80k_cityscapes-20200825_124836.log.json) | ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ---------- | -------- | --------- | ------: | -------: | -------------- | ------ | ----: | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| FCN | M-V2-D8 | 512x512 | 160000 | 6.5 | 64.4 | V100 | 19.71 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mobilenet_v2/mobilenet-v2-d8_fcn_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/fcn_m-v2-d8_512x512_160k_ade20k/fcn_m-v2-d8_512x512_160k_ade20k_20200825_214953-c40e1095.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/fcn_m-v2-d8_512x512_160k_ade20k/fcn_m-v2-d8_512x512_160k_ade20k-20200825_214953.log.json) | -| PSPNet | M-V2-D8 | 512x512 | 160000 | 6.5 | 57.7 | V100 | 29.68 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mobilenet_v2/mobilenet-v2-d8_pspnet_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/pspnet_m-v2-d8_512x512_160k_ade20k/pspnet_m-v2-d8_512x512_160k_ade20k_20200825_214953-f5942f7a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/pspnet_m-v2-d8_512x512_160k_ade20k/pspnet_m-v2-d8_512x512_160k_ade20k-20200825_214953.log.json) | -| DeepLabV3 | M-V2-D8 | 512x512 | 160000 | 6.8 | 39.9 | V100 | 34.08 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mobilenet_v2/mobilenet-v2-d8_deeplabv3_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3_m-v2-d8_512x512_160k_ade20k/deeplabv3_m-v2-d8_512x512_160k_ade20k_20200825_223255-63986343.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3_m-v2-d8_512x512_160k_ade20k/deeplabv3_m-v2-d8_512x512_160k_ade20k-20200825_223255.log.json) | -| DeepLabV3+ | M-V2-D8 | 512x512 | 160000 | 8.2 | 43.1 | V100 | 34.02 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mobilenet_v2/mobilenet-v2-d8_deeplabv3plus_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3plus_m-v2-d8_512x512_160k_ade20k/deeplabv3plus_m-v2-d8_512x512_160k_ade20k_20200825_223255-465a01d4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3plus_m-v2-d8_512x512_160k_ade20k/deeplabv3plus_m-v2-d8_512x512_160k_ade20k-20200825_223255.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------- | -------- | --------- | ------: | -------: | -------------- | ------ | ----: | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| FCN | M-V2-D8 | 512x512 | 160000 | 6.5 | 64.4 | V100 | 19.71 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/mobilenet_v2/mobilenet-v2-d8_fcn_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/fcn_m-v2-d8_512x512_160k_ade20k/fcn_m-v2-d8_512x512_160k_ade20k_20200825_214953-c40e1095.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/fcn_m-v2-d8_512x512_160k_ade20k/fcn_m-v2-d8_512x512_160k_ade20k-20200825_214953.log.json) | +| PSPNet | M-V2-D8 | 512x512 | 160000 | 6.5 | 57.7 | V100 | 29.68 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/mobilenet_v2/mobilenet-v2-d8_pspnet_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/pspnet_m-v2-d8_512x512_160k_ade20k/pspnet_m-v2-d8_512x512_160k_ade20k_20200825_214953-f5942f7a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/pspnet_m-v2-d8_512x512_160k_ade20k/pspnet_m-v2-d8_512x512_160k_ade20k-20200825_214953.log.json) | +| DeepLabV3 | M-V2-D8 | 512x512 | 160000 | 6.8 | 39.9 | V100 | 34.08 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/mobilenet_v2/mobilenet-v2-d8_deeplabv3_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3_m-v2-d8_512x512_160k_ade20k/deeplabv3_m-v2-d8_512x512_160k_ade20k_20200825_223255-63986343.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3_m-v2-d8_512x512_160k_ade20k/deeplabv3_m-v2-d8_512x512_160k_ade20k-20200825_223255.log.json) | +| DeepLabV3+ | M-V2-D8 | 512x512 | 160000 | 8.2 | 43.1 | V100 | 34.02 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/mobilenet_v2/mobilenet-v2-d8_deeplabv3plus_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3plus_m-v2-d8_512x512_160k_ade20k/deeplabv3plus_m-v2-d8_512x512_160k_ade20k_20200825_223255-465a01d4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v2/deeplabv3plus_m-v2-d8_512x512_160k_ade20k/deeplabv3plus_m-v2-d8_512x512_160k_ade20k-20200825_223255.log.json) | ## Citation diff --git a/configs/mobilenet_v3/README.md b/configs/mobilenet_v3/README.md index 3b63db7e50..8ed0a5692a 100644 --- a/configs/mobilenet_v3/README.md +++ b/configs/mobilenet_v3/README.md @@ -28,12 +28,12 @@ We present the next generation of MobileNets based on a combination of complemen ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | ------------------ | --------- | ------: | -------: | -------------- | ------ | ----: | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| LRASPP | M-V3-D8 | 512x1024 | 320000 | 8.9 | 15.22 | V100 | 69.54 | 70.89 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mobilenet_v3/mobilenet-v3-d8_lraspp_4xb4-320k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3-d8_512x1024_320k_cityscapes/lraspp_m-v3-d8_512x1024_320k_cityscapes_20201224_220337-cfe8fb07.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3-d8_512x1024_320k_cityscapes/lraspp_m-v3-d8_512x1024_320k_cityscapes-20201224_220337.log.json) | -| LRASPP | M-V3-D8 (scratch) | 512x1024 | 320000 | 8.9 | 14.77 | V100 | 67.87 | 69.78 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mobilenet_v3/mobilenet-v3-d8-scratch_lraspp_4xb4-320k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3-d8_scratch_512x1024_320k_cityscapes/lraspp_m-v3-d8_scratch_512x1024_320k_cityscapes_20201224_220337-9f29cd72.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3-d8_scratch_512x1024_320k_cityscapes/lraspp_m-v3-d8_scratch_512x1024_320k_cityscapes-20201224_220337.log.json) | -| LRASPP | M-V3s-D8 | 512x1024 | 320000 | 5.3 | 23.64 | V100 | 64.11 | 66.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mobilenet_v3/mobilenet-v3-d8-s_lraspp_4xb4-320k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3s-d8_512x1024_320k_cityscapes/lraspp_m-v3s-d8_512x1024_320k_cityscapes_20201224_223935-61565b34.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3s-d8_512x1024_320k_cityscapes/lraspp_m-v3s-d8_512x1024_320k_cityscapes-20201224_223935.log.json) | -| LRASPP | M-V3s-D8 (scratch) | 512x1024 | 320000 | 5.3 | 24.50 | V100 | 62.74 | 65.01 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/mobilenet_v3/mobilenet-v3-d8-scratch-s_lraspp_4xb4-320k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3s-d8_scratch_512x1024_320k_cityscapes/lraspp_m-v3s-d8_scratch_512x1024_320k_cityscapes_20201224_223935-03daeabb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3s-d8_scratch_512x1024_320k_cityscapes/lraspp_m-v3s-d8_scratch_512x1024_320k_cityscapes-20201224_223935.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | ------------------ | --------- | ------: | -------: | -------------- | ------ | ----: | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| LRASPP | M-V3-D8 | 512x1024 | 320000 | 8.9 | 15.22 | V100 | 69.54 | 70.89 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/mobilenet_v3/mobilenet-v3-d8_lraspp_4xb4-320k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3-d8_512x1024_320k_cityscapes/lraspp_m-v3-d8_512x1024_320k_cityscapes_20201224_220337-cfe8fb07.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3-d8_512x1024_320k_cityscapes/lraspp_m-v3-d8_512x1024_320k_cityscapes-20201224_220337.log.json) | +| LRASPP | M-V3-D8 (scratch) | 512x1024 | 320000 | 8.9 | 14.77 | V100 | 67.87 | 69.78 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/mobilenet_v3/mobilenet-v3-d8-scratch_lraspp_4xb4-320k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3-d8_scratch_512x1024_320k_cityscapes/lraspp_m-v3-d8_scratch_512x1024_320k_cityscapes_20201224_220337-9f29cd72.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3-d8_scratch_512x1024_320k_cityscapes/lraspp_m-v3-d8_scratch_512x1024_320k_cityscapes-20201224_220337.log.json) | +| LRASPP | M-V3s-D8 | 512x1024 | 320000 | 5.3 | 23.64 | V100 | 64.11 | 66.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/mobilenet_v3/mobilenet-v3-d8-s_lraspp_4xb4-320k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3s-d8_512x1024_320k_cityscapes/lraspp_m-v3s-d8_512x1024_320k_cityscapes_20201224_223935-61565b34.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3s-d8_512x1024_320k_cityscapes/lraspp_m-v3s-d8_512x1024_320k_cityscapes-20201224_223935.log.json) | +| LRASPP | M-V3s-D8 (scratch) | 512x1024 | 320000 | 5.3 | 24.50 | V100 | 62.74 | 65.01 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/mobilenet_v3/mobilenet-v3-d8-scratch-s_lraspp_4xb4-320k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3s-d8_scratch_512x1024_320k_cityscapes/lraspp_m-v3s-d8_scratch_512x1024_320k_cityscapes_20201224_223935-03daeabb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/mobilenet_v3/lraspp_m-v3s-d8_scratch_512x1024_320k_cityscapes/lraspp_m-v3s-d8_scratch_512x1024_320k_cityscapes-20201224_223935.log.json) | ## Citation diff --git a/configs/nonlocal_net/README.md b/configs/nonlocal_net/README.md index 0a0fcf3725..4c3f49f981 100644 --- a/configs/nonlocal_net/README.md +++ b/configs/nonlocal_net/README.md @@ -26,34 +26,34 @@ Both convolutional and recurrent operations are building blocks that process one ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ----------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| NonLocalNet | R-50-D8 | 512x1024 | 40000 | 7.4 | 2.72 | V100 | 78.24 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x1024_40k_cityscapes/nonlocal_r50-d8_512x1024_40k_cityscapes_20200605_210748-c75e81e3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x1024_40k_cityscapes/nonlocal_r50-d8_512x1024_40k_cityscapes_20200605_210748.log.json) | -| NonLocalNet | R-101-D8 | 512x1024 | 40000 | 10.9 | 1.95 | V100 | 78.66 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x1024_40k_cityscapes/nonlocal_r101-d8_512x1024_40k_cityscapes_20200605_210748-d63729fa.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x1024_40k_cityscapes/nonlocal_r101-d8_512x1024_40k_cityscapes_20200605_210748.log.json) | -| NonLocalNet | R-50-D8 | 769x769 | 40000 | 8.9 | 1.52 | V100 | 78.33 | 79.92 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_769x769_40k_cityscapes/nonlocal_r50-d8_769x769_40k_cityscapes_20200530_045243-82ef6749.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_769x769_40k_cityscapes/nonlocal_r50-d8_769x769_40k_cityscapes_20200530_045243.log.json) | -| NonLocalNet | R-101-D8 | 769x769 | 40000 | 12.8 | 1.05 | V100 | 78.57 | 80.29 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_769x769_40k_cityscapes/nonlocal_r101-d8_769x769_40k_cityscapes_20200530_045348-8fe9a9dc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_769x769_40k_cityscapes/nonlocal_r101-d8_769x769_40k_cityscapes_20200530_045348.log.json) | -| NonLocalNet | R-50-D8 | 512x1024 | 80000 | - | - | V100 | 78.01 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x1024_80k_cityscapes/nonlocal_r50-d8_512x1024_80k_cityscapes_20200607_193518-d6839fae.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x1024_80k_cityscapes/nonlocal_r50-d8_512x1024_80k_cityscapes_20200607_193518.log.json) | -| NonLocalNet | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 78.93 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x1024_80k_cityscapes/nonlocal_r101-d8_512x1024_80k_cityscapes_20200607_183411-32700183.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x1024_80k_cityscapes/nonlocal_r101-d8_512x1024_80k_cityscapes_20200607_183411.log.json) | -| NonLocalNet | R-50-D8 | 769x769 | 80000 | - | - | V100 | 79.05 | 80.68 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_769x769_80k_cityscapes/nonlocal_r50-d8_769x769_80k_cityscapes_20200607_193506-1f9792f6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_769x769_80k_cityscapes/nonlocal_r50-d8_769x769_80k_cityscapes_20200607_193506.log.json) | -| NonLocalNet | R-101-D8 | 769x769 | 80000 | - | - | V100 | 79.40 | 80.85 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_769x769_80k_cityscapes/nonlocal_r101-d8_769x769_80k_cityscapes_20200607_183428-0e1fa4f9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_769x769_80k_cityscapes/nonlocal_r101-d8_769x769_80k_cityscapes_20200607_183428.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ----------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| NonLocalNet | R-50-D8 | 512x1024 | 40000 | 7.4 | 2.72 | V100 | 78.24 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/nonlocal_net/nonlocal_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x1024_40k_cityscapes/nonlocal_r50-d8_512x1024_40k_cityscapes_20200605_210748-c75e81e3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x1024_40k_cityscapes/nonlocal_r50-d8_512x1024_40k_cityscapes_20200605_210748.log.json) | +| NonLocalNet | R-101-D8 | 512x1024 | 40000 | 10.9 | 1.95 | V100 | 78.66 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/nonlocal_net/nonlocal_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x1024_40k_cityscapes/nonlocal_r101-d8_512x1024_40k_cityscapes_20200605_210748-d63729fa.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x1024_40k_cityscapes/nonlocal_r101-d8_512x1024_40k_cityscapes_20200605_210748.log.json) | +| NonLocalNet | R-50-D8 | 769x769 | 40000 | 8.9 | 1.52 | V100 | 78.33 | 79.92 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/nonlocal_net/nonlocal_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_769x769_40k_cityscapes/nonlocal_r50-d8_769x769_40k_cityscapes_20200530_045243-82ef6749.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_769x769_40k_cityscapes/nonlocal_r50-d8_769x769_40k_cityscapes_20200530_045243.log.json) | +| NonLocalNet | R-101-D8 | 769x769 | 40000 | 12.8 | 1.05 | V100 | 78.57 | 80.29 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/nonlocal_net/nonlocal_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_769x769_40k_cityscapes/nonlocal_r101-d8_769x769_40k_cityscapes_20200530_045348-8fe9a9dc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_769x769_40k_cityscapes/nonlocal_r101-d8_769x769_40k_cityscapes_20200530_045348.log.json) | +| NonLocalNet | R-50-D8 | 512x1024 | 80000 | - | - | V100 | 78.01 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/nonlocal_net/nonlocal_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x1024_80k_cityscapes/nonlocal_r50-d8_512x1024_80k_cityscapes_20200607_193518-d6839fae.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x1024_80k_cityscapes/nonlocal_r50-d8_512x1024_80k_cityscapes_20200607_193518.log.json) | +| NonLocalNet | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 78.93 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/nonlocal_net/nonlocal_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x1024_80k_cityscapes/nonlocal_r101-d8_512x1024_80k_cityscapes_20200607_183411-32700183.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x1024_80k_cityscapes/nonlocal_r101-d8_512x1024_80k_cityscapes_20200607_183411.log.json) | +| NonLocalNet | R-50-D8 | 769x769 | 80000 | - | - | V100 | 79.05 | 80.68 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/nonlocal_net/nonlocal_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_769x769_80k_cityscapes/nonlocal_r50-d8_769x769_80k_cityscapes_20200607_193506-1f9792f6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_769x769_80k_cityscapes/nonlocal_r50-d8_769x769_80k_cityscapes_20200607_193506.log.json) | +| NonLocalNet | R-101-D8 | 769x769 | 80000 | - | - | V100 | 79.40 | 80.85 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/nonlocal_net/nonlocal_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_769x769_80k_cityscapes/nonlocal_r101-d8_769x769_80k_cityscapes_20200607_183428-0e1fa4f9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_769x769_80k_cityscapes/nonlocal_r101-d8_769x769_80k_cityscapes_20200607_183428.log.json) | ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ----------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| NonLocalNet | R-50-D8 | 512x512 | 80000 | 9.1 | 21.37 | V100 | 40.75 | 42.05 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_80k_ade20k/nonlocal_r50-d8_512x512_80k_ade20k_20200615_015801-5ae0aa33.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_80k_ade20k/nonlocal_r50-d8_512x512_80k_ade20k_20200615_015801.log.json) | -| NonLocalNet | R-101-D8 | 512x512 | 80000 | 12.6 | 13.97 | V100 | 42.90 | 44.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_80k_ade20k/nonlocal_r101-d8_512x512_80k_ade20k_20200615_015758-24105919.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_80k_ade20k/nonlocal_r101-d8_512x512_80k_ade20k_20200615_015758.log.json) | -| NonLocalNet | R-50-D8 | 512x512 | 160000 | - | - | V100 | 42.03 | 43.04 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_160k_ade20k/nonlocal_r50-d8_512x512_160k_ade20k_20200616_005410-baef45e3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_160k_ade20k/nonlocal_r50-d8_512x512_160k_ade20k_20200616_005410.log.json) | -| NonLocalNet | R-101-D8 | 512x512 | 160000 | - | - | V100 | 44.63 | 45.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_160k_ade20k/nonlocal_r101-d8_512x512_160k_ade20k_20210827_221502-7881aa1a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_160k_ade20k/nonlocal_r101-d8_512x512_160k_ade20k_20210827_221502.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ----------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| NonLocalNet | R-50-D8 | 512x512 | 80000 | 9.1 | 21.37 | V100 | 40.75 | 42.05 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/nonlocal_net/nonlocal_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_80k_ade20k/nonlocal_r50-d8_512x512_80k_ade20k_20200615_015801-5ae0aa33.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_80k_ade20k/nonlocal_r50-d8_512x512_80k_ade20k_20200615_015801.log.json) | +| NonLocalNet | R-101-D8 | 512x512 | 80000 | 12.6 | 13.97 | V100 | 42.90 | 44.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/nonlocal_net/nonlocal_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_80k_ade20k/nonlocal_r101-d8_512x512_80k_ade20k_20200615_015758-24105919.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_80k_ade20k/nonlocal_r101-d8_512x512_80k_ade20k_20200615_015758.log.json) | +| NonLocalNet | R-50-D8 | 512x512 | 160000 | - | - | V100 | 42.03 | 43.04 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/nonlocal_net/nonlocal_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_160k_ade20k/nonlocal_r50-d8_512x512_160k_ade20k_20200616_005410-baef45e3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_160k_ade20k/nonlocal_r50-d8_512x512_160k_ade20k_20200616_005410.log.json) | +| NonLocalNet | R-101-D8 | 512x512 | 160000 | - | - | V100 | 44.63 | 45.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/nonlocal_net/nonlocal_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_160k_ade20k/nonlocal_r101-d8_512x512_160k_ade20k_20210827_221502-7881aa1a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_160k_ade20k/nonlocal_r101-d8_512x512_160k_ade20k_20210827_221502.log.json) | ### Pascal VOC 2012 + Aug -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ----------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| NonLocalNet | R-50-D8 | 512x512 | 20000 | 6.4 | 21.21 | V100 | 76.20 | 77.12 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_20k_voc12aug/nonlocal_r50-d8_512x512_20k_voc12aug_20200617_222613-07f2a57c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_20k_voc12aug/nonlocal_r50-d8_512x512_20k_voc12aug_20200617_222613.log.json) | -| NonLocalNet | R-101-D8 | 512x512 | 20000 | 9.8 | 14.01 | V100 | 78.15 | 78.86 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_20k_voc12aug/nonlocal_r101-d8_512x512_20k_voc12aug_20200617_222615-948c68ab.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_20k_voc12aug/nonlocal_r101-d8_512x512_20k_voc12aug_20200617_222615.log.json) | -| NonLocalNet | R-50-D8 | 512x512 | 40000 | - | - | V100 | 76.65 | 77.47 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_40k_voc12aug/nonlocal_r50-d8_512x512_40k_voc12aug_20200614_000028-0139d4a9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_40k_voc12aug/nonlocal_r50-d8_512x512_40k_voc12aug_20200614_000028.log.json) | -| NonLocalNet | R-101-D8 | 512x512 | 40000 | - | - | V100 | 78.27 | 79.12 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/nonlocal_net/nonlocal_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_40k_voc12aug/nonlocal_r101-d8_512x512_40k_voc12aug_20200614_000028-7e5ff470.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_40k_voc12aug/nonlocal_r101-d8_512x512_40k_voc12aug_20200614_000028.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ----------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| NonLocalNet | R-50-D8 | 512x512 | 20000 | 6.4 | 21.21 | V100 | 76.20 | 77.12 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/nonlocal_net/nonlocal_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_20k_voc12aug/nonlocal_r50-d8_512x512_20k_voc12aug_20200617_222613-07f2a57c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_20k_voc12aug/nonlocal_r50-d8_512x512_20k_voc12aug_20200617_222613.log.json) | +| NonLocalNet | R-101-D8 | 512x512 | 20000 | 9.8 | 14.01 | V100 | 78.15 | 78.86 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/nonlocal_net/nonlocal_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_20k_voc12aug/nonlocal_r101-d8_512x512_20k_voc12aug_20200617_222615-948c68ab.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_20k_voc12aug/nonlocal_r101-d8_512x512_20k_voc12aug_20200617_222615.log.json) | +| NonLocalNet | R-50-D8 | 512x512 | 40000 | - | - | V100 | 76.65 | 77.47 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/nonlocal_net/nonlocal_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_40k_voc12aug/nonlocal_r50-d8_512x512_40k_voc12aug_20200614_000028-0139d4a9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_40k_voc12aug/nonlocal_r50-d8_512x512_40k_voc12aug_20200614_000028.log.json) | +| NonLocalNet | R-101-D8 | 512x512 | 40000 | - | - | V100 | 78.27 | 79.12 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/nonlocal_net/nonlocal_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_40k_voc12aug/nonlocal_r101-d8_512x512_40k_voc12aug_20200614_000028-7e5ff470.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_40k_voc12aug/nonlocal_r101-d8_512x512_40k_voc12aug_20200614_000028.log.json) | ## Citation diff --git a/configs/ocrnet/README.md b/configs/ocrnet/README.md index 5b078f59c2..628a3b1597 100644 --- a/configs/ocrnet/README.md +++ b/configs/ocrnet/README.md @@ -28,47 +28,47 @@ In this paper, we address the problem of semantic segmentation and focus on the #### HRNet backbone -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | ------------------ | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| OCRNet | HRNetV2p-W18-Small | 512x1024 | 40000 | 3.5 | 10.45 | A100 | 76.61 | 78.01 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18s_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_4xb2-40k_cityscapes-512x1024/ocrnet_hr18s_4xb2-40k_cityscapes-512x1024_20230227_145026-6c052a14.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_4xb2-40k_cityscapes-512x1024/ocrnet_hr18s_4xb2-40k_cityscapes-512x1024_20230227_145026.json) | -| OCRNet | HRNetV2p-W18 | 512x1024 | 40000 | 4.7 | 7.50 | V100 | 77.72 | 79.49 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_40k_cityscapes/ocrnet_hr18_512x1024_40k_cityscapes_20200601_033320-401c5bdd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_40k_cityscapes/ocrnet_hr18_512x1024_40k_cityscapes_20200601_033320.log.json) | -| OCRNet | HRNetV2p-W48 | 512x1024 | 40000 | 8 | 4.22 | V100 | 80.58 | 81.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr48_4xb2-40k_cityscapes-512x1024.pyy) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_40k_cityscapes/ocrnet_hr48_512x1024_40k_cityscapes_20200601_033336-55b32491.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_40k_cityscapes/ocrnet_hr48_512x1024_40k_cityscapes_20200601_033336.log.json) | -| OCRNet | HRNetV2p-W18-Small | 512x1024 | 80000 | - | - | V100 | 77.16 | 78.66 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18s_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x1024_80k_cityscapes/ocrnet_hr18s_512x1024_80k_cityscapes_20200601_222735-55979e63.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x1024_80k_cityscapes/ocrnet_hr18s_512x1024_80k_cityscapes_20200601_222735.log.json) | -| OCRNet | HRNetV2p-W18 | 512x1024 | 80000 | - | - | V100 | 78.57 | 80.46 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_80k_cityscapes/ocrnet_hr18_512x1024_80k_cityscapes_20200614_230521-c2e1dd4a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_80k_cityscapes/ocrnet_hr18_512x1024_80k_cityscapes_20200614_230521.log.json) | -| OCRNet | HRNetV2p-W48 | 512x1024 | 80000 | - | - | V100 | 80.70 | 81.87 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr48_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_80k_cityscapes/ocrnet_hr48_512x1024_80k_cityscapes_20200601_222752-9076bcdf.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_80k_cityscapes/ocrnet_hr48_512x1024_80k_cityscapes_20200601_222752.log.json) | -| OCRNet | HRNetV2p-W18-Small | 512x1024 | 160000 | - | - | V100 | 78.45 | 79.97 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18s_4xb2-160k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x1024_160k_cityscapes/ocrnet_hr18s_512x1024_160k_cityscapes_20200602_191005-f4a7af28.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x1024_160k_cityscapes/ocrnet_hr18s_512x1024_160k_cityscapes_20200602_191005.log.json) | -| OCRNet | HRNetV2p-W18 | 512x1024 | 160000 | - | - | V100 | 79.47 | 80.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18_4xb2-160k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_160k_cityscapes/ocrnet_hr18_512x1024_160k_cityscapes_20200602_191001-b9172d0c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_160k_cityscapes/ocrnet_hr18_512x1024_160k_cityscapes_20200602_191001.log.json) | -| OCRNet | HRNetV2p-W48 | 512x1024 | 160000 | - | - | V100 | 81.35 | 82.70 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr48_4xb2-160k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_160k_cityscapes/ocrnet_hr48_512x1024_160k_cityscapes_20200602_191037-dfbf1b0c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_160k_cityscapes/ocrnet_hr48_512x1024_160k_cityscapes_20200602_191037.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | ------------------ | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| OCRNet | HRNetV2p-W18-Small | 512x1024 | 40000 | 3.5 | 10.45 | A100 | 76.61 | 78.01 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ocrnet/ocrnet_hr18s_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_4xb2-40k_cityscapes-512x1024/ocrnet_hr18s_4xb2-40k_cityscapes-512x1024_20230227_145026-6c052a14.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_4xb2-40k_cityscapes-512x1024/ocrnet_hr18s_4xb2-40k_cityscapes-512x1024_20230227_145026.json) | +| OCRNet | HRNetV2p-W18 | 512x1024 | 40000 | 4.7 | 7.50 | V100 | 77.72 | 79.49 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ocrnet/ocrnet_hr18_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_40k_cityscapes/ocrnet_hr18_512x1024_40k_cityscapes_20200601_033320-401c5bdd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_40k_cityscapes/ocrnet_hr18_512x1024_40k_cityscapes_20200601_033320.log.json) | +| OCRNet | HRNetV2p-W48 | 512x1024 | 40000 | 8 | 4.22 | V100 | 80.58 | 81.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ocrnet/ocrnet_hr48_4xb2-40k_cityscapes-512x1024.pyy) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_40k_cityscapes/ocrnet_hr48_512x1024_40k_cityscapes_20200601_033336-55b32491.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_40k_cityscapes/ocrnet_hr48_512x1024_40k_cityscapes_20200601_033336.log.json) | +| OCRNet | HRNetV2p-W18-Small | 512x1024 | 80000 | - | - | V100 | 77.16 | 78.66 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ocrnet/ocrnet_hr18s_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x1024_80k_cityscapes/ocrnet_hr18s_512x1024_80k_cityscapes_20200601_222735-55979e63.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x1024_80k_cityscapes/ocrnet_hr18s_512x1024_80k_cityscapes_20200601_222735.log.json) | +| OCRNet | HRNetV2p-W18 | 512x1024 | 80000 | - | - | V100 | 78.57 | 80.46 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ocrnet/ocrnet_hr18_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_80k_cityscapes/ocrnet_hr18_512x1024_80k_cityscapes_20200614_230521-c2e1dd4a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_80k_cityscapes/ocrnet_hr18_512x1024_80k_cityscapes_20200614_230521.log.json) | +| OCRNet | HRNetV2p-W48 | 512x1024 | 80000 | - | - | V100 | 80.70 | 81.87 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ocrnet/ocrnet_hr48_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_80k_cityscapes/ocrnet_hr48_512x1024_80k_cityscapes_20200601_222752-9076bcdf.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_80k_cityscapes/ocrnet_hr48_512x1024_80k_cityscapes_20200601_222752.log.json) | +| OCRNet | HRNetV2p-W18-Small | 512x1024 | 160000 | - | - | V100 | 78.45 | 79.97 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ocrnet/ocrnet_hr18s_4xb2-160k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x1024_160k_cityscapes/ocrnet_hr18s_512x1024_160k_cityscapes_20200602_191005-f4a7af28.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x1024_160k_cityscapes/ocrnet_hr18s_512x1024_160k_cityscapes_20200602_191005.log.json) | +| OCRNet | HRNetV2p-W18 | 512x1024 | 160000 | - | - | V100 | 79.47 | 80.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ocrnet/ocrnet_hr18_4xb2-160k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_160k_cityscapes/ocrnet_hr18_512x1024_160k_cityscapes_20200602_191001-b9172d0c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_160k_cityscapes/ocrnet_hr18_512x1024_160k_cityscapes_20200602_191001.log.json) | +| OCRNet | HRNetV2p-W48 | 512x1024 | 160000 | - | - | V100 | 81.35 | 82.70 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ocrnet/ocrnet_hr48_4xb2-160k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_160k_cityscapes/ocrnet_hr48_512x1024_160k_cityscapes_20200602_191037-dfbf1b0c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_160k_cityscapes/ocrnet_hr48_512x1024_160k_cityscapes_20200602_191037.log.json) | #### ResNet backbone -| Method | Backbone | Crop Size | Batch Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ---------- | ------- | -------- | -------------- | ------ | ----- | ------------: | --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| OCRNet | R-101-D8 | 512x1024 | 8 | 40000 | - | - | V100 | 80.09 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_r101-d8_512x1024_40k_b8_cityscapes/ocrnet_r101-d8_512x1024_40k_b8_cityscapes_20200717_110721-02ac0f13.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_r101-d8_512x1024_40k_b8_cityscapes/ocrnet_r101-d8_512x1024_40k_b8_cityscapes_20200717_110721.log.json) | -| OCRNet | R-101-D8 | 512x1024 | 16 | 40000 | 8.8 | 3.02 | V100 | 80.30 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_r101-d8_8xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_r101-d8_512x1024_40k_b16_cityscapes/ocrnet_r101-d8_512x1024_40k_b16_cityscapes_20200723_193726-db500f80.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_r101-d8_512x1024_40k_b16_cityscapes/ocrnet_r101-d8_512x1024_40k_b16_cityscapes_20200723_193726.log.json) | -| OCRNet | R-101-D8 | 512x1024 | 16 | 80000 | 8.8 | 3.02 | V100 | 80.81 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_r101-d8_8xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_r101-d8_512x1024_80k_b16_cityscapes/ocrnet_r101-d8_512x1024_80k_b16_cityscapes_20200723_192421-78688424.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_r101-d8_512x1024_80k_b16_cityscapes/ocrnet_r101-d8_512x1024_80k_b16_cityscapes_20200723_192421.log.json) | +| Method | Backbone | Crop Size | Batch Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ---------- | ------- | -------- | -------------- | ------ | ----- | ------------: | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| OCRNet | R-101-D8 | 512x1024 | 8 | 40000 | - | - | V100 | 80.09 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ocrnet/ocrnet_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_r101-d8_512x1024_40k_b8_cityscapes/ocrnet_r101-d8_512x1024_40k_b8_cityscapes_20200717_110721-02ac0f13.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_r101-d8_512x1024_40k_b8_cityscapes/ocrnet_r101-d8_512x1024_40k_b8_cityscapes_20200717_110721.log.json) | +| OCRNet | R-101-D8 | 512x1024 | 16 | 40000 | 8.8 | 3.02 | V100 | 80.30 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ocrnet/ocrnet_r101-d8_8xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_r101-d8_512x1024_40k_b16_cityscapes/ocrnet_r101-d8_512x1024_40k_b16_cityscapes_20200723_193726-db500f80.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_r101-d8_512x1024_40k_b16_cityscapes/ocrnet_r101-d8_512x1024_40k_b16_cityscapes_20200723_193726.log.json) | +| OCRNet | R-101-D8 | 512x1024 | 16 | 80000 | 8.8 | 3.02 | V100 | 80.81 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ocrnet/ocrnet_r101-d8_8xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_r101-d8_512x1024_80k_b16_cityscapes/ocrnet_r101-d8_512x1024_80k_b16_cityscapes_20200723_192421-78688424.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_r101-d8_512x1024_80k_b16_cityscapes/ocrnet_r101-d8_512x1024_80k_b16_cityscapes_20200723_192421.log.json) | ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | ------------------ | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| OCRNet | HRNetV2p-W18-Small | 512x512 | 80000 | 6.7 | 28.98 | V100 | 35.06 | 35.80 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18s_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_80k_ade20k/ocrnet_hr18s_512x512_80k_ade20k_20200615_055600-e80b62af.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_80k_ade20k/ocrnet_hr18s_512x512_80k_ade20k_20200615_055600.log.json) | -| OCRNet | HRNetV2p-W18 | 512x512 | 80000 | 7.9 | 18.93 | V100 | 37.79 | 39.16 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_80k_ade20k/ocrnet_hr18_512x512_80k_ade20k_20200615_053157-d173d83b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_80k_ade20k/ocrnet_hr18_512x512_80k_ade20k_20200615_053157.log.json) | -| OCRNet | HRNetV2p-W48 | 512x512 | 80000 | 11.2 | 16.99 | V100 | 43.00 | 44.30 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr48_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_80k_ade20k/ocrnet_hr48_512x512_80k_ade20k_20200615_021518-d168c2d1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_80k_ade20k/ocrnet_hr48_512x512_80k_ade20k_20200615_021518.log.json) | -| OCRNet | HRNetV2p-W18-Small | 512x512 | 160000 | - | - | V100 | 37.19 | 38.40 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18s_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_160k_ade20k/ocrnet_hr18s_512x512_160k_ade20k_20200615_184505-8e913058.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_160k_ade20k/ocrnet_hr18s_512x512_160k_ade20k_20200615_184505.log.json) | -| OCRNet | HRNetV2p-W18 | 512x512 | 160000 | - | - | V100 | 39.32 | 40.80 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_160k_ade20k/ocrnet_hr18_512x512_160k_ade20k_20200615_200940-d8fcd9d1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_160k_ade20k/ocrnet_hr18_512x512_160k_ade20k_20200615_200940.log.json) | -| OCRNet | HRNetV2p-W48 | 512x512 | 160000 | - | - | V100 | 43.25 | 44.88 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr48_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_160k_ade20k/ocrnet_hr48_512x512_160k_ade20k_20200615_184705-a073726d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_160k_ade20k/ocrnet_hr48_512x512_160k_ade20k_20200615_184705.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | ------------------ | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| OCRNet | HRNetV2p-W18-Small | 512x512 | 80000 | 6.7 | 28.98 | V100 | 35.06 | 35.80 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ocrnet/ocrnet_hr18s_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_80k_ade20k/ocrnet_hr18s_512x512_80k_ade20k_20200615_055600-e80b62af.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_80k_ade20k/ocrnet_hr18s_512x512_80k_ade20k_20200615_055600.log.json) | +| OCRNet | HRNetV2p-W18 | 512x512 | 80000 | 7.9 | 18.93 | V100 | 37.79 | 39.16 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ocrnet/ocrnet_hr18_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_80k_ade20k/ocrnet_hr18_512x512_80k_ade20k_20200615_053157-d173d83b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_80k_ade20k/ocrnet_hr18_512x512_80k_ade20k_20200615_053157.log.json) | +| OCRNet | HRNetV2p-W48 | 512x512 | 80000 | 11.2 | 16.99 | V100 | 43.00 | 44.30 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ocrnet/ocrnet_hr48_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_80k_ade20k/ocrnet_hr48_512x512_80k_ade20k_20200615_021518-d168c2d1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_80k_ade20k/ocrnet_hr48_512x512_80k_ade20k_20200615_021518.log.json) | +| OCRNet | HRNetV2p-W18-Small | 512x512 | 160000 | - | - | V100 | 37.19 | 38.40 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ocrnet/ocrnet_hr18s_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_160k_ade20k/ocrnet_hr18s_512x512_160k_ade20k_20200615_184505-8e913058.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_160k_ade20k/ocrnet_hr18s_512x512_160k_ade20k_20200615_184505.log.json) | +| OCRNet | HRNetV2p-W18 | 512x512 | 160000 | - | - | V100 | 39.32 | 40.80 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ocrnet/ocrnet_hr18_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_160k_ade20k/ocrnet_hr18_512x512_160k_ade20k_20200615_200940-d8fcd9d1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_160k_ade20k/ocrnet_hr18_512x512_160k_ade20k_20200615_200940.log.json) | +| OCRNet | HRNetV2p-W48 | 512x512 | 160000 | - | - | V100 | 43.25 | 44.88 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ocrnet/ocrnet_hr48_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_160k_ade20k/ocrnet_hr48_512x512_160k_ade20k_20200615_184705-a073726d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_160k_ade20k/ocrnet_hr48_512x512_160k_ade20k_20200615_184705.log.json) | ### Pascal VOC 2012 + Aug -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | ------------------ | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| OCRNet | HRNetV2p-W18-Small | 512x512 | 20000 | 3.5 | 31.55 | V100 | 71.70 | 73.84 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18s_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_20k_voc12aug/ocrnet_hr18s_512x512_20k_voc12aug_20200617_233913-02b04fcb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_20k_voc12aug/ocrnet_hr18s_512x512_20k_voc12aug_20200617_233913.log.json) | -| OCRNet | HRNetV2p-W18 | 512x512 | 20000 | 4.7 | 19.91 | V100 | 74.75 | 77.11 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_20k_voc12aug/ocrnet_hr18_512x512_20k_voc12aug_20200617_233932-8954cbb7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_20k_voc12aug/ocrnet_hr18_512x512_20k_voc12aug_20200617_233932.log.json) | -| OCRNet | HRNetV2p-W48 | 512x512 | 20000 | 8.1 | 17.83 | V100 | 77.72 | 79.87 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr48_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_20k_voc12aug/ocrnet_hr48_512x512_20k_voc12aug_20200617_233932-9e82080a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_20k_voc12aug/ocrnet_hr48_512x512_20k_voc12aug_20200617_233932.log.json) | -| OCRNet | HRNetV2p-W18-Small | 512x512 | 40000 | - | - | V100 | 72.76 | 74.60 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18s_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_40k_voc12aug/ocrnet_hr18s_512x512_40k_voc12aug_20200614_002025-42b587ac.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_40k_voc12aug/ocrnet_hr18s_512x512_40k_voc12aug_20200614_002025.log.json) | -| OCRNet | HRNetV2p-W18 | 512x512 | 40000 | - | - | V100 | 74.98 | 77.40 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr18_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_40k_voc12aug/ocrnet_hr18_512x512_40k_voc12aug_20200614_015958-714302be.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_40k_voc12aug/ocrnet_hr18_512x512_40k_voc12aug_20200614_015958.log.json) | -| OCRNet | HRNetV2p-W48 | 512x512 | 40000 | - | - | V100 | 77.14 | 79.71 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/ocrnet/ocrnet_hr48_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_40k_voc12aug/ocrnet_hr48_512x512_40k_voc12aug_20200614_015958-255bc5ce.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_40k_voc12aug/ocrnet_hr48_512x512_40k_voc12aug_20200614_015958.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | ------------------ | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| OCRNet | HRNetV2p-W18-Small | 512x512 | 20000 | 3.5 | 31.55 | V100 | 71.70 | 73.84 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ocrnet/ocrnet_hr18s_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_20k_voc12aug/ocrnet_hr18s_512x512_20k_voc12aug_20200617_233913-02b04fcb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_20k_voc12aug/ocrnet_hr18s_512x512_20k_voc12aug_20200617_233913.log.json) | +| OCRNet | HRNetV2p-W18 | 512x512 | 20000 | 4.7 | 19.91 | V100 | 74.75 | 77.11 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ocrnet/ocrnet_hr18_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_20k_voc12aug/ocrnet_hr18_512x512_20k_voc12aug_20200617_233932-8954cbb7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_20k_voc12aug/ocrnet_hr18_512x512_20k_voc12aug_20200617_233932.log.json) | +| OCRNet | HRNetV2p-W48 | 512x512 | 20000 | 8.1 | 17.83 | V100 | 77.72 | 79.87 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ocrnet/ocrnet_hr48_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_20k_voc12aug/ocrnet_hr48_512x512_20k_voc12aug_20200617_233932-9e82080a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_20k_voc12aug/ocrnet_hr48_512x512_20k_voc12aug_20200617_233932.log.json) | +| OCRNet | HRNetV2p-W18-Small | 512x512 | 40000 | - | - | V100 | 72.76 | 74.60 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ocrnet/ocrnet_hr18s_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_40k_voc12aug/ocrnet_hr18s_512x512_40k_voc12aug_20200614_002025-42b587ac.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_40k_voc12aug/ocrnet_hr18s_512x512_40k_voc12aug_20200614_002025.log.json) | +| OCRNet | HRNetV2p-W18 | 512x512 | 40000 | - | - | V100 | 74.98 | 77.40 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ocrnet/ocrnet_hr18_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_40k_voc12aug/ocrnet_hr18_512x512_40k_voc12aug_20200614_015958-714302be.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_40k_voc12aug/ocrnet_hr18_512x512_40k_voc12aug_20200614_015958.log.json) | +| OCRNet | HRNetV2p-W48 | 512x512 | 40000 | - | - | V100 | 77.14 | 79.71 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ocrnet/ocrnet_hr48_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_40k_voc12aug/ocrnet_hr48_512x512_40k_voc12aug_20200614_015958-255bc5ce.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_40k_voc12aug/ocrnet_hr48_512x512_40k_voc12aug_20200614_015958.log.json) | ## Citation diff --git a/configs/pidnet/README.md b/configs/pidnet/README.md index c8c3f24799..e23efbd3f3 100644 --- a/configs/pidnet/README.md +++ b/configs/pidnet/README.md @@ -8,7 +8,7 @@ Official Repo -Code Snippet +Code Snippet ## Abstract @@ -26,11 +26,11 @@ Two-branch network architecture has shown its efficiency and effectiveness for r ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------- | -------- | -------------- | ------ | ----- | ------------- | ----------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| PIDNet | PIDNet-S | 1024x1024 | 120000 | 3.38 | 80.82 | A100 | 78.74 | 80.87 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pidnet/pidnet-s_2xb6-120k_1024x1024-cityscapes.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-s_2xb6-120k_1024x1024-cityscapes/pidnet-s_2xb6-120k_1024x1024-cityscapes_20230302_191700-bb8e3bcc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-s_2xb6-120k_1024x1024-cityscapes/pidnet-s_2xb6-120k_1024x1024-cityscapes_20230302_191700.json) | -| PIDNet | PIDNet-M | 1024x1024 | 120000 | 5.14 | 71.98 | A100 | 80.22 | 82.05 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pidnet/pidnet-m_2xb6-120k_1024x1024-cityscapes.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-m_2xb6-120k_1024x1024-cityscapes/pidnet-m_2xb6-120k_1024x1024-cityscapes_20230301_143452-f9bcdbf3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-m_2xb6-120k_1024x1024-cityscapes/pidnet-m_2xb6-120k_1024x1024-cityscapes_20230301_143452.json) | -| PIDNet | PIDNet-L | 1024x1024 | 120000 | 5.83 | 60.06 | A100 | 80.89 | 82.37 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pidnet/pidnet-l_2xb6-120k_1024x1024-cityscapes.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-l_2xb6-120k_1024x1024-cityscapes/pidnet-l_2xb6-120k_1024x1024-cityscapes_20230303_114514-0783ca6b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-l_2xb6-120k_1024x1024-cityscapes/pidnet-l_2xb6-120k_1024x1024-cityscapes_20230303_114514.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------- | -------- | -------------- | ------ | ----- | ------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| PIDNet | PIDNet-S | 1024x1024 | 120000 | 3.38 | 80.82 | A100 | 78.74 | 80.87 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pidnet/pidnet-s_2xb6-120k_1024x1024-cityscapes.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-s_2xb6-120k_1024x1024-cityscapes/pidnet-s_2xb6-120k_1024x1024-cityscapes_20230302_191700-bb8e3bcc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-s_2xb6-120k_1024x1024-cityscapes/pidnet-s_2xb6-120k_1024x1024-cityscapes_20230302_191700.json) | +| PIDNet | PIDNet-M | 1024x1024 | 120000 | 5.14 | 71.98 | A100 | 80.22 | 82.05 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pidnet/pidnet-m_2xb6-120k_1024x1024-cityscapes.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-m_2xb6-120k_1024x1024-cityscapes/pidnet-m_2xb6-120k_1024x1024-cityscapes_20230301_143452-f9bcdbf3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-m_2xb6-120k_1024x1024-cityscapes/pidnet-m_2xb6-120k_1024x1024-cityscapes_20230301_143452.json) | +| PIDNet | PIDNet-L | 1024x1024 | 120000 | 5.83 | 60.06 | A100 | 80.89 | 82.37 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pidnet/pidnet-l_2xb6-120k_1024x1024-cityscapes.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-l_2xb6-120k_1024x1024-cityscapes/pidnet-l_2xb6-120k_1024x1024-cityscapes_20230303_114514-0783ca6b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pidnet/pidnet-l_2xb6-120k_1024x1024-cityscapes/pidnet-l_2xb6-120k_1024x1024-cityscapes_20230303_114514.json) | ## Notes diff --git a/configs/pidnet/metafile.yaml b/configs/pidnet/metafile.yaml index 9102ec51c5..51b514a487 100644 --- a/configs/pidnet/metafile.yaml +++ b/configs/pidnet/metafile.yaml @@ -33,7 +33,7 @@ Models: Paper: Title: 'PIDNet: A Real-time Semantic Segmentation Network Inspired from PID Controller' URL: https://arxiv.org/pdf/2206.02066.pdf - Code: https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/models/backbones/pidnet.py + Code: https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/models/backbones/pidnet.py Framework: PyTorch - Name: pidnet-m_2xb6-120k_1024x1024-cityscapes In Collection: PIDNet @@ -57,7 +57,7 @@ Models: Paper: Title: 'PIDNet: A Real-time Semantic Segmentation Network Inspired from PID Controller' URL: https://arxiv.org/pdf/2206.02066.pdf - Code: https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/models/backbones/pidnet.py + Code: https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/models/backbones/pidnet.py Framework: PyTorch - Name: pidnet-l_2xb6-120k_1024x1024-cityscapes In Collection: PIDNet @@ -81,5 +81,5 @@ Models: Paper: Title: 'PIDNet: A Real-time Semantic Segmentation Network Inspired from PID Controller' URL: https://arxiv.org/pdf/2206.02066.pdf - Code: https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/models/backbones/pidnet.py + Code: https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/models/backbones/pidnet.py Framework: PyTorch diff --git a/configs/point_rend/README.md b/configs/point_rend/README.md index 9aab8e03ee..487d3bcc7f 100644 --- a/configs/point_rend/README.md +++ b/configs/point_rend/README.md @@ -26,17 +26,17 @@ We present a new method for efficient high-quality image segmentation of objects ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| --------- | -------- | --------- | ------: | -------: | -------------- | ------ | ----: | ------------- | ------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| PointRend | R-50 | 512x1024 | 80000 | 3.1 | 8.48 | V100 | 76.47 | 78.13 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/point_rend/pointrend_r50_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r50_512x1024_80k_cityscapes/pointrend_r50_512x1024_80k_cityscapes_20200711_015821-bb1ff523.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r50_512x1024_80k_cityscapes/pointrend_r50_512x1024_80k_cityscapes-20200715_214714.log.json) | -| PointRend | R-101 | 512x1024 | 80000 | 4.2 | 7.00 | V100 | 78.30 | 79.97 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/point_rend/pointrend_r101_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r101_512x1024_80k_cityscapes/pointrend_r101_512x1024_80k_cityscapes_20200711_170850-d0ca84be.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r101_512x1024_80k_cityscapes/pointrend_r101_512x1024_80k_cityscapes-20200715_214824.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| --------- | -------- | --------- | ------: | -------: | -------------- | ------ | ----: | ------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| PointRend | R-50 | 512x1024 | 80000 | 3.1 | 8.48 | V100 | 76.47 | 78.13 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/point_rend/pointrend_r50_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r50_512x1024_80k_cityscapes/pointrend_r50_512x1024_80k_cityscapes_20200711_015821-bb1ff523.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r50_512x1024_80k_cityscapes/pointrend_r50_512x1024_80k_cityscapes-20200715_214714.log.json) | +| PointRend | R-101 | 512x1024 | 80000 | 4.2 | 7.00 | V100 | 78.30 | 79.97 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/point_rend/pointrend_r101_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r101_512x1024_80k_cityscapes/pointrend_r101_512x1024_80k_cityscapes_20200711_170850-d0ca84be.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r101_512x1024_80k_cityscapes/pointrend_r101_512x1024_80k_cityscapes-20200715_214824.log.json) | ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| --------- | -------- | --------- | ------: | -------: | -------------- | ------ | ----: | ------------- | --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| PointRend | R-50 | 512x512 | 160000 | 5.1 | 17.31 | V100 | 37.64 | 39.17 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/point_rend/pointrend_r50_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r50_512x512_160k_ade20k/pointrend_r50_512x512_160k_ade20k_20200807_232644-ac3febf2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r50_512x512_160k_ade20k/pointrend_r50_512x512_160k_ade20k-20200807_232644.log.json) | -| PointRend | R-101 | 512x512 | 160000 | 6.1 | 15.50 | V100 | 40.02 | 41.60 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/point_rend/pointrend_r101_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r101_512x512_160k_ade20k/pointrend_r101_512x512_160k_ade20k_20200808_030852-8834902a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r101_512x512_160k_ade20k/pointrend_r101_512x512_160k_ade20k-20200808_030852.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| --------- | -------- | --------- | ------: | -------: | -------------- | ------ | ----: | ------------- | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| PointRend | R-50 | 512x512 | 160000 | 5.1 | 17.31 | V100 | 37.64 | 39.17 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/point_rend/pointrend_r50_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r50_512x512_160k_ade20k/pointrend_r50_512x512_160k_ade20k_20200807_232644-ac3febf2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r50_512x512_160k_ade20k/pointrend_r50_512x512_160k_ade20k-20200807_232644.log.json) | +| PointRend | R-101 | 512x512 | 160000 | 6.1 | 15.50 | V100 | 40.02 | 41.60 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/point_rend/pointrend_r101_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r101_512x512_160k_ade20k/pointrend_r101_512x512_160k_ade20k_20200808_030852-8834902a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/point_rend/pointrend_r101_512x512_160k_ade20k/pointrend_r101_512x512_160k_ade20k-20200808_030852.log.json) | ## Citation diff --git a/configs/poolformer/README.md b/configs/poolformer/README.md index ba563a9928..987db33d98 100644 --- a/configs/poolformer/README.md +++ b/configs/poolformer/README.md @@ -48,13 +48,13 @@ pip install "mmcls>=1.0.0rc0" ### ADE20K -| Method | Backbone | Crop Size | pretrain | Batch Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | mIoU\* | mIoU\*(ms+flip) | config | download | -| ------ | -------------- | --------- | ----------- | ---------- | ------- | -------- | -------------- | ------ | ----- | ------------: | ------ | --------------: | ------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| FPN | PoolFormer-S12 | 512x512 | ImageNet-1K | 32 | 40000 | 4.17 | 23.48 | V100 | 36.68 | - | 37.07 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/poolformer/fpn_poolformer_s12_8xb4-40k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_s12_8x4_512x512_40k_ade20k/fpn_poolformer_s12_8x4_512x512_40k_ade20k_20220501_115154-b5aa2f49.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_s12_8x4_512x512_40k_ade20k/fpn_poolformer_s12_8x4_512x512_40k_ade20k_20220501_115154.log.json) | -| FPN | PoolFormer-S24 | 512x512 | ImageNet-1K | 32 | 40000 | 5.47 | 15.74 | V100 | 40.12 | - | 40.36 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/poolformer/fpn_poolformer_s24_8xb4-40k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_s24_8x4_512x512_40k_ade20k/fpn_poolformer_s24_8x4_512x512_40k_ade20k_20220503_222049-394a7cf7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_s24_8x4_512x512_40k_ade20k/fpn_poolformer_s24_8x4_512x512_40k_ade20k_20220503_222049.log.json) | -| FPN | PoolFormer-S36 | 512x512 | ImageNet-1K | 32 | 40000 | 6.77 | 11.34 | V100 | 41.61 | - | 41.81 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/poolformer/fpn_poolformer_s36_8xb4-40k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_s36_8x4_512x512_40k_ade20k/fpn_poolformer_s36_8x4_512x512_40k_ade20k_20220501_151122-b47e607d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_s36_8x4_512x512_40k_ade20k/fpn_poolformer_s36_8x4_512x512_40k_ade20k_20220501_151122.log.json) | -| FPN | PoolFormer-M36 | 512x512 | ImageNet-1K | 32 | 40000 | 8.59 | 8.97 | V100 | 41.95 | - | 42.35 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/poolformer/fpn_poolformer_m36_8xb4-40k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_m36_8x4_512x512_40k_ade20k/fpn_poolformer_m36_8x4_512x512_40k_ade20k_20220501_164230-3dc83921.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_m36_8x4_512x512_40k_ade20k/fpn_poolformer_m36_8x4_512x512_40k_ade20k_20220501_164230.log.json) | -| FPN | PoolFormer-M48 | 512x512 | ImageNet-1K | 32 | 40000 | 10.48 | 6.69 | V100 | 42.43 | - | 42.76 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/poolformer/fpn_poolformer_m48_8xb4-40k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_m48_8x4_512x512_40k_ade20k/fpn_poolformer_m48_8x4_512x512_40k_ade20k_20220504_003923-64168d3b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_m48_8x4_512x512_40k_ade20k/fpn_poolformer_m48_8x4_512x512_40k_ade20k_20220504_003923.log.json) | +| Method | Backbone | Crop Size | pretrain | Batch Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | mIoU\* | mIoU\*(ms+flip) | config | download | +| ------ | -------------- | --------- | ----------- | ---------- | ------- | -------- | -------------- | ------ | ----- | ------------: | ------ | --------------: | --------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| FPN | PoolFormer-S12 | 512x512 | ImageNet-1K | 32 | 40000 | 4.17 | 23.48 | V100 | 36.68 | - | 37.07 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/poolformer/fpn_poolformer_s12_8xb4-40k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_s12_8x4_512x512_40k_ade20k/fpn_poolformer_s12_8x4_512x512_40k_ade20k_20220501_115154-b5aa2f49.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_s12_8x4_512x512_40k_ade20k/fpn_poolformer_s12_8x4_512x512_40k_ade20k_20220501_115154.log.json) | +| FPN | PoolFormer-S24 | 512x512 | ImageNet-1K | 32 | 40000 | 5.47 | 15.74 | V100 | 40.12 | - | 40.36 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/poolformer/fpn_poolformer_s24_8xb4-40k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_s24_8x4_512x512_40k_ade20k/fpn_poolformer_s24_8x4_512x512_40k_ade20k_20220503_222049-394a7cf7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_s24_8x4_512x512_40k_ade20k/fpn_poolformer_s24_8x4_512x512_40k_ade20k_20220503_222049.log.json) | +| FPN | PoolFormer-S36 | 512x512 | ImageNet-1K | 32 | 40000 | 6.77 | 11.34 | V100 | 41.61 | - | 41.81 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/poolformer/fpn_poolformer_s36_8xb4-40k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_s36_8x4_512x512_40k_ade20k/fpn_poolformer_s36_8x4_512x512_40k_ade20k_20220501_151122-b47e607d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_s36_8x4_512x512_40k_ade20k/fpn_poolformer_s36_8x4_512x512_40k_ade20k_20220501_151122.log.json) | +| FPN | PoolFormer-M36 | 512x512 | ImageNet-1K | 32 | 40000 | 8.59 | 8.97 | V100 | 41.95 | - | 42.35 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/poolformer/fpn_poolformer_m36_8xb4-40k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_m36_8x4_512x512_40k_ade20k/fpn_poolformer_m36_8x4_512x512_40k_ade20k_20220501_164230-3dc83921.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_m36_8x4_512x512_40k_ade20k/fpn_poolformer_m36_8x4_512x512_40k_ade20k_20220501_164230.log.json) | +| FPN | PoolFormer-M48 | 512x512 | ImageNet-1K | 32 | 40000 | 10.48 | 6.69 | V100 | 42.43 | - | 42.76 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/poolformer/fpn_poolformer_m48_8xb4-40k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_m48_8x4_512x512_40k_ade20k/fpn_poolformer_m48_8x4_512x512_40k_ade20k_20220504_003923-64168d3b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/poolformer/fpn_poolformer_m48_8x4_512x512_40k_ade20k/fpn_poolformer_m48_8x4_512x512_40k_ade20k_20220504_003923.log.json) | Note: diff --git a/configs/psanet/README.md b/configs/psanet/README.md index d657326120..1f5680fbab 100644 --- a/configs/psanet/README.md +++ b/configs/psanet/README.md @@ -26,34 +26,34 @@ We notice information flow in convolutional neural networksis restricted insid ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| PSANet | R-50-D8 | 512x1024 | 40000 | 7 | 3.17 | V100 | 77.63 | 79.04 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x1024_40k_cityscapes/psanet_r50-d8_512x1024_40k_cityscapes_20200606_103117-99fac37c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x1024_40k_cityscapes/psanet_r50-d8_512x1024_40k_cityscapes_20200606_103117.log.json) | -| PSANet | R-101-D8 | 512x1024 | 40000 | 10.5 | 2.20 | V100 | 79.14 | 80.19 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x1024_40k_cityscapes/psanet_r101-d8_512x1024_40k_cityscapes_20200606_001418-27b9cfa7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x1024_40k_cityscapes/psanet_r101-d8_512x1024_40k_cityscapes_20200606_001418.log.json) | -| PSANet | R-50-D8 | 769x769 | 40000 | 7.9 | 1.40 | V100 | 77.99 | 79.64 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_769x769_40k_cityscapes/psanet_r50-d8_769x769_40k_cityscapes_20200530_033717-d5365506.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_769x769_40k_cityscapes/psanet_r50-d8_769x769_40k_cityscapes_20200530_033717.log.json) | -| PSANet | R-101-D8 | 769x769 | 40000 | 11.9 | 0.98 | V100 | 78.43 | 80.26 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_769x769_40k_cityscapes/psanet_r101-d8_769x769_40k_cityscapes_20200530_035107-997da1e6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_769x769_40k_cityscapes/psanet_r101-d8_769x769_40k_cityscapes_20200530_035107.log.json) | -| PSANet | R-50-D8 | 512x1024 | 80000 | - | - | V100 | 77.24 | 78.69 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x1024_80k_cityscapes/psanet_r50-d8_512x1024_80k_cityscapes_20200606_161842-ab60a24f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x1024_80k_cityscapes/psanet_r50-d8_512x1024_80k_cityscapes_20200606_161842.log.json) | -| PSANet | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 79.31 | 80.53 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x1024_80k_cityscapes/psanet_r101-d8_512x1024_80k_cityscapes_20200606_161823-0f73a169.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x1024_80k_cityscapes/psanet_r101-d8_512x1024_80k_cityscapes_20200606_161823.log.json) | -| PSANet | R-50-D8 | 769x769 | 80000 | - | - | V100 | 79.31 | 80.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_769x769_80k_cityscapes/psanet_r50-d8_769x769_80k_cityscapes_20200606_225134-fe42f49e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_769x769_80k_cityscapes/psanet_r50-d8_769x769_80k_cityscapes_20200606_225134.log.json) | -| PSANet | R-101-D8 | 769x769 | 80000 | - | - | V100 | 79.69 | 80.89 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_769x769_80k_cityscapes/psanet_r101-d8_769x769_80k_cityscapes_20200606_214550-7665827b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_769x769_80k_cityscapes/psanet_r101-d8_769x769_80k_cityscapes_20200606_214550.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| PSANet | R-50-D8 | 512x1024 | 40000 | 7 | 3.17 | V100 | 77.63 | 79.04 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/psanet/psanet_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x1024_40k_cityscapes/psanet_r50-d8_512x1024_40k_cityscapes_20200606_103117-99fac37c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x1024_40k_cityscapes/psanet_r50-d8_512x1024_40k_cityscapes_20200606_103117.log.json) | +| PSANet | R-101-D8 | 512x1024 | 40000 | 10.5 | 2.20 | V100 | 79.14 | 80.19 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/psanet/psanet_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x1024_40k_cityscapes/psanet_r101-d8_512x1024_40k_cityscapes_20200606_001418-27b9cfa7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x1024_40k_cityscapes/psanet_r101-d8_512x1024_40k_cityscapes_20200606_001418.log.json) | +| PSANet | R-50-D8 | 769x769 | 40000 | 7.9 | 1.40 | V100 | 77.99 | 79.64 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/psanet/psanet_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_769x769_40k_cityscapes/psanet_r50-d8_769x769_40k_cityscapes_20200530_033717-d5365506.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_769x769_40k_cityscapes/psanet_r50-d8_769x769_40k_cityscapes_20200530_033717.log.json) | +| PSANet | R-101-D8 | 769x769 | 40000 | 11.9 | 0.98 | V100 | 78.43 | 80.26 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/psanet/psanet_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_769x769_40k_cityscapes/psanet_r101-d8_769x769_40k_cityscapes_20200530_035107-997da1e6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_769x769_40k_cityscapes/psanet_r101-d8_769x769_40k_cityscapes_20200530_035107.log.json) | +| PSANet | R-50-D8 | 512x1024 | 80000 | - | - | V100 | 77.24 | 78.69 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/psanet/psanet_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x1024_80k_cityscapes/psanet_r50-d8_512x1024_80k_cityscapes_20200606_161842-ab60a24f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x1024_80k_cityscapes/psanet_r50-d8_512x1024_80k_cityscapes_20200606_161842.log.json) | +| PSANet | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 79.31 | 80.53 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/psanet/psanet_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x1024_80k_cityscapes/psanet_r101-d8_512x1024_80k_cityscapes_20200606_161823-0f73a169.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x1024_80k_cityscapes/psanet_r101-d8_512x1024_80k_cityscapes_20200606_161823.log.json) | +| PSANet | R-50-D8 | 769x769 | 80000 | - | - | V100 | 79.31 | 80.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/psanet/psanet_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_769x769_80k_cityscapes/psanet_r50-d8_769x769_80k_cityscapes_20200606_225134-fe42f49e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_769x769_80k_cityscapes/psanet_r50-d8_769x769_80k_cityscapes_20200606_225134.log.json) | +| PSANet | R-101-D8 | 769x769 | 80000 | - | - | V100 | 79.69 | 80.89 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/psanet/psanet_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_769x769_80k_cityscapes/psanet_r101-d8_769x769_80k_cityscapes_20200606_214550-7665827b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_769x769_80k_cityscapes/psanet_r101-d8_769x769_80k_cityscapes_20200606_214550.log.json) | ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| PSANet | R-50-D8 | 512x512 | 80000 | 9 | 18.91 | V100 | 41.14 | 41.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_80k_ade20k/psanet_r50-d8_512x512_80k_ade20k_20200614_144141-835e4b97.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_80k_ade20k/psanet_r50-d8_512x512_80k_ade20k_20200614_144141.log.json) | -| PSANet | R-101-D8 | 512x512 | 80000 | 12.5 | 13.13 | V100 | 43.80 | 44.75 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_80k_ade20k/psanet_r101-d8_512x512_80k_ade20k_20200614_185117-1fab60d4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_80k_ade20k/psanet_r101-d8_512x512_80k_ade20k_20200614_185117.log.json) | -| PSANet | R-50-D8 | 512x512 | 160000 | - | - | V100 | 41.67 | 42.95 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_160k_ade20k/psanet_r50-d8_512x512_160k_ade20k_20200615_161258-148077dd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_160k_ade20k/psanet_r50-d8_512x512_160k_ade20k_20200615_161258.log.json) | -| PSANet | R-101-D8 | 512x512 | 160000 | - | - | V100 | 43.74 | 45.38 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_160k_ade20k/psanet_r101-d8_512x512_160k_ade20k_20200615_161537-dbfa564c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_160k_ade20k/psanet_r101-d8_512x512_160k_ade20k_20200615_161537.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| PSANet | R-50-D8 | 512x512 | 80000 | 9 | 18.91 | V100 | 41.14 | 41.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/psanet/psanet_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_80k_ade20k/psanet_r50-d8_512x512_80k_ade20k_20200614_144141-835e4b97.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_80k_ade20k/psanet_r50-d8_512x512_80k_ade20k_20200614_144141.log.json) | +| PSANet | R-101-D8 | 512x512 | 80000 | 12.5 | 13.13 | V100 | 43.80 | 44.75 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/psanet/psanet_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_80k_ade20k/psanet_r101-d8_512x512_80k_ade20k_20200614_185117-1fab60d4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_80k_ade20k/psanet_r101-d8_512x512_80k_ade20k_20200614_185117.log.json) | +| PSANet | R-50-D8 | 512x512 | 160000 | - | - | V100 | 41.67 | 42.95 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/psanet/psanet_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_160k_ade20k/psanet_r50-d8_512x512_160k_ade20k_20200615_161258-148077dd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_160k_ade20k/psanet_r50-d8_512x512_160k_ade20k_20200615_161258.log.json) | +| PSANet | R-101-D8 | 512x512 | 160000 | - | - | V100 | 43.74 | 45.38 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/psanet/psanet_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_160k_ade20k/psanet_r101-d8_512x512_160k_ade20k_20200615_161537-dbfa564c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_160k_ade20k/psanet_r101-d8_512x512_160k_ade20k_20200615_161537.log.json) | ### Pascal VOC 2012 + Aug -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| PSANet | R-50-D8 | 512x512 | 20000 | 6.9 | 18.24 | V100 | 76.39 | 77.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_20k_voc12aug/psanet_r50-d8_512x512_20k_voc12aug_20200617_102413-2f1bbaa1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_20k_voc12aug/psanet_r50-d8_512x512_20k_voc12aug_20200617_102413.log.json) | -| PSANet | R-101-D8 | 512x512 | 20000 | 10.4 | 12.63 | V100 | 77.91 | 79.30 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_20k_voc12aug/psanet_r101-d8_512x512_20k_voc12aug_20200617_110624-946fef11.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_20k_voc12aug/psanet_r101-d8_512x512_20k_voc12aug_20200617_110624.log.json) | -| PSANet | R-50-D8 | 512x512 | 40000 | - | - | V100 | 76.30 | 77.35 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_40k_voc12aug/psanet_r50-d8_512x512_40k_voc12aug_20200613_161946-f596afb5.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_40k_voc12aug/psanet_r50-d8_512x512_40k_voc12aug_20200613_161946.log.json) | -| PSANet | R-101-D8 | 512x512 | 40000 | - | - | V100 | 77.73 | 79.05 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/psanet/psanet_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_40k_voc12aug/psanet_r101-d8_512x512_40k_voc12aug_20200613_161946-1f560f9e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_40k_voc12aug/psanet_r101-d8_512x512_40k_voc12aug_20200613_161946.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| PSANet | R-50-D8 | 512x512 | 20000 | 6.9 | 18.24 | V100 | 76.39 | 77.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/psanet/psanet_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_20k_voc12aug/psanet_r50-d8_512x512_20k_voc12aug_20200617_102413-2f1bbaa1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_20k_voc12aug/psanet_r50-d8_512x512_20k_voc12aug_20200617_102413.log.json) | +| PSANet | R-101-D8 | 512x512 | 20000 | 10.4 | 12.63 | V100 | 77.91 | 79.30 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/psanet/psanet_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_20k_voc12aug/psanet_r101-d8_512x512_20k_voc12aug_20200617_110624-946fef11.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_20k_voc12aug/psanet_r101-d8_512x512_20k_voc12aug_20200617_110624.log.json) | +| PSANet | R-50-D8 | 512x512 | 40000 | - | - | V100 | 76.30 | 77.35 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/psanet/psanet_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_40k_voc12aug/psanet_r50-d8_512x512_40k_voc12aug_20200613_161946-f596afb5.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_40k_voc12aug/psanet_r50-d8_512x512_40k_voc12aug_20200613_161946.log.json) | +| PSANet | R-101-D8 | 512x512 | 40000 | - | - | V100 | 77.73 | 79.05 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/psanet/psanet_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_40k_voc12aug/psanet_r101-d8_512x512_40k_voc12aug_20200613_161946-1f560f9e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_40k_voc12aug/psanet_r101-d8_512x512_40k_voc12aug_20200613_161946.log.json) | ## Citation diff --git a/configs/pspnet/README.md b/configs/pspnet/README.md index e1c2c112cb..4209d259b7 100644 --- a/configs/pspnet/README.md +++ b/configs/pspnet/README.md @@ -31,128 +31,128 @@ PSPNet-R50 D8 model structure ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------------- | ------------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| PSPNet | R-50-D8 | 512x1024 | 40000 | 6.1 | 4.07 | V100 | 77.85 | 79.18 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338.log.json) | -| PSPNet | R-101-D8 | 512x1024 | 40000 | 9.6 | 2.68 | V100 | 78.34 | 79.74 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_40k_cityscapes/pspnet_r101-d8_512x1024_40k_cityscapes_20200604_232751-467e7cf4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_40k_cityscapes/pspnet_r101-d8_512x1024_40k_cityscapes_20200604_232751.log.json) | -| PSPNet | R-50-D8 | 769x769 | 40000 | 6.9 | 1.76 | V100 | 78.26 | 79.88 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_769x769_40k_cityscapes/pspnet_r50-d8_769x769_40k_cityscapes_20200606_112725-86638686.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_769x769_40k_cityscapes/pspnet_r50-d8_769x769_40k_cityscapes_20200606_112725.log.json) | -| PSPNet | R-101-D8 | 769x769 | 40000 | 10.9 | 1.15 | V100 | 79.08 | 80.28 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_769x769_40k_cityscapes/pspnet_r101-d8_769x769_40k_cityscapes_20200606_112753-61c6f5be.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_769x769_40k_cityscapes/pspnet_r101-d8_769x769_40k_cityscapes_20200606_112753.log.json) | -| PSPNet | R-18-D8 | 512x1024 | 80000 | 1.7 | 15.71 | V100 | 74.87 | 76.04 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r18-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_512x1024_80k_cityscapes/pspnet_r18-d8_512x1024_80k_cityscapes_20201225_021458-09ffa746.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_512x1024_80k_cityscapes/pspnet_r18-d8_512x1024_80k_cityscapes-20201225_021458.log.json) | -| PSPNet | R-50-D8 | 512x1024 | 80000 | - | - | V100 | 78.55 | 79.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_80k_cityscapes/pspnet_r50-d8_512x1024_80k_cityscapes_20200606_112131-2376f12b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_80k_cityscapes/pspnet_r50-d8_512x1024_80k_cityscapes_20200606_112131.log.json) | -| PSPNet | R-50b-D8 rsb | 512x1024 | 80000 | 6.2 | 3.82 | V100 | 78.47 | 79.45 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8-rsb_4xb2-adamw-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_80k_cityscapes/pspnet_r50-d8_rsb-pretrain_512x1024_adamw_80k_cityscapes_20220315_123238-588c30be.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_80k_cityscapes/pspnet_r50-d8_rsb-pretrain_512x1024_adamw_80k_cityscapes_20220315_123238.log.json) | -| PSPNet | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 79.76 | 81.01 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_80k_cityscapes/pspnet_r101-d8_512x1024_80k_cityscapes_20200606_112211-e1e1100f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_80k_cityscapes/pspnet_r101-d8_512x1024_80k_cityscapes_20200606_112211.log.json) | -| PSPNet (FP16) | R-101-D8 | 512x1024 | 80000 | 5.34 | 8.77 | V100 | 79.46 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb2-amp-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_fp16_512x1024_80k_cityscapes/pspnet_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230919-a0875e5c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_fp16_512x1024_80k_cityscapes/pspnet_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230919.log.json) | -| PSPNet | R-18-D8 | 769x769 | 80000 | 1.9 | 6.20 | V100 | 75.90 | 77.86 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r18-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_769x769_80k_cityscapes/pspnet_r18-d8_769x769_80k_cityscapes_20201225_021458-3deefc62.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_769x769_80k_cityscapes/pspnet_r18-d8_769x769_80k_cityscapes-20201225_021458.log.json) | -| PSPNet | R-50-D8 | 769x769 | 80000 | - | - | V100 | 79.59 | 80.69 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_769x769_80k_cityscapes/pspnet_r50-d8_769x769_80k_cityscapes_20200606_210121-5ccf03dd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_769x769_80k_cityscapes/pspnet_r50-d8_769x769_80k_cityscapes_20200606_210121.log.json) | -| PSPNet | R-101-D8 | 769x769 | 80000 | - | - | V100 | 79.77 | 81.06 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.oz1z1penmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_769x769_80k_cityscapes/pspnet_r101-d8_769x769_80k_cityscapes_20200606_225055-dba412fa.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_769x769_80k_cityscapes/pspnet_r101-d8_769x769_80k_cityscapes_20200606_225055.log.json) | -| PSPNet | R-18b-D8 | 512x1024 | 80000 | 1.5 | 16.28 | V100 | 74.23 | 75.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r18b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18b-d8_512x1024_80k_cityscapes/pspnet_r18b-d8_512x1024_80k_cityscapes_20201226_063116-26928a60.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18b-d8_512x1024_80k_cityscapes/pspnet_r18b-d8_512x1024_80k_cityscapes-20201226_063116.log.json) | -| PSPNet | R-50b-D8 | 512x1024 | 80000 | 6.0 | 4.30 | V100 | 78.22 | 79.46 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50b-d8_512x1024_80k_cityscapes/pspnet_r50b-d8_512x1024_80k_cityscapes_20201225_094315-6344287a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50b-d8_512x1024_80k_cityscapes/pspnet_r50b-d8_512x1024_80k_cityscapes-20201225_094315.log.json) | -| PSPNet | R-101b-D8 | 512x1024 | 80000 | 9.5 | 2.76 | V100 | 79.69 | 80.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101b-d8_512x1024_80k_cityscapes/pspnet_r101b-d8_512x1024_80k_cityscapes_20201226_170012-3a4d38ab.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101b-d8_512x1024_80k_cityscapes/pspnet_r101b-d8_512x1024_80k_cityscapes-20201226_170012.log.json) | -| PSPNet | R-18b-D8 | 769x769 | 80000 | 1.7 | 6.41 | V100 | 74.92 | 76.90 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r18b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18b-d8_769x769_80k_cityscapes/pspnet_r18b-d8_769x769_80k_cityscapes_20201226_080942-bf98d186.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18b-d8_769x769_80k_cityscapes/pspnet_r18b-d8_769x769_80k_cityscapes-20201226_080942.log.json) | -| PSPNet | R-50b-D8 | 769x769 | 80000 | 6.8 | 1.88 | V100 | 78.50 | 79.96 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50b-d8_769x769_80k_cityscapes/pspnet_r50b-d8_769x769_80k_cityscapes_20201225_094316-4c643cf6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50b-d8_769x769_80k_cityscapes/pspnet_r50b-d8_769x769_80k_cityscapes-20201225_094316.log.json) | -| PSPNet | R-101b-D8 | 769x769 | 80000 | 10.8 | 1.17 | V100 | 78.87 | 80.04 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101b-d8_769x769_80k_cityscapes/pspnet_r101b-d8_769x769_80k_cityscapes_20201226_171823-f0e7c293.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101b-d8_769x769_80k_cityscapes/pspnet_r101b-d8_769x769_80k_cityscapes-20201226_171823.log.json) | -| PSPNet | R-50-D32 | 512x1024 | 80000 | 3.0 | 15.21 | V100 | 73.88 | 76.85 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50b-d32_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d32_512x1024_80k_cityscapes/pspnet_r50-d32_512x1024_80k_cityscapes_20220316_224840-9092b254.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d32_512x1024_80k_cityscapes/pspnet_r50-d32_512x1024_80k_cityscapes_20220316_224840.log.json) | -| PSPNet | R-50b-D32 rsb | 512x1024 | 80000 | 3.1 | 16.08 | V100 | 74.09 | 77.18 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d32_rsb_4xb2-adamw-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d32_rsb-pretrain_512x1024_adamw_80k_cityscapes/pspnet_r50-d32_rsb-pretrain_512x1024_adamw_80k_cityscapes_20220316_141229-dd9c9610.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d32_rsb-pretrain_512x1024_adamw_80k_cityscapes/pspnet_r50-d32_rsb-pretrain_512x1024_adamw_80k_cityscapes_20220316_141229.log.json) | -| PSPNet | R-50b-D32 | 512x1024 | 80000 | 2.9 | 15.41 | V100 | 72.61 | 75.51 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50b-d32_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50b-d32_512x1024_80k_cityscapes/pspnet_r50b-d32_512x1024_80k_cityscapes_20220311_152152-23bcaf8c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50b-d32_512x1024_80k_cityscapes/pspnet_r50b-d32_512x1024_80k_cityscapes_20220311_152152.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------------- | ------------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| PSPNet | R-50-D8 | 512x1024 | 40000 | 6.1 | 4.07 | V100 | 77.85 | 79.18 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338.log.json) | +| PSPNet | R-101-D8 | 512x1024 | 40000 | 9.6 | 2.68 | V100 | 78.34 | 79.74 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_40k_cityscapes/pspnet_r101-d8_512x1024_40k_cityscapes_20200604_232751-467e7cf4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_40k_cityscapes/pspnet_r101-d8_512x1024_40k_cityscapes_20200604_232751.log.json) | +| PSPNet | R-50-D8 | 769x769 | 40000 | 6.9 | 1.76 | V100 | 78.26 | 79.88 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r50-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_769x769_40k_cityscapes/pspnet_r50-d8_769x769_40k_cityscapes_20200606_112725-86638686.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_769x769_40k_cityscapes/pspnet_r50-d8_769x769_40k_cityscapes_20200606_112725.log.json) | +| PSPNet | R-101-D8 | 769x769 | 40000 | 10.9 | 1.15 | V100 | 79.08 | 80.28 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r101-d8_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_769x769_40k_cityscapes/pspnet_r101-d8_769x769_40k_cityscapes_20200606_112753-61c6f5be.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_769x769_40k_cityscapes/pspnet_r101-d8_769x769_40k_cityscapes_20200606_112753.log.json) | +| PSPNet | R-18-D8 | 512x1024 | 80000 | 1.7 | 15.71 | V100 | 74.87 | 76.04 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r18-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_512x1024_80k_cityscapes/pspnet_r18-d8_512x1024_80k_cityscapes_20201225_021458-09ffa746.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_512x1024_80k_cityscapes/pspnet_r18-d8_512x1024_80k_cityscapes-20201225_021458.log.json) | +| PSPNet | R-50-D8 | 512x1024 | 80000 | - | - | V100 | 78.55 | 79.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r50-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_80k_cityscapes/pspnet_r50-d8_512x1024_80k_cityscapes_20200606_112131-2376f12b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_80k_cityscapes/pspnet_r50-d8_512x1024_80k_cityscapes_20200606_112131.log.json) | +| PSPNet | R-50b-D8 rsb | 512x1024 | 80000 | 6.2 | 3.82 | V100 | 78.47 | 79.45 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r50-d8-rsb_4xb2-adamw-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_80k_cityscapes/pspnet_r50-d8_rsb-pretrain_512x1024_adamw_80k_cityscapes_20220315_123238-588c30be.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_80k_cityscapes/pspnet_r50-d8_rsb-pretrain_512x1024_adamw_80k_cityscapes_20220315_123238.log.json) | +| PSPNet | R-101-D8 | 512x1024 | 80000 | - | - | V100 | 79.76 | 81.01 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r101-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_80k_cityscapes/pspnet_r101-d8_512x1024_80k_cityscapes_20200606_112211-e1e1100f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_80k_cityscapes/pspnet_r101-d8_512x1024_80k_cityscapes_20200606_112211.log.json) | +| PSPNet (FP16) | R-101-D8 | 512x1024 | 80000 | 5.34 | 8.77 | V100 | 79.46 | - | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r101-d8_4xb2-amp-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_fp16_512x1024_80k_cityscapes/pspnet_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230919-a0875e5c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_fp16_512x1024_80k_cityscapes/pspnet_r101-d8_fp16_512x1024_80k_cityscapes_20200717_230919.log.json) | +| PSPNet | R-18-D8 | 769x769 | 80000 | 1.9 | 6.20 | V100 | 75.90 | 77.86 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r18-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_769x769_80k_cityscapes/pspnet_r18-d8_769x769_80k_cityscapes_20201225_021458-3deefc62.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_769x769_80k_cityscapes/pspnet_r18-d8_769x769_80k_cityscapes-20201225_021458.log.json) | +| PSPNet | R-50-D8 | 769x769 | 80000 | - | - | V100 | 79.59 | 80.69 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r50-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_769x769_80k_cityscapes/pspnet_r50-d8_769x769_80k_cityscapes_20200606_210121-5ccf03dd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_769x769_80k_cityscapes/pspnet_r50-d8_769x769_80k_cityscapes_20200606_210121.log.json) | +| PSPNet | R-101-D8 | 769x769 | 80000 | - | - | V100 | 79.77 | 81.06 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r101-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.oz1z1penmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_769x769_80k_cityscapes/pspnet_r101-d8_769x769_80k_cityscapes_20200606_225055-dba412fa.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_769x769_80k_cityscapes/pspnet_r101-d8_769x769_80k_cityscapes_20200606_225055.log.json) | +| PSPNet | R-18b-D8 | 512x1024 | 80000 | 1.5 | 16.28 | V100 | 74.23 | 75.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r18b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18b-d8_512x1024_80k_cityscapes/pspnet_r18b-d8_512x1024_80k_cityscapes_20201226_063116-26928a60.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18b-d8_512x1024_80k_cityscapes/pspnet_r18b-d8_512x1024_80k_cityscapes-20201226_063116.log.json) | +| PSPNet | R-50b-D8 | 512x1024 | 80000 | 6.0 | 4.30 | V100 | 78.22 | 79.46 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r50b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50b-d8_512x1024_80k_cityscapes/pspnet_r50b-d8_512x1024_80k_cityscapes_20201225_094315-6344287a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50b-d8_512x1024_80k_cityscapes/pspnet_r50b-d8_512x1024_80k_cityscapes-20201225_094315.log.json) | +| PSPNet | R-101b-D8 | 512x1024 | 80000 | 9.5 | 2.76 | V100 | 79.69 | 80.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r101b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101b-d8_512x1024_80k_cityscapes/pspnet_r101b-d8_512x1024_80k_cityscapes_20201226_170012-3a4d38ab.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101b-d8_512x1024_80k_cityscapes/pspnet_r101b-d8_512x1024_80k_cityscapes-20201226_170012.log.json) | +| PSPNet | R-18b-D8 | 769x769 | 80000 | 1.7 | 6.41 | V100 | 74.92 | 76.90 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r18b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18b-d8_769x769_80k_cityscapes/pspnet_r18b-d8_769x769_80k_cityscapes_20201226_080942-bf98d186.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18b-d8_769x769_80k_cityscapes/pspnet_r18b-d8_769x769_80k_cityscapes-20201226_080942.log.json) | +| PSPNet | R-50b-D8 | 769x769 | 80000 | 6.8 | 1.88 | V100 | 78.50 | 79.96 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r50b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50b-d8_769x769_80k_cityscapes/pspnet_r50b-d8_769x769_80k_cityscapes_20201225_094316-4c643cf6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50b-d8_769x769_80k_cityscapes/pspnet_r50b-d8_769x769_80k_cityscapes-20201225_094316.log.json) | +| PSPNet | R-101b-D8 | 769x769 | 80000 | 10.8 | 1.17 | V100 | 78.87 | 80.04 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r101b-d8_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101b-d8_769x769_80k_cityscapes/pspnet_r101b-d8_769x769_80k_cityscapes_20201226_171823-f0e7c293.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101b-d8_769x769_80k_cityscapes/pspnet_r101b-d8_769x769_80k_cityscapes-20201226_171823.log.json) | +| PSPNet | R-50-D32 | 512x1024 | 80000 | 3.0 | 15.21 | V100 | 73.88 | 76.85 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r50b-d32_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d32_512x1024_80k_cityscapes/pspnet_r50-d32_512x1024_80k_cityscapes_20220316_224840-9092b254.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d32_512x1024_80k_cityscapes/pspnet_r50-d32_512x1024_80k_cityscapes_20220316_224840.log.json) | +| PSPNet | R-50b-D32 rsb | 512x1024 | 80000 | 3.1 | 16.08 | V100 | 74.09 | 77.18 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r50-d32_rsb_4xb2-adamw-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d32_rsb-pretrain_512x1024_adamw_80k_cityscapes/pspnet_r50-d32_rsb-pretrain_512x1024_adamw_80k_cityscapes_20220316_141229-dd9c9610.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d32_rsb-pretrain_512x1024_adamw_80k_cityscapes/pspnet_r50-d32_rsb-pretrain_512x1024_adamw_80k_cityscapes_20220316_141229.log.json) | +| PSPNet | R-50b-D32 | 512x1024 | 80000 | 2.9 | 15.41 | V100 | 72.61 | 75.51 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r50b-d32_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50b-d32_512x1024_80k_cityscapes/pspnet_r50b-d32_512x1024_80k_cityscapes_20220311_152152-23bcaf8c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50b-d32_512x1024_80k_cityscapes/pspnet_r50b-d32_512x1024_80k_cityscapes_20220311_152152.log.json) | ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| PSPNet | R-50-D8 | 512x512 | 80000 | 8.5 | 23.53 | V100 | 41.13 | 41.94 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_80k_ade20k/pspnet_r50-d8_512x512_80k_ade20k_20200615_014128-15a8b914.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_80k_ade20k/pspnet_r50-d8_512x512_80k_ade20k_20200615_014128.log.json) | -| PSPNet | R-101-D8 | 512x512 | 80000 | 12 | 15.30 | V100 | 43.57 | 44.35 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_80k_ade20k/pspnet_r101-d8_512x512_80k_ade20k_20200614_031423-b6e782f0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_80k_ade20k/pspnet_r101-d8_512x512_80k_ade20k_20200614_031423.log.json) | -| PSPNet | R-50-D8 | 512x512 | 160000 | - | - | V100 | 42.48 | 43.44 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_160k_ade20k/pspnet_r50-d8_512x512_160k_ade20k_20200615_184358-1890b0bd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_160k_ade20k/pspnet_r50-d8_512x512_160k_ade20k_20200615_184358.log.json) | -| PSPNet | R-101-D8 | 512x512 | 160000 | - | - | V100 | 44.39 | 45.35 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_160k_ade20k/pspnet_r101-d8_512x512_160k_ade20k_20200615_100650-967c316f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_160k_ade20k/pspnet_r101-d8_512x512_160k_ade20k_20200615_100650.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| PSPNet | R-50-D8 | 512x512 | 80000 | 8.5 | 23.53 | V100 | 41.13 | 41.94 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r50-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_80k_ade20k/pspnet_r50-d8_512x512_80k_ade20k_20200615_014128-15a8b914.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_80k_ade20k/pspnet_r50-d8_512x512_80k_ade20k_20200615_014128.log.json) | +| PSPNet | R-101-D8 | 512x512 | 80000 | 12 | 15.30 | V100 | 43.57 | 44.35 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r101-d8_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_80k_ade20k/pspnet_r101-d8_512x512_80k_ade20k_20200614_031423-b6e782f0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_80k_ade20k/pspnet_r101-d8_512x512_80k_ade20k_20200614_031423.log.json) | +| PSPNet | R-50-D8 | 512x512 | 160000 | - | - | V100 | 42.48 | 43.44 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r50-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_160k_ade20k/pspnet_r50-d8_512x512_160k_ade20k_20200615_184358-1890b0bd.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_160k_ade20k/pspnet_r50-d8_512x512_160k_ade20k_20200615_184358.log.json) | +| PSPNet | R-101-D8 | 512x512 | 160000 | - | - | V100 | 44.39 | 45.35 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r101-d8_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_160k_ade20k/pspnet_r101-d8_512x512_160k_ade20k_20200615_100650-967c316f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_160k_ade20k/pspnet_r101-d8_512x512_160k_ade20k_20200615_100650.log.json) | ### Pascal VOC 2012 + Aug -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| PSPNet | R-50-D8 | 512x512 | 20000 | 6.1 | 23.59 | V100 | 76.78 | 77.61 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_20k_voc12aug/pspnet_r50-d8_512x512_20k_voc12aug_20200617_101958-ed5dfbd9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_20k_voc12aug/pspnet_r50-d8_512x512_20k_voc12aug_20200617_101958.log.json) | -| PSPNet | R-101-D8 | 512x512 | 20000 | 9.6 | 15.02 | V100 | 78.47 | 79.25 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_20k_voc12aug/pspnet_r101-d8_512x512_20k_voc12aug_20200617_102003-4aef3c9a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_20k_voc12aug/pspnet_r101-d8_512x512_20k_voc12aug_20200617_102003.log.json) | -| PSPNet | R-50-D8 | 512x512 | 40000 | - | - | V100 | 77.29 | 78.48 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_40k_voc12aug/pspnet_r50-d8_512x512_40k_voc12aug_20200613_161222-ae9c1b8c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_40k_voc12aug/pspnet_r50-d8_512x512_40k_voc12aug_20200613_161222.log.json) | -| PSPNet | R-101-D8 | 512x512 | 40000 | - | - | V100 | 78.52 | 79.57 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_40k_voc12aug/pspnet_r101-d8_512x512_40k_voc12aug_20200613_161222-bc933b18.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_40k_voc12aug/pspnet_r101-d8_512x512_40k_voc12aug_20200613_161222.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| PSPNet | R-50-D8 | 512x512 | 20000 | 6.1 | 23.59 | V100 | 76.78 | 77.61 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r50-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_20k_voc12aug/pspnet_r50-d8_512x512_20k_voc12aug_20200617_101958-ed5dfbd9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_20k_voc12aug/pspnet_r50-d8_512x512_20k_voc12aug_20200617_101958.log.json) | +| PSPNet | R-101-D8 | 512x512 | 20000 | 9.6 | 15.02 | V100 | 78.47 | 79.25 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r101-d8_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_20k_voc12aug/pspnet_r101-d8_512x512_20k_voc12aug_20200617_102003-4aef3c9a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_20k_voc12aug/pspnet_r101-d8_512x512_20k_voc12aug_20200617_102003.log.json) | +| PSPNet | R-50-D8 | 512x512 | 40000 | - | - | V100 | 77.29 | 78.48 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r50-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_40k_voc12aug/pspnet_r50-d8_512x512_40k_voc12aug_20200613_161222-ae9c1b8c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_40k_voc12aug/pspnet_r50-d8_512x512_40k_voc12aug_20200613_161222.log.json) | +| PSPNet | R-101-D8 | 512x512 | 40000 | - | - | V100 | 78.52 | 79.57 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r101-d8_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_40k_voc12aug/pspnet_r101-d8_512x512_40k_voc12aug_20200613_161222-bc933b18.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_40k_voc12aug/pspnet_r101-d8_512x512_40k_voc12aug_20200613_161222.log.json) | ### Pascal Context -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| PSPNet | R-101-D8 | 480x480 | 40000 | 8.8 | 9.68 | V100 | 46.60 | 47.78 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-40k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_40k_pascal_context/pspnet_r101-d8_480x480_40k_pascal_context_20200911_211210-bf0f5d7c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_40k_pascal_context/pspnet_r101-d8_480x480_40k_pascal_context-20200911_211210.log.json) | -| PSPNet | R-101-D8 | 480x480 | 80000 | - | - | V100 | 46.03 | 47.15 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-80k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_80k_pascal_context/pspnet_r101-d8_480x480_80k_pascal_context_20200911_190530-c86d6233.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_80k_pascal_context/pspnet_r101-d8_480x480_80k_pascal_context-20200911_190530.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| PSPNet | R-101-D8 | 480x480 | 40000 | 8.8 | 9.68 | V100 | 46.60 | 47.78 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r101-d8_4xb4-40k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_40k_pascal_context/pspnet_r101-d8_480x480_40k_pascal_context_20200911_211210-bf0f5d7c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_40k_pascal_context/pspnet_r101-d8_480x480_40k_pascal_context-20200911_211210.log.json) | +| PSPNet | R-101-D8 | 480x480 | 80000 | - | - | V100 | 46.03 | 47.15 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r101-d8_4xb4-80k_pascal-context-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_80k_pascal_context/pspnet_r101-d8_480x480_80k_pascal_context_20200911_190530-c86d6233.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_80k_pascal_context/pspnet_r101-d8_480x480_80k_pascal_context-20200911_190530.log.json) | ### Pascal Context 59 -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| PSPNet | R-101-D8 | 480x480 | 40000 | - | - | V100 | 52.02 | 53.54 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-40k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_40k_pascal_context_59/pspnet_r101-d8_480x480_40k_pascal_context_59_20210416_114524-86d44cd4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_40k_pascal_context_59/pspnet_r101-d8_480x480_40k_pascal_context_59-20210416_114524.log.json) | -| PSPNet | R-101-D8 | 480x480 | 80000 | - | - | V100 | 52.47 | 53.99 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-80k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_80k_pascal_context_59/pspnet_r101-d8_480x480_80k_pascal_context_59_20210416_114418-fa6caaa2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_80k_pascal_context_59/pspnet_r101-d8_480x480_80k_pascal_context_59-20210416_114418.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| PSPNet | R-101-D8 | 480x480 | 40000 | - | - | V100 | 52.02 | 53.54 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r101-d8_4xb4-40k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_40k_pascal_context_59/pspnet_r101-d8_480x480_40k_pascal_context_59_20210416_114524-86d44cd4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_40k_pascal_context_59/pspnet_r101-d8_480x480_40k_pascal_context_59-20210416_114524.log.json) | +| PSPNet | R-101-D8 | 480x480 | 80000 | - | - | V100 | 52.47 | 53.99 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r101-d8_4xb4-80k_pascal-context-59-480x480.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_80k_pascal_context_59/pspnet_r101-d8_480x480_80k_pascal_context_59_20210416_114418-fa6caaa2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_480x480_80k_pascal_context_59/pspnet_r101-d8_480x480_80k_pascal_context_59-20210416_114418.log.json) | ### Dark Zurich and Nighttime Driving We support evaluation results on these two datasets using models above trained on Cityscapes training set. -| Method | Backbone | Training Dataset | Test Dataset | mIoU | config | evaluation checkpoint | -| ------ | --------- | ----------------------- | ------------------------- | ----- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| PSPNet | R-50-D8 | Cityscapes Training set | Dark Zurich | 10.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb2-40k_cityscapes-512x1024_dark-zurich-1920x1080.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338.log.json) | -| PSPNet | R-50-D8 | Cityscapes Training set | Nighttime Driving | 23.02 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb2-40k_cityscapes-512x1024_night-driving-1920x1080.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338.log.json) | -| PSPNet | R-50-D8 | Cityscapes Training set | Cityscapes Validation set | 77.85 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338.log.json) | -| PSPNet | R-101-D8 | Cityscapes Training set | Dark Zurich | 10.16 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb2-40k_cityscapes-512x1024_dark-zurich-1920x1080.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_40k_cityscapes/pspnet_r101-d8_512x1024_40k_cityscapes_20200604_232751-467e7cf4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_40k_cityscapes/pspnet_r101-d8_512x1024_40k_cityscapes_20200604_232751.log.json) | -| PSPNet | R-101-D8 | Cityscapes Training set | Nighttime Driving | 20.25 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb2-40k_cityscapes-512x1024_night-driving-1920x1080.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_40k_cityscapes/pspnet_r101-d8_512x1024_40k_cityscapes_20200604_232751-467e7cf4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_40k_cityscapes/pspnet_r101-d8_512x1024_40k_cityscapes_20200604_232751.log.json) | -| PSPNet | R-101-D8 | Cityscapes Training set | Cityscapes Validation set | 78.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_40k_cityscapes/pspnet_r101-d8_512x1024_40k_cityscapes_20200604_232751-467e7cf4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_40k_cityscapes/pspnet_r101-d8_512x1024_40k_cityscapes_20200604_232751.log.json) | -| PSPNet | R-101b-D8 | Cityscapes Training set | Dark Zurich | 15.54 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101b-d8_4xb2-80k_cityscapes-512x1024_dark-zurich-1920x1080.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101b-d8_512x1024_80k_cityscapes/pspnet_r101b-d8_512x1024_80k_cityscapes_20201226_170012-3a4d38ab.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101b-d8_512x1024_80k_cityscapes/pspnet_r101b-d8_512x1024_80k_cityscapes-20201226_170012.log.json) | -| PSPNet | R-101b-D8 | Cityscapes Training set | Nighttime Driving | 22.25 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101b-d8_4xb2-80k_cityscapes-512x1024_night-driving-1920x1080.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101b-d8_512x1024_80k_cityscapes/pspnet_r101b-d8_512x1024_80k_cityscapes_20201226_170012-3a4d38ab.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101b-d8_512x1024_80k_cityscapes/pspnet_r101b-d8_512x1024_80k_cityscapes-20201226_170012.log.json) | -| PSPNet | R-101b-D8 | Cityscapes Training set | Cityscapes Validation set | 79.69 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101b-d8_512x1024_80k_cityscapes/pspnet_r101b-d8_512x1024_80k_cityscapes_20201226_170012-3a4d38ab.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101b-d8_512x1024_80k_cityscapes/pspnet_r101b-d8_512x1024_80k_cityscapes-20201226_170012.log.json) | +| Method | Backbone | Training Dataset | Test Dataset | mIoU | config | evaluation checkpoint | +| ------ | --------- | ----------------------- | ------------------------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| PSPNet | R-50-D8 | Cityscapes Training set | Dark Zurich | 10.91 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r50-d8_4xb2-40k_cityscapes-512x1024_dark-zurich-1920x1080.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338.log.json) | +| PSPNet | R-50-D8 | Cityscapes Training set | Nighttime Driving | 23.02 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r50-d8_4xb2-40k_cityscapes-512x1024_night-driving-1920x1080.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338.log.json) | +| PSPNet | R-50-D8 | Cityscapes Training set | Cityscapes Validation set | 77.85 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r50-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338.log.json) | +| PSPNet | R-101-D8 | Cityscapes Training set | Dark Zurich | 10.16 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r101-d8_4xb2-40k_cityscapes-512x1024_dark-zurich-1920x1080.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_40k_cityscapes/pspnet_r101-d8_512x1024_40k_cityscapes_20200604_232751-467e7cf4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_40k_cityscapes/pspnet_r101-d8_512x1024_40k_cityscapes_20200604_232751.log.json) | +| PSPNet | R-101-D8 | Cityscapes Training set | Nighttime Driving | 20.25 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r101-d8_4xb2-40k_cityscapes-512x1024_night-driving-1920x1080.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_40k_cityscapes/pspnet_r101-d8_512x1024_40k_cityscapes_20200604_232751-467e7cf4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_40k_cityscapes/pspnet_r101-d8_512x1024_40k_cityscapes_20200604_232751.log.json) | +| PSPNet | R-101-D8 | Cityscapes Training set | Cityscapes Validation set | 78.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r101-d8_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_40k_cityscapes/pspnet_r101-d8_512x1024_40k_cityscapes_20200604_232751-467e7cf4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_40k_cityscapes/pspnet_r101-d8_512x1024_40k_cityscapes_20200604_232751.log.json) | +| PSPNet | R-101b-D8 | Cityscapes Training set | Dark Zurich | 15.54 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r101b-d8_4xb2-80k_cityscapes-512x1024_dark-zurich-1920x1080.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101b-d8_512x1024_80k_cityscapes/pspnet_r101b-d8_512x1024_80k_cityscapes_20201226_170012-3a4d38ab.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101b-d8_512x1024_80k_cityscapes/pspnet_r101b-d8_512x1024_80k_cityscapes-20201226_170012.log.json) | +| PSPNet | R-101b-D8 | Cityscapes Training set | Nighttime Driving | 22.25 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r101b-d8_4xb2-80k_cityscapes-512x1024_night-driving-1920x1080.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101b-d8_512x1024_80k_cityscapes/pspnet_r101b-d8_512x1024_80k_cityscapes_20201226_170012-3a4d38ab.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101b-d8_512x1024_80k_cityscapes/pspnet_r101b-d8_512x1024_80k_cityscapes-20201226_170012.log.json) | +| PSPNet | R-101b-D8 | Cityscapes Training set | Cityscapes Validation set | 79.69 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r101b-d8_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101b-d8_512x1024_80k_cityscapes/pspnet_r101b-d8_512x1024_80k_cityscapes_20201226_170012-3a4d38ab.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101b-d8_512x1024_80k_cityscapes/pspnet_r101b-d8_512x1024_80k_cityscapes-20201226_170012.log.json) | ### COCO-Stuff 10k -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| PSPNet | R-50-D8 | 512x512 | 20000 | 9.6 | 20.5 | V100 | 35.69 | 36.62 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-20k_coco-stuff10k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_20k_coco-stuff10k/pspnet_r50-d8_512x512_4x4_20k_coco-stuff10k_20210820_203258-b88df27f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_20k_coco-stuff10k/pspnet_r50-d8_512x512_4x4_20k_coco-stuff10k_20210820_203258.log.json) | -| PSPNet | R-101-D8 | 512x512 | 20000 | 13.2 | 11.1 | V100 | 37.26 | 38.52 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-20k_coco-stuff10k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_20k_coco-stuff10k/pspnet_r101-d8_512x512_4x4_20k_coco-stuff10k_20210820_232135-76aae482.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_20k_coco-stuff10k/pspnet_r101-d8_512x512_4x4_20k_coco-stuff10k_20210820_232135.log.json) | -| PSPNet | R-50-D8 | 512x512 | 40000 | - | - | V100 | 36.33 | 37.24 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-40k_coco-stuff10k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_40k_coco-stuff10k/pspnet_r50-d8_512x512_4x4_40k_coco-stuff10k_20210821_030857-92e2902b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_40k_coco-stuff10k/pspnet_r50-d8_512x512_4x4_40k_coco-stuff10k_20210821_030857.log.json) | -| PSPNet | R-101-D8 | 512x512 | 40000 | - | - | V100 | 37.76 | 38.86 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-40k_coco-stuff10k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_40k_coco-stuff10k/pspnet_r101-d8_512x512_4x4_40k_coco-stuff10k_20210821_014022-831aec95.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_40k_coco-stuff10k/pspnet_r101-d8_512x512_4x4_40k_coco-stuff10k_20210821_014022.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| PSPNet | R-50-D8 | 512x512 | 20000 | 9.6 | 20.5 | V100 | 35.69 | 36.62 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r50-d8_4xb4-20k_coco-stuff10k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_20k_coco-stuff10k/pspnet_r50-d8_512x512_4x4_20k_coco-stuff10k_20210820_203258-b88df27f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_20k_coco-stuff10k/pspnet_r50-d8_512x512_4x4_20k_coco-stuff10k_20210820_203258.log.json) | +| PSPNet | R-101-D8 | 512x512 | 20000 | 13.2 | 11.1 | V100 | 37.26 | 38.52 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r101-d8_4xb4-20k_coco-stuff10k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_20k_coco-stuff10k/pspnet_r101-d8_512x512_4x4_20k_coco-stuff10k_20210820_232135-76aae482.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_20k_coco-stuff10k/pspnet_r101-d8_512x512_4x4_20k_coco-stuff10k_20210820_232135.log.json) | +| PSPNet | R-50-D8 | 512x512 | 40000 | - | - | V100 | 36.33 | 37.24 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r50-d8_4xb4-40k_coco-stuff10k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_40k_coco-stuff10k/pspnet_r50-d8_512x512_4x4_40k_coco-stuff10k_20210821_030857-92e2902b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_40k_coco-stuff10k/pspnet_r50-d8_512x512_4x4_40k_coco-stuff10k_20210821_030857.log.json) | +| PSPNet | R-101-D8 | 512x512 | 40000 | - | - | V100 | 37.76 | 38.86 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r101-d8_4xb4-40k_coco-stuff10k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_40k_coco-stuff10k/pspnet_r101-d8_512x512_4x4_40k_coco-stuff10k_20210821_014022-831aec95.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_40k_coco-stuff10k/pspnet_r101-d8_512x512_4x4_40k_coco-stuff10k_20210821_014022.log.json) | ### COCO-Stuff 164k -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| PSPNet | R-50-D8 | 512x512 | 80000 | 9.6 | 20.5 | V100 | 38.80 | 39.19 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-80k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_80k_coco-stuff164k/pspnet_r50-d8_512x512_4x4_80k_coco-stuff164k_20210707_152034-0e41b2db.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_80k_coco-stuff164k/pspnet_r50-d8_512x512_4x4_80k_coco-stuff164k_20210707_152034.log.json) | -| PSPNet | R-101-D8 | 512x512 | 80000 | 13.2 | 11.1 | V100 | 40.34 | 40.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-80k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_80k_coco-stuff164k/pspnet_r101-d8_512x512_4x4_80k_coco-stuff164k_20210707_152034-7eb41789.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_80k_coco-stuff164k/pspnet_r101-d8_512x512_4x4_80k_coco-stuff164k_20210707_152034.log.json) | -| PSPNet | R-50-D8 | 512x512 | 160000 | - | - | V100 | 39.64 | 39.97 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-160k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_160k_coco-stuff164k/pspnet_r50-d8_512x512_4x4_160k_coco-stuff164k_20210707_152004-51276a57.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_160k_coco-stuff164k/pspnet_r50-d8_512x512_4x4_160k_coco-stuff164k_20210707_152004.log.json) | -| PSPNet | R-101-D8 | 512x512 | 160000 | - | - | V100 | 41.28 | 41.66 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-160k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_160k_coco-stuff164k/pspnet_r101-d8_512x512_4x4_160k_coco-stuff164k_20210707_152004-4af9621b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_160k_coco-stuff164k/pspnet_r101-d8_512x512_4x4_160k_coco-stuff164k_20210707_152004.log.json) | -| PSPNet | R-50-D8 | 512x512 | 320000 | - | - | V100 | 40.53 | 40.75 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-320k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_320k_coco-stuff164k/pspnet_r50-d8_512x512_4x4_320k_coco-stuff164k_20210707_152004-be9610cc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_320k_coco-stuff164k/pspnet_r50-d8_512x512_4x4_320k_coco-stuff164k_20210707_152004.log.json) | -| PSPNet | R-101-D8 | 512x512 | 320000 | - | - | V100 | 41.95 | 42.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-320k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_320k_coco-stuff164k/pspnet_r101-d8_512x512_4x4_320k_coco-stuff164k_20210707_152004-72220c60.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_320k_coco-stuff164k/pspnet_r101-d8_512x512_4x4_320k_coco-stuff164k_20210707_152004.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| PSPNet | R-50-D8 | 512x512 | 80000 | 9.6 | 20.5 | V100 | 38.80 | 39.19 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r50-d8_4xb4-80k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_80k_coco-stuff164k/pspnet_r50-d8_512x512_4x4_80k_coco-stuff164k_20210707_152034-0e41b2db.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_80k_coco-stuff164k/pspnet_r50-d8_512x512_4x4_80k_coco-stuff164k_20210707_152034.log.json) | +| PSPNet | R-101-D8 | 512x512 | 80000 | 13.2 | 11.1 | V100 | 40.34 | 40.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r101-d8_4xb4-80k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_80k_coco-stuff164k/pspnet_r101-d8_512x512_4x4_80k_coco-stuff164k_20210707_152034-7eb41789.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_80k_coco-stuff164k/pspnet_r101-d8_512x512_4x4_80k_coco-stuff164k_20210707_152034.log.json) | +| PSPNet | R-50-D8 | 512x512 | 160000 | - | - | V100 | 39.64 | 39.97 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r50-d8_4xb4-160k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_160k_coco-stuff164k/pspnet_r50-d8_512x512_4x4_160k_coco-stuff164k_20210707_152004-51276a57.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_160k_coco-stuff164k/pspnet_r50-d8_512x512_4x4_160k_coco-stuff164k_20210707_152004.log.json) | +| PSPNet | R-101-D8 | 512x512 | 160000 | - | - | V100 | 41.28 | 41.66 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r101-d8_4xb4-160k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_160k_coco-stuff164k/pspnet_r101-d8_512x512_4x4_160k_coco-stuff164k_20210707_152004-4af9621b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_160k_coco-stuff164k/pspnet_r101-d8_512x512_4x4_160k_coco-stuff164k_20210707_152004.log.json) | +| PSPNet | R-50-D8 | 512x512 | 320000 | - | - | V100 | 40.53 | 40.75 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r50-d8_4xb4-320k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_320k_coco-stuff164k/pspnet_r50-d8_512x512_4x4_320k_coco-stuff164k_20210707_152004-be9610cc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_4x4_320k_coco-stuff164k/pspnet_r50-d8_512x512_4x4_320k_coco-stuff164k_20210707_152004.log.json) | +| PSPNet | R-101-D8 | 512x512 | 320000 | - | - | V100 | 41.95 | 42.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r101-d8_4xb4-320k_coco-stuff164k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_320k_coco-stuff164k/pspnet_r101-d8_512x512_4x4_320k_coco-stuff164k_20210707_152004-72220c60.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_4x4_320k_coco-stuff164k/pspnet_r101-d8_512x512_4x4_320k_coco-stuff164k_20210707_152004.log.json) | ### LoveDA -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| PSPNet | R-18-D8 | 512x512 | 80000 | 1.45 | 26.87 | V100 | 48.62 | 47.57 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r18-d8_4xb4-80k_loveda-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_512x512_80k_loveda/pspnet_r18-d8_512x512_80k_loveda_20211105_052100-b97697f1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_512x512_80k_loveda/pspnet_r18-d8_512x512_80k_loveda_20211105_052100.log.json) | -| PSPNet | R-50-D8 | 512x512 | 80000 | 6.14 | 6.60 | V100 | 50.46 | 50.19 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-80k_loveda-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_80k_loveda/pspnet_r50-d8_512x512_80k_loveda_20211104_155728-88610f9f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_80k_loveda/pspnet_r50-d8_512x512_80k_loveda_20211104_155728.log.json) | -| PSPNet | R-101-D8 | 512x512 | 80000 | 9.61 | 4.58 | V100 | 51.86 | 51.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-80k_loveda-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_80k_loveda/pspnet_r101-d8_512x512_80k_loveda_20211104_153212-1c06c6a8.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_80k_loveda/pspnet_r101-d8_512x512_80k_loveda_20211104_153212.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| PSPNet | R-18-D8 | 512x512 | 80000 | 1.45 | 26.87 | V100 | 48.62 | 47.57 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r18-d8_4xb4-80k_loveda-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_512x512_80k_loveda/pspnet_r18-d8_512x512_80k_loveda_20211105_052100-b97697f1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_512x512_80k_loveda/pspnet_r18-d8_512x512_80k_loveda_20211105_052100.log.json) | +| PSPNet | R-50-D8 | 512x512 | 80000 | 6.14 | 6.60 | V100 | 50.46 | 50.19 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r50-d8_4xb4-80k_loveda-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_80k_loveda/pspnet_r50-d8_512x512_80k_loveda_20211104_155728-88610f9f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_80k_loveda/pspnet_r50-d8_512x512_80k_loveda_20211104_155728.log.json) | +| PSPNet | R-101-D8 | 512x512 | 80000 | 9.61 | 4.58 | V100 | 51.86 | 51.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r101-d8_4xb4-80k_loveda-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_80k_loveda/pspnet_r101-d8_512x512_80k_loveda_20211104_153212-1c06c6a8.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_80k_loveda/pspnet_r101-d8_512x512_80k_loveda_20211104_153212.log.json) | ### Potsdam -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| PSPNet | R-18-D8 | 512x512 | 80000 | 1.50 | 85.12 | V100 | 77.09 | 78.30 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r18-d8_4xb4-80k_potsdam-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_4x4_512x512_80k_potsdam/pspnet_r18-d8_4x4_512x512_80k_potsdam_20211220_125612-7cd046e1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_4x4_512x512_80k_potsdam/pspnet_r18-d8_4x4_512x512_80k_potsdam_20211220_125612.log.json) | -| PSPNet | R-50-D8 | 512x512 | 80000 | 6.14 | 30.21 | V100 | 78.12 | 78.98 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-80k_potsdam-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_4x4_512x512_80k_potsdam/pspnet_r50-d8_4x4_512x512_80k_potsdam_20211219_043541-2dd5fe67.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_4x4_512x512_80k_potsdam/pspnet_r50-d8_4x4_512x512_80k_potsdam_20211219_043541.log.json) | -| PSPNet | R-101-D8 | 512x512 | 80000 | 9.61 | 19.40 | V100 | 78.62 | 79.47 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-80k_potsdam-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_4x4_512x512_80k_potsdam/pspnet_r101-d8_4x4_512x512_80k_potsdam_20211220_125612-aed036c4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_4x4_512x512_80k_potsdam/pspnet_r101-d8_4x4_512x512_80k_potsdam_20211220_125612.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| PSPNet | R-18-D8 | 512x512 | 80000 | 1.50 | 85.12 | V100 | 77.09 | 78.30 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r18-d8_4xb4-80k_potsdam-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_4x4_512x512_80k_potsdam/pspnet_r18-d8_4x4_512x512_80k_potsdam_20211220_125612-7cd046e1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_4x4_512x512_80k_potsdam/pspnet_r18-d8_4x4_512x512_80k_potsdam_20211220_125612.log.json) | +| PSPNet | R-50-D8 | 512x512 | 80000 | 6.14 | 30.21 | V100 | 78.12 | 78.98 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r50-d8_4xb4-80k_potsdam-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_4x4_512x512_80k_potsdam/pspnet_r50-d8_4x4_512x512_80k_potsdam_20211219_043541-2dd5fe67.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_4x4_512x512_80k_potsdam/pspnet_r50-d8_4x4_512x512_80k_potsdam_20211219_043541.log.json) | +| PSPNet | R-101-D8 | 512x512 | 80000 | 9.61 | 19.40 | V100 | 78.62 | 79.47 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r101-d8_4xb4-80k_potsdam-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_4x4_512x512_80k_potsdam/pspnet_r101-d8_4x4_512x512_80k_potsdam_20211220_125612-aed036c4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_4x4_512x512_80k_potsdam/pspnet_r101-d8_4x4_512x512_80k_potsdam_20211220_125612.log.json) | ### Vaihingen -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| PSPNet | R-18-D8 | 512x512 | 80000 | 1.45 | 85.06 | V100 | 71.46 | 73.36 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r18-d8_4xb4-80k_vaihingen-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_4x4_512x512_80k_vaihingen/pspnet_r18-d8_4x4_512x512_80k_vaihingen_20211228_160355-52a8a6f6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_4x4_512x512_80k_vaihingen/pspnet_r18-d8_4x4_512x512_80k_vaihingen_20211228_160355.log.json) | -| PSPNet | R-50-D8 | 512x512 | 80000 | 6.14 | 30.29 | V100 | 72.36 | 73.75 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-80k_vaihingen-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_4x4_512x512_80k_vaihingen/pspnet_r50-d8_4x4_512x512_80k_vaihingen_20211228_160355-382f8f5b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_4x4_512x512_80k_vaihingen/pspnet_r50-d8_4x4_512x512_80k_vaihingen_20211228_160355.log.json) | -| PSPNet | R-101-D8 | 512x512 | 80000 | 9.61 | 19.97 | V100 | 72.61 | 74.18 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r101-d8_4xb4-80k_vaihingen-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_4x4_512x512_80k_vaihingen/pspnet_r101-d8_4x4_512x512_80k_vaihingen_20211231_230806-8eba0a09.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_4x4_512x512_80k_vaihingen/pspnet_r101-d8_4x4_512x512_80k_vaihingen_20211231_230806.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| PSPNet | R-18-D8 | 512x512 | 80000 | 1.45 | 85.06 | V100 | 71.46 | 73.36 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r18-d8_4xb4-80k_vaihingen-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_4x4_512x512_80k_vaihingen/pspnet_r18-d8_4x4_512x512_80k_vaihingen_20211228_160355-52a8a6f6.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_4x4_512x512_80k_vaihingen/pspnet_r18-d8_4x4_512x512_80k_vaihingen_20211228_160355.log.json) | +| PSPNet | R-50-D8 | 512x512 | 80000 | 6.14 | 30.29 | V100 | 72.36 | 73.75 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r50-d8_4xb4-80k_vaihingen-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_4x4_512x512_80k_vaihingen/pspnet_r50-d8_4x4_512x512_80k_vaihingen_20211228_160355-382f8f5b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_4x4_512x512_80k_vaihingen/pspnet_r50-d8_4x4_512x512_80k_vaihingen_20211228_160355.log.json) | +| PSPNet | R-101-D8 | 512x512 | 80000 | 9.61 | 19.97 | V100 | 72.61 | 74.18 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r101-d8_4xb4-80k_vaihingen-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_4x4_512x512_80k_vaihingen/pspnet_r101-d8_4x4_512x512_80k_vaihingen_20211231_230806-8eba0a09.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_4x4_512x512_80k_vaihingen/pspnet_r101-d8_4x4_512x512_80k_vaihingen_20211231_230806.log.json) | ### iSAID -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| PSPNet | R-18-D8 | 896x896 | 80000 | 4.52 | 26.91 | V100 | 60.22 | 61.25 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r18-d8_4xb4-80k_isaid-896x896.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_4x4_896x896_80k_isaid/pspnet_r18-d8_4x4_896x896_80k_isaid_20220110_180526-e84c0b6a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_4x4_896x896_80k_isaid/pspnet_r18-d8_4x4_896x896_80k_isaid_20220110_180526.log.json) | -| PSPNet | R-50-D8 | 896x896 | 80000 | 16.58 | 8.88 | V100 | 65.36 | 66.48 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/pspnet/pspnet_r50-d8_4xb4-80k_isaid-896x896.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_4x4_896x896_80k_isaid/pspnet_r50-d8_4x4_896x896_80k_isaid_20220110_180629-1f21dc32.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_4x4_896x896_80k_isaid/pspnet_r50-d8_4x4_896x896_80k_isaid_20220110_180629.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| PSPNet | R-18-D8 | 896x896 | 80000 | 4.52 | 26.91 | V100 | 60.22 | 61.25 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r18-d8_4xb4-80k_isaid-896x896.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_4x4_896x896_80k_isaid/pspnet_r18-d8_4x4_896x896_80k_isaid_20220110_180526-e84c0b6a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18-d8_4x4_896x896_80k_isaid/pspnet_r18-d8_4x4_896x896_80k_isaid_20220110_180526.log.json) | +| PSPNet | R-50-D8 | 896x896 | 80000 | 16.58 | 8.88 | V100 | 65.36 | 66.48 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet/pspnet_r50-d8_4xb4-80k_isaid-896x896.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_4x4_896x896_80k_isaid/pspnet_r50-d8_4x4_896x896_80k_isaid_20220110_180629-1f21dc32.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_4x4_896x896_80k_isaid/pspnet_r50-d8_4x4_896x896_80k_isaid_20220110_180629.log.json) | Note: diff --git a/configs/resnest/README.md b/configs/resnest/README.md index d27bbe2807..304791abe9 100644 --- a/configs/resnest/README.md +++ b/configs/resnest/README.md @@ -26,21 +26,21 @@ It is well known that featuremap attention and multi-path representation are imp ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ---------- | -------- | --------- | ------: | -------: | -------------- | ------ | ----: | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| FCN | S-101-D8 | 512x1024 | 80000 | 11.4 | 2.39 | V100 | 77.56 | 78.98 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/resnest/resnest_s101-d8_fcn_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/fcn_s101-d8_512x1024_80k_cityscapes/fcn_s101-d8_512x1024_80k_cityscapes_20200807_140631-f8d155b3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/fcn_s101-d8_512x1024_80k_cityscapes/fcn_s101-d8_512x1024_80k_cityscapes-20200807_140631.log.json) | -| PSPNet | S-101-D8 | 512x1024 | 80000 | 11.8 | 2.52 | V100 | 78.57 | 79.19 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/resnest/resnest_s101-d8_pspnet_4xb2-80k_cityscapes512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/pspnet_s101-d8_512x1024_80k_cityscapes/pspnet_s101-d8_512x1024_80k_cityscapes_20200807_140631-c75f3b99.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/pspnet_s101-d8_512x1024_80k_cityscapes/pspnet_s101-d8_512x1024_80k_cityscapes-20200807_140631.log.json) | -| DeepLabV3 | S-101-D8 | 512x1024 | 80000 | 11.9 | 1.88 | V100 | 79.67 | 80.51 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/resnest/resnest_s101-d8_deeplabv3_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3_s101-d8_512x1024_80k_cityscapes/deeplabv3_s101-d8_512x1024_80k_cityscapes_20200807_144429-b73c4270.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3_s101-d8_512x1024_80k_cityscapes/deeplabv3_s101-d8_512x1024_80k_cityscapes-20200807_144429.log.json) | -| DeepLabV3+ | S-101-D8 | 512x1024 | 80000 | 13.2 | 2.36 | V100 | 79.62 | 80.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/resnest/resnest_s101-d8_deeplabv3plus_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3plus_s101-d8_512x1024_80k_cityscapes/deeplabv3plus_s101-d8_512x1024_80k_cityscapes_20200807_144429-1239eb43.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3plus_s101-d8_512x1024_80k_cityscapes/deeplabv3plus_s101-d8_512x1024_80k_cityscapes-20200807_144429.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------- | -------- | --------- | ------: | -------: | -------------- | ------ | ----: | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| FCN | S-101-D8 | 512x1024 | 80000 | 11.4 | 2.39 | V100 | 77.56 | 78.98 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/resnest/resnest_s101-d8_fcn_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/fcn_s101-d8_512x1024_80k_cityscapes/fcn_s101-d8_512x1024_80k_cityscapes_20200807_140631-f8d155b3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/fcn_s101-d8_512x1024_80k_cityscapes/fcn_s101-d8_512x1024_80k_cityscapes-20200807_140631.log.json) | +| PSPNet | S-101-D8 | 512x1024 | 80000 | 11.8 | 2.52 | V100 | 78.57 | 79.19 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/resnest/resnest_s101-d8_pspnet_4xb2-80k_cityscapes512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/pspnet_s101-d8_512x1024_80k_cityscapes/pspnet_s101-d8_512x1024_80k_cityscapes_20200807_140631-c75f3b99.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/pspnet_s101-d8_512x1024_80k_cityscapes/pspnet_s101-d8_512x1024_80k_cityscapes-20200807_140631.log.json) | +| DeepLabV3 | S-101-D8 | 512x1024 | 80000 | 11.9 | 1.88 | V100 | 79.67 | 80.51 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/resnest/resnest_s101-d8_deeplabv3_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3_s101-d8_512x1024_80k_cityscapes/deeplabv3_s101-d8_512x1024_80k_cityscapes_20200807_144429-b73c4270.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3_s101-d8_512x1024_80k_cityscapes/deeplabv3_s101-d8_512x1024_80k_cityscapes-20200807_144429.log.json) | +| DeepLabV3+ | S-101-D8 | 512x1024 | 80000 | 13.2 | 2.36 | V100 | 79.62 | 80.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/resnest/resnest_s101-d8_deeplabv3plus_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3plus_s101-d8_512x1024_80k_cityscapes/deeplabv3plus_s101-d8_512x1024_80k_cityscapes_20200807_144429-1239eb43.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3plus_s101-d8_512x1024_80k_cityscapes/deeplabv3plus_s101-d8_512x1024_80k_cityscapes-20200807_144429.log.json) | ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ---------- | -------- | --------- | ------: | -------: | -------------- | ------ | ----: | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| FCN | S-101-D8 | 512x512 | 160000 | 14.2 | 12.86 | V100 | 45.62 | 46.16 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/resnest/resnest_s101-d8_fcn_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/fcn_s101-d8_512x512_160k_ade20k/fcn_s101-d8_512x512_160k_ade20k_20200807_145416-d3160329.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/fcn_s101-d8_512x512_160k_ade20k/fcn_s101-d8_512x512_160k_ade20k-20200807_145416.log.json) | -| PSPNet | S-101-D8 | 512x512 | 160000 | 14.2 | 13.02 | V100 | 45.44 | 46.28 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/resnest/resnest_s101-d8_pspnet_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/pspnet_s101-d8_512x512_160k_ade20k/pspnet_s101-d8_512x512_160k_ade20k_20200807_145416-a6daa92a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/pspnet_s101-d8_512x512_160k_ade20k/pspnet_s101-d8_512x512_160k_ade20k-20200807_145416.log.json) | -| DeepLabV3 | S-101-D8 | 512x512 | 160000 | 14.6 | 9.28 | V100 | 45.71 | 46.59 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/resnest/resnest_s101-d8_deeplabv3_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3_s101-d8_512x512_160k_ade20k/deeplabv3_s101-d8_512x512_160k_ade20k_20200807_144503-17ecabe5.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3_s101-d8_512x512_160k_ade20k/deeplabv3_s101-d8_512x512_160k_ade20k-20200807_144503.log.json) | -| DeepLabV3+ | S-101-D8 | 512x512 | 160000 | 16.2 | 11.96 | V100 | 46.47 | 47.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/resnest/resnest_s101-d8_deeplabv3plus_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3plus_s101-d8_512x512_160k_ade20k/deeplabv3plus_s101-d8_512x512_160k_ade20k_20200807_144503-27b26226.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3plus_s101-d8_512x512_160k_ade20k/deeplabv3plus_s101-d8_512x512_160k_ade20k-20200807_144503.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------- | -------- | --------- | ------: | -------: | -------------- | ------ | ----: | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| FCN | S-101-D8 | 512x512 | 160000 | 14.2 | 12.86 | V100 | 45.62 | 46.16 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/resnest/resnest_s101-d8_fcn_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/fcn_s101-d8_512x512_160k_ade20k/fcn_s101-d8_512x512_160k_ade20k_20200807_145416-d3160329.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/fcn_s101-d8_512x512_160k_ade20k/fcn_s101-d8_512x512_160k_ade20k-20200807_145416.log.json) | +| PSPNet | S-101-D8 | 512x512 | 160000 | 14.2 | 13.02 | V100 | 45.44 | 46.28 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/resnest/resnest_s101-d8_pspnet_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/pspnet_s101-d8_512x512_160k_ade20k/pspnet_s101-d8_512x512_160k_ade20k_20200807_145416-a6daa92a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/pspnet_s101-d8_512x512_160k_ade20k/pspnet_s101-d8_512x512_160k_ade20k-20200807_145416.log.json) | +| DeepLabV3 | S-101-D8 | 512x512 | 160000 | 14.6 | 9.28 | V100 | 45.71 | 46.59 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/resnest/resnest_s101-d8_deeplabv3_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3_s101-d8_512x512_160k_ade20k/deeplabv3_s101-d8_512x512_160k_ade20k_20200807_144503-17ecabe5.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3_s101-d8_512x512_160k_ade20k/deeplabv3_s101-d8_512x512_160k_ade20k-20200807_144503.log.json) | +| DeepLabV3+ | S-101-D8 | 512x512 | 160000 | 16.2 | 11.96 | V100 | 46.47 | 47.27 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/resnest/resnest_s101-d8_deeplabv3plus_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3plus_s101-d8_512x512_160k_ade20k/deeplabv3plus_s101-d8_512x512_160k_ade20k_20200807_144503-27b26226.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/resnest/deeplabv3plus_s101-d8_512x512_160k_ade20k/deeplabv3plus_s101-d8_512x512_160k_ade20k-20200807_144503.log.json) | ## Citation diff --git a/configs/segformer/README.md b/configs/segformer/README.md index 5dbf1215bc..f8999b0efa 100644 --- a/configs/segformer/README.md +++ b/configs/segformer/README.md @@ -38,15 +38,15 @@ This script convert model from `PRETRAIN_PATH` and store the converted model in ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| --------- | -------- | --------- | ------: | -------: | -------------- | -------- | ----: | ------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| Segformer | MIT-B0 | 512x512 | 160000 | 2.1 | 51.32 | 1080 Ti | 37.41 | 38.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b0_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b0_512x512_160k_ade20k/segformer_mit-b0_512x512_160k_ade20k_20210726_101530-8ffa8fda.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b0_512x512_160k_ade20k/segformer_mit-b0_512x512_160k_ade20k_20210726_101530.log.json) | -| Segformer | MIT-B1 | 512x512 | 160000 | 2.6 | 47.66 | TITAN Xp | 40.97 | 42.54 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b1_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b1_512x512_160k_ade20k/segformer_mit-b1_512x512_160k_ade20k_20210726_112106-d70e859d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b1_512x512_160k_ade20k/segformer_mit-b1_512x512_160k_ade20k_20210726_112106.log.json) | -| Segformer | MIT-B2 | 512x512 | 160000 | 3.6 | 30.88 | TITAN Xp | 45.58 | 47.03 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b2_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b2_512x512_160k_ade20k/segformer_mit-b2_512x512_160k_ade20k_20210726_112103-cbd414ac.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b2_512x512_160k_ade20k/segformer_mit-b2_512x512_160k_ade20k_20210726_112103.log.json) | -| Segformer | MIT-B3 | 512x512 | 160000 | 4.8 | 22.11 | V100 | 47.82 | 48.81 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b3_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b3_512x512_160k_ade20k/segformer_mit-b3_512x512_160k_ade20k_20210726_081410-962b98d2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b3_512x512_160k_ade20k/segformer_mit-b3_512x512_160k_ade20k_20210726_081410.log.json) | -| Segformer | MIT-B4 | 512x512 | 160000 | 6.1 | 15.45 | V100 | 48.46 | 49.76 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b4_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b4_512x512_160k_ade20k/segformer_mit-b4_512x512_160k_ade20k_20210728_183055-7f509d7d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b4_512x512_160k_ade20k/segformer_mit-b4_512x512_160k_ade20k_20210728_183055.log.json) | -| Segformer | MIT-B5 | 512x512 | 160000 | 7.2 | 11.89 | V100 | 49.13 | 50.22 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b5_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_512x512_160k_ade20k/segformer_mit-b5_512x512_160k_ade20k_20210726_145235-94cedf59.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_512x512_160k_ade20k/segformer_mit-b5_512x512_160k_ade20k_20210726_145235.log.json) | -| Segformer | MIT-B5 | 640x640 | 160000 | 11.5 | 11.30 | V100 | 49.62 | 50.36 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b5_8xb2-160k_ade20k-640x640.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_640x640_160k_ade20k/segformer_mit-b5_640x640_160k_ade20k_20210801_121243-41d2845b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_640x640_160k_ade20k/segformer_mit-b5_640x640_160k_ade20k_20210801_121243.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| --------- | -------- | --------- | ------: | -------: | -------------- | -------- | ----: | ------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Segformer | MIT-B0 | 512x512 | 160000 | 2.1 | 51.32 | 1080 Ti | 37.41 | 38.34 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/segformer/segformer_mit-b0_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b0_512x512_160k_ade20k/segformer_mit-b0_512x512_160k_ade20k_20210726_101530-8ffa8fda.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b0_512x512_160k_ade20k/segformer_mit-b0_512x512_160k_ade20k_20210726_101530.log.json) | +| Segformer | MIT-B1 | 512x512 | 160000 | 2.6 | 47.66 | TITAN Xp | 40.97 | 42.54 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/segformer/segformer_mit-b1_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b1_512x512_160k_ade20k/segformer_mit-b1_512x512_160k_ade20k_20210726_112106-d70e859d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b1_512x512_160k_ade20k/segformer_mit-b1_512x512_160k_ade20k_20210726_112106.log.json) | +| Segformer | MIT-B2 | 512x512 | 160000 | 3.6 | 30.88 | TITAN Xp | 45.58 | 47.03 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/segformer/segformer_mit-b2_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b2_512x512_160k_ade20k/segformer_mit-b2_512x512_160k_ade20k_20210726_112103-cbd414ac.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b2_512x512_160k_ade20k/segformer_mit-b2_512x512_160k_ade20k_20210726_112103.log.json) | +| Segformer | MIT-B3 | 512x512 | 160000 | 4.8 | 22.11 | V100 | 47.82 | 48.81 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/segformer/segformer_mit-b3_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b3_512x512_160k_ade20k/segformer_mit-b3_512x512_160k_ade20k_20210726_081410-962b98d2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b3_512x512_160k_ade20k/segformer_mit-b3_512x512_160k_ade20k_20210726_081410.log.json) | +| Segformer | MIT-B4 | 512x512 | 160000 | 6.1 | 15.45 | V100 | 48.46 | 49.76 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/segformer/segformer_mit-b4_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b4_512x512_160k_ade20k/segformer_mit-b4_512x512_160k_ade20k_20210728_183055-7f509d7d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b4_512x512_160k_ade20k/segformer_mit-b4_512x512_160k_ade20k_20210728_183055.log.json) | +| Segformer | MIT-B5 | 512x512 | 160000 | 7.2 | 11.89 | V100 | 49.13 | 50.22 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/segformer/segformer_mit-b5_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_512x512_160k_ade20k/segformer_mit-b5_512x512_160k_ade20k_20210726_145235-94cedf59.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_512x512_160k_ade20k/segformer_mit-b5_512x512_160k_ade20k_20210726_145235.log.json) | +| Segformer | MIT-B5 | 640x640 | 160000 | 11.5 | 11.30 | V100 | 49.62 | 50.36 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/segformer/segformer_mit-b5_8xb2-160k_ade20k-640x640.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_640x640_160k_ade20k/segformer_mit-b5_640x640_160k_ade20k_20210801_121243-41d2845b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_640x640_160k_ade20k/segformer_mit-b5_640x640_160k_ade20k_20210801_121243.log.json) | Evaluation with AlignedResize: @@ -80,14 +80,14 @@ test_pipeline = [ The lower fps result is caused by the sliding window inference scheme (window size:1024x1024). -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| --------- | -------- | --------- | ------: | -------: | -------------- | ------ | ----: | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Segformer | MIT-B0 | 1024x1024 | 160000 | 3.64 | 4.74 | V100 | 76.54 | 78.22 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b0_8xb1-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b0_8x1_1024x1024_160k_cityscapes/segformer_mit-b0_8x1_1024x1024_160k_cityscapes_20211208_101857-e7f88502.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b0_8x1_1024x1024_160k_cityscapes/segformer_mit-b0_8x1_1024x1024_160k_cityscapes_20211208_101857.log.json) | -| Segformer | MIT-B1 | 1024x1024 | 160000 | 4.49 | 4.3 | V100 | 78.56 | 79.73 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b1_8xb1-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b1_8x1_1024x1024_160k_cityscapes/segformer_mit-b1_8x1_1024x1024_160k_cityscapes_20211208_064213-655c7b3f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b1_8x1_1024x1024_160k_cityscapes/segformer_mit-b1_8x1_1024x1024_160k_cityscapes_20211208_064213.log.json) | -| Segformer | MIT-B2 | 1024x1024 | 160000 | 7.42 | 3.36 | V100 | 81.08 | 82.18 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b2_8xb1-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b2_8x1_1024x1024_160k_cityscapes/segformer_mit-b2_8x1_1024x1024_160k_cityscapes_20211207_134205-6096669a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b2_8x1_1024x1024_160k_cityscapes/segformer_mit-b2_8x1_1024x1024_160k_cityscapes_20211207_134205.log.json) | -| Segformer | MIT-B3 | 1024x1024 | 160000 | 10.86 | 2.53 | V100 | 81.94 | 83.14 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b3_8xb1-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b3_8x1_1024x1024_160k_cityscapes/segformer_mit-b3_8x1_1024x1024_160k_cityscapes_20211206_224823-a8f8a177.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b3_8x1_1024x1024_160k_cityscapes/segformer_mit-b3_8x1_1024x1024_160k_cityscapes_20211206_224823.log.json) | -| Segformer | MIT-B4 | 1024x1024 | 160000 | 15.07 | 1.88 | V100 | 81.89 | 83.38 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b4_8xb1-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b4_8x1_1024x1024_160k_cityscapes/segformer_mit-b4_8x1_1024x1024_160k_cityscapes_20211207_080709-07f6c333.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b4_8x1_1024x1024_160k_cityscapes/segformer_mit-b4_8x1_1024x1024_160k_cityscapes_20211207_080709.log.json) | -| Segformer | MIT-B5 | 1024x1024 | 160000 | 18.00 | 1.39 | V100 | 82.25 | 83.48 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segformer/segformer_mit-b5_8xb1-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_8x1_1024x1024_160k_cityscapes/segformer_mit-b5_8x1_1024x1024_160k_cityscapes_20211206_072934-87a052ec.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_8x1_1024x1024_160k_cityscapes/segformer_mit-b5_8x1_1024x1024_160k_cityscapes_20211206_072934.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| --------- | -------- | --------- | ------: | -------: | -------------- | ------ | ----: | ------------- | ------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Segformer | MIT-B0 | 1024x1024 | 160000 | 3.64 | 4.74 | V100 | 76.54 | 78.22 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/segformer/segformer_mit-b0_8xb1-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b0_8x1_1024x1024_160k_cityscapes/segformer_mit-b0_8x1_1024x1024_160k_cityscapes_20211208_101857-e7f88502.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b0_8x1_1024x1024_160k_cityscapes/segformer_mit-b0_8x1_1024x1024_160k_cityscapes_20211208_101857.log.json) | +| Segformer | MIT-B1 | 1024x1024 | 160000 | 4.49 | 4.3 | V100 | 78.56 | 79.73 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/segformer/segformer_mit-b1_8xb1-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b1_8x1_1024x1024_160k_cityscapes/segformer_mit-b1_8x1_1024x1024_160k_cityscapes_20211208_064213-655c7b3f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b1_8x1_1024x1024_160k_cityscapes/segformer_mit-b1_8x1_1024x1024_160k_cityscapes_20211208_064213.log.json) | +| Segformer | MIT-B2 | 1024x1024 | 160000 | 7.42 | 3.36 | V100 | 81.08 | 82.18 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/segformer/segformer_mit-b2_8xb1-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b2_8x1_1024x1024_160k_cityscapes/segformer_mit-b2_8x1_1024x1024_160k_cityscapes_20211207_134205-6096669a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b2_8x1_1024x1024_160k_cityscapes/segformer_mit-b2_8x1_1024x1024_160k_cityscapes_20211207_134205.log.json) | +| Segformer | MIT-B3 | 1024x1024 | 160000 | 10.86 | 2.53 | V100 | 81.94 | 83.14 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/segformer/segformer_mit-b3_8xb1-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b3_8x1_1024x1024_160k_cityscapes/segformer_mit-b3_8x1_1024x1024_160k_cityscapes_20211206_224823-a8f8a177.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b3_8x1_1024x1024_160k_cityscapes/segformer_mit-b3_8x1_1024x1024_160k_cityscapes_20211206_224823.log.json) | +| Segformer | MIT-B4 | 1024x1024 | 160000 | 15.07 | 1.88 | V100 | 81.89 | 83.38 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/segformer/segformer_mit-b4_8xb1-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b4_8x1_1024x1024_160k_cityscapes/segformer_mit-b4_8x1_1024x1024_160k_cityscapes_20211207_080709-07f6c333.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b4_8x1_1024x1024_160k_cityscapes/segformer_mit-b4_8x1_1024x1024_160k_cityscapes_20211207_080709.log.json) | +| Segformer | MIT-B5 | 1024x1024 | 160000 | 18.00 | 1.39 | V100 | 82.25 | 83.48 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/segformer/segformer_mit-b5_8xb1-160k_cityscapes-1024x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_8x1_1024x1024_160k_cityscapes/segformer_mit-b5_8x1_1024x1024_160k_cityscapes_20211206_072934-87a052ec.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_8x1_1024x1024_160k_cityscapes/segformer_mit-b5_8x1_1024x1024_160k_cityscapes_20211206_072934.log.json) | ## Citation diff --git a/configs/segmenter/README.md b/configs/segmenter/README.md index a9a64ae421..103b125472 100644 --- a/configs/segmenter/README.md +++ b/configs/segmenter/README.md @@ -55,13 +55,13 @@ In our default setting, pretrained models and their corresponding [ViT-AugReg](h ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ---------------- | -------- | --------- | ------- | -------- | -------------- | ------ | ----- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Segmenter Mask | ViT-T_16 | 512x512 | 160000 | 1.21 | 27.98 | V100 | 39.99 | 40.83 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segmenter/segmenter_vit-t_mask_8xb1-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-t_mask_8x1_512x512_160k_ade20k/segmenter_vit-t_mask_8x1_512x512_160k_ade20k_20220105_151706-ffcf7509.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-t_mask_8x1_512x512_160k_ade20k/segmenter_vit-t_mask_8x1_512x512_160k_ade20k_20220105_151706.log.json) | -| Segmenter Linear | ViT-S_16 | 512x512 | 160000 | 1.78 | 28.07 | V100 | 45.75 | 46.82 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segmenter/segmenter_vit-s_fcn_8xb1-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-s_linear_8x1_512x512_160k_ade20k/segmenter_vit-s_linear_8x1_512x512_160k_ade20k_20220105_151713-39658c46.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-s_linear_8x1_512x512_160k_ade20k/segmenter_vit-s_linear_8x1_512x512_160k_ade20k_20220105_151713.log.json) | -| Segmenter Mask | ViT-S_16 | 512x512 | 160000 | 2.03 | 24.80 | V100 | 46.19 | 47.85 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segmenter/segmenter_vit-s_mask_8xb1-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-s_mask_8x1_512x512_160k_ade20k/segmenter_vit-s_mask_8x1_512x512_160k_ade20k_20220105_151706-511bb103.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-s_mask_8x1_512x512_160k_ade20k/segmenter_vit-s_mask_8x1_512x512_160k_ade20k_20220105_151706.log.json) | -| Segmenter Mask | ViT-B_16 | 512x512 | 160000 | 4.20 | 13.20 | V100 | 49.60 | 51.07 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segmenter/segmenter_vit-b_mask_8xb1-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-b_mask_8x1_512x512_160k_ade20k/segmenter_vit-b_mask_8x1_512x512_160k_ade20k_20220105_151706-bc533b08.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-b_mask_8x1_512x512_160k_ade20k/segmenter_vit-b_mask_8x1_512x512_160k_ade20k_20220105_151706.log.json) | -| Segmenter Mask | ViT-L_16 | 640x640 | 160000 | 16.56 | 2.62 | V100 | 52.16 | 53.65 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segmenter/segmenter_vit-l_mask_8xb1-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-l_mask_8x1_512x512_160k_ade20k/segmenter_vit-l_mask_8x1_512x512_160k_ade20k_20220105_162750-7ef345be.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-l_mask_8x1_512x512_160k_ade20k/segmenter_vit-l_mask_8x1_512x512_160k_ade20k_20220105_162750.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------------- | -------- | --------- | ------- | -------- | -------------- | ------ | ----- | ------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Segmenter Mask | ViT-T_16 | 512x512 | 160000 | 1.21 | 27.98 | V100 | 39.99 | 40.83 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/segmenter/segmenter_vit-t_mask_8xb1-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-t_mask_8x1_512x512_160k_ade20k/segmenter_vit-t_mask_8x1_512x512_160k_ade20k_20220105_151706-ffcf7509.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-t_mask_8x1_512x512_160k_ade20k/segmenter_vit-t_mask_8x1_512x512_160k_ade20k_20220105_151706.log.json) | +| Segmenter Linear | ViT-S_16 | 512x512 | 160000 | 1.78 | 28.07 | V100 | 45.75 | 46.82 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/segmenter/segmenter_vit-s_fcn_8xb1-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-s_linear_8x1_512x512_160k_ade20k/segmenter_vit-s_linear_8x1_512x512_160k_ade20k_20220105_151713-39658c46.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-s_linear_8x1_512x512_160k_ade20k/segmenter_vit-s_linear_8x1_512x512_160k_ade20k_20220105_151713.log.json) | +| Segmenter Mask | ViT-S_16 | 512x512 | 160000 | 2.03 | 24.80 | V100 | 46.19 | 47.85 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/segmenter/segmenter_vit-s_mask_8xb1-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-s_mask_8x1_512x512_160k_ade20k/segmenter_vit-s_mask_8x1_512x512_160k_ade20k_20220105_151706-511bb103.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-s_mask_8x1_512x512_160k_ade20k/segmenter_vit-s_mask_8x1_512x512_160k_ade20k_20220105_151706.log.json) | +| Segmenter Mask | ViT-B_16 | 512x512 | 160000 | 4.20 | 13.20 | V100 | 49.60 | 51.07 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/segmenter/segmenter_vit-b_mask_8xb1-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-b_mask_8x1_512x512_160k_ade20k/segmenter_vit-b_mask_8x1_512x512_160k_ade20k_20220105_151706-bc533b08.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-b_mask_8x1_512x512_160k_ade20k/segmenter_vit-b_mask_8x1_512x512_160k_ade20k_20220105_151706.log.json) | +| Segmenter Mask | ViT-L_16 | 640x640 | 160000 | 16.56 | 2.62 | V100 | 52.16 | 53.65 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/segmenter/segmenter_vit-l_mask_8xb1-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-l_mask_8x1_512x512_160k_ade20k/segmenter_vit-l_mask_8x1_512x512_160k_ade20k_20220105_162750-7ef345be.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segmenter/segmenter_vit-l_mask_8x1_512x512_160k_ade20k/segmenter_vit-l_mask_8x1_512x512_160k_ade20k_20220105_162750.log.json) | ## Citation diff --git a/configs/segnext/README.md b/configs/segnext/README.md index 06b63be546..d7434a0621 100644 --- a/configs/segnext/README.md +++ b/configs/segnext/README.md @@ -8,7 +8,7 @@ Official Repo -Code Snippet +Code Snippet ## Abstract @@ -26,12 +26,12 @@ We present SegNeXt, a simple convolutional network architecture for semantic seg ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------- | -------- | --------- | ------- | -------- | -------------- | ------ | ----- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| SegNeXt | MSCAN-T | 512x512 | 160000 | 17.88 | 52.38 | A100 | 41.50 | 42.59 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segnext/segnext_mscan-t_1xb16-adamw-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-t_1x16_512x512_adamw_160k_ade20k/segnext_mscan-t_1x16_512x512_adamw_160k_ade20k_20230210_140244-05bd8466.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-t_1x16_512x512_adamw_160k_ade20k/segnext_mscan-t_1x16_512x512_adamw_160k_ade20k_20230210_140244.log.json) | -| SegNeXt | MSCAN-S | 512x512 | 160000 | 21.47 | 42.27 | A100 | 44.16 | 45.81 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segnext/segnext_mscan-s_1xb16-adamw-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-s_1x16_512x512_adamw_160k_ade20k/segnext_mscan-s_1x16_512x512_adamw_160k_ade20k_20230214_113014-43013668.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-s_1x16_512x512_adamw_160k_ade20k/segnext_mscan-s_1x16_512x512_adamw_160k_ade20k_20230214_113014.log.json) | -| SegNeXt | MSCAN-B | 512x512 | 160000 | 31.03 | 35.15 | A100 | 48.03 | 49.68 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segnext/segnext_mscan-b_1xb16-adamw-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-b_1x16_512x512_adamw_160k_ade20k/segnext_mscan-b_1x16_512x512_adamw_160k_ade20k_20230209_172053-b6f6c70c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-b_1x16_512x512_adamw_160k_ade20k/segnext_mscan-b_1x16_512x512_adamw_160k_ade20k_20230209_172053.log.json) | -| SegNeXt | MSCAN-L | 512x512 | 160000 | 43.32 | 22.91 | A100 | 50.99 | 52.10 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/segnext/segnext_mscan-l_1xb16-adamw-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-l_1x16_512x512_adamw_160k_ade20k/segnext_mscan-l_1x16_512x512_adamw_160k_ade20k_20230209_172055-19b14b63.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-l_1x16_512x512_adamw_160k_ade20k/segnext_mscan-l_1x16_512x512_adamw_160k_ade20k_20230209_172055.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------- | -------- | --------- | ------- | -------- | -------------- | ------ | ----- | ------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| SegNeXt | MSCAN-T | 512x512 | 160000 | 17.88 | 52.38 | A100 | 41.50 | 42.59 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/segnext/segnext_mscan-t_1xb16-adamw-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-t_1x16_512x512_adamw_160k_ade20k/segnext_mscan-t_1x16_512x512_adamw_160k_ade20k_20230210_140244-05bd8466.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-t_1x16_512x512_adamw_160k_ade20k/segnext_mscan-t_1x16_512x512_adamw_160k_ade20k_20230210_140244.log.json) | +| SegNeXt | MSCAN-S | 512x512 | 160000 | 21.47 | 42.27 | A100 | 44.16 | 45.81 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/segnext/segnext_mscan-s_1xb16-adamw-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-s_1x16_512x512_adamw_160k_ade20k/segnext_mscan-s_1x16_512x512_adamw_160k_ade20k_20230214_113014-43013668.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-s_1x16_512x512_adamw_160k_ade20k/segnext_mscan-s_1x16_512x512_adamw_160k_ade20k_20230214_113014.log.json) | +| SegNeXt | MSCAN-B | 512x512 | 160000 | 31.03 | 35.15 | A100 | 48.03 | 49.68 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/segnext/segnext_mscan-b_1xb16-adamw-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-b_1x16_512x512_adamw_160k_ade20k/segnext_mscan-b_1x16_512x512_adamw_160k_ade20k_20230209_172053-b6f6c70c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-b_1x16_512x512_adamw_160k_ade20k/segnext_mscan-b_1x16_512x512_adamw_160k_ade20k_20230209_172053.log.json) | +| SegNeXt | MSCAN-L | 512x512 | 160000 | 43.32 | 22.91 | A100 | 50.99 | 52.10 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/segnext/segnext_mscan-l_1xb16-adamw-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-l_1x16_512x512_adamw_160k_ade20k/segnext_mscan-l_1x16_512x512_adamw_160k_ade20k_20230209_172055-19b14b63.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/segnext/segnext_mscan-l_1x16_512x512_adamw_160k_ade20k/segnext_mscan-l_1x16_512x512_adamw_160k_ade20k_20230209_172055.log.json) | Note: @@ -39,7 +39,7 @@ Note: - The total batch size is 16. We trained for SegNeXt with a single GPU as the performance degrades significantly when using`SyncBN` (mainly in `OverlapPatchEmbed` modules of `MSCAN`) of PyTorch 1.9. -- There will be subtle differences when model testing as Non-negative Matrix Factorization (NMF) in `LightHamHead` will be initialized randomly. To control this randomness, please set the random seed when model testing. You can modify [`./tools/test.py`](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/tools/test.py) like: +- There will be subtle differences when model testing as Non-negative Matrix Factorization (NMF) in `LightHamHead` will be initialized randomly. To control this randomness, please set the random seed when model testing. You can modify [`./tools/test.py`](https://github.com/open-mmlab/mmsegmentation/blob/main/tools/test.py) like: ```python def main(): diff --git a/configs/segnext/metafile.yaml b/configs/segnext/metafile.yaml index faa11c9784..3c8ff5bb92 100644 --- a/configs/segnext/metafile.yaml +++ b/configs/segnext/metafile.yaml @@ -33,7 +33,7 @@ Models: Paper: Title: 'SegNeXt: Rethinking Convolutional Attention Design for Semantic Segmentation' URL: https://arxiv.org/abs/2209.08575 - Code: https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/models/backbones/mscan.py#L328 + Code: https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/models/backbones/mscan.py#L328 Framework: PyTorch - Name: segnext_mscan-s_1xb16-adamw-160k_ade20k-512x512 In Collection: SegNeXt @@ -57,7 +57,7 @@ Models: Paper: Title: 'SegNeXt: Rethinking Convolutional Attention Design for Semantic Segmentation' URL: https://arxiv.org/abs/2209.08575 - Code: https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/models/backbones/mscan.py#L328 + Code: https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/models/backbones/mscan.py#L328 Framework: PyTorch - Name: segnext_mscan-b_1xb16-adamw-160k_ade20k-512x512 In Collection: SegNeXt @@ -81,7 +81,7 @@ Models: Paper: Title: 'SegNeXt: Rethinking Convolutional Attention Design for Semantic Segmentation' URL: https://arxiv.org/abs/2209.08575 - Code: https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/models/backbones/mscan.py#L328 + Code: https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/models/backbones/mscan.py#L328 Framework: PyTorch - Name: segnext_mscan-l_1xb16-adamw-160k_ade20k-512x512 In Collection: SegNeXt @@ -105,5 +105,5 @@ Models: Paper: Title: 'SegNeXt: Rethinking Convolutional Attention Design for Semantic Segmentation' URL: https://arxiv.org/abs/2209.08575 - Code: https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/models/backbones/mscan.py#L328 + Code: https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/models/backbones/mscan.py#L328 Framework: PyTorch diff --git a/configs/sem_fpn/README.md b/configs/sem_fpn/README.md index 8bbbd0eee0..697cf506e2 100644 --- a/configs/sem_fpn/README.md +++ b/configs/sem_fpn/README.md @@ -26,17 +26,17 @@ The recently introduced panoptic segmentation task has renewed our community's i ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------: | -------------- | ------ | ----: | ------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| FPN | R-50 | 512x1024 | 80000 | 2.8 | 13.54 | V100 | 74.52 | 76.08 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/sem_fpn/fpn_r50_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r50_512x1024_80k_cityscapes/fpn_r50_512x1024_80k_cityscapes_20200717_021437-94018a0d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r50_512x1024_80k_cityscapes/fpn_r50_512x1024_80k_cityscapes-20200717_021437.log.json) | -| FPN | R-101 | 512x1024 | 80000 | 3.9 | 10.29 | V100 | 75.80 | 77.40 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/sem_fpn/fpn_r101_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r101_512x1024_80k_cityscapes/fpn_r101_512x1024_80k_cityscapes_20200717_012416-c5800d4c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r101_512x1024_80k_cityscapes/fpn_r101_512x1024_80k_cityscapes-20200717_012416.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------: | -------------- | ------ | ----: | ------------- | ------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| FPN | R-50 | 512x1024 | 80000 | 2.8 | 13.54 | V100 | 74.52 | 76.08 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/sem_fpn/fpn_r50_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r50_512x1024_80k_cityscapes/fpn_r50_512x1024_80k_cityscapes_20200717_021437-94018a0d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r50_512x1024_80k_cityscapes/fpn_r50_512x1024_80k_cityscapes-20200717_021437.log.json) | +| FPN | R-101 | 512x1024 | 80000 | 3.9 | 10.29 | V100 | 75.80 | 77.40 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/sem_fpn/fpn_r101_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r101_512x1024_80k_cityscapes/fpn_r101_512x1024_80k_cityscapes_20200717_012416-c5800d4c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r101_512x1024_80k_cityscapes/fpn_r101_512x1024_80k_cityscapes-20200717_012416.log.json) | ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------- | --------- | ------: | -------: | -------------- | ------ | ----: | ------------- | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| FPN | R-50 | 512x512 | 160000 | 4.9 | 55.77 | V100 | 37.49 | 39.09 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/sem_fpn/fpn_r50_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r50_512x512_160k_ade20k/fpn_r50_512x512_160k_ade20k_20200718_131734-5b5a6ab9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r50_512x512_160k_ade20k/fpn_r50_512x512_160k_ade20k-20200718_131734.log.json) | -| FPN | R-101 | 512x512 | 160000 | 5.9 | 40.58 | V100 | 39.35 | 40.72 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/sem_fpn/fpn_r101_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r101_512x512_160k_ade20k/fpn_r101_512x512_160k_ade20k_20200718_131734-306b5004.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r101_512x512_160k_ade20k/fpn_r101_512x512_160k_ade20k-20200718_131734.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------- | --------- | ------: | -------: | -------------- | ------ | ----: | ------------- | --------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| FPN | R-50 | 512x512 | 160000 | 4.9 | 55.77 | V100 | 37.49 | 39.09 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/sem_fpn/fpn_r50_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r50_512x512_160k_ade20k/fpn_r50_512x512_160k_ade20k_20200718_131734-5b5a6ab9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r50_512x512_160k_ade20k/fpn_r50_512x512_160k_ade20k-20200718_131734.log.json) | +| FPN | R-101 | 512x512 | 160000 | 5.9 | 40.58 | V100 | 39.35 | 40.72 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/sem_fpn/fpn_r101_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r101_512x512_160k_ade20k/fpn_r101_512x512_160k_ade20k_20200718_131734-306b5004.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/sem_fpn/fpn_r101_512x512_160k_ade20k/fpn_r101_512x512_160k_ade20k-20200718_131734.log.json) | ## Citation diff --git a/configs/setr/README.md b/configs/setr/README.md index 556c625f41..15be6ec099 100644 --- a/configs/setr/README.md +++ b/configs/setr/README.md @@ -47,20 +47,20 @@ This script convert the model from `PRETRAIN_PATH` and store the converted model ### ADE20K -| Method | Backbone | Crop Size | Batch Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ---------- | -------- | --------- | ---------- | ------- | -------- | -------------- | ------ | ----- | ------------: | ----------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| SETR Naive | ViT-L | 512x512 | 16 | 160000 | 18.40 | 4.72 | V100 | 48.28 | 49.56 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/setr/setr_vit-l_naive_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_naive_512x512_160k_b16_ade20k/setr_naive_512x512_160k_b16_ade20k_20210619_191258-061f24f5.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_naive_512x512_160k_b16_ade20k/setr_naive_512x512_160k_b16_ade20k_20210619_191258.log.json) | -| SETR PUP | ViT-L | 512x512 | 16 | 160000 | 19.54 | 4.50 | V100 | 48.24 | 49.99 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/setr/setr_vit-l_pup_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_pup_512x512_160k_b16_ade20k/setr_pup_512x512_160k_b16_ade20k_20210619_191343-7e0ce826.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_pup_512x512_160k_b16_ade20k/setr_pup_512x512_160k_b16_ade20k_20210619_191343.log.json) | -| SETR MLA | ViT-L | 512x512 | 8 | 160000 | 10.96 | - | V100 | 47.34 | 49.05 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/setr/setr_vit-l-mla_8xb1-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_mla_512x512_160k_b8_ade20k/setr_mla_512x512_160k_b8_ade20k_20210619_191118-c6d21df0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_mla_512x512_160k_b8_ade20k/setr_mla_512x512_160k_b8_ade20k_20210619_191118.log.json) | -| SETR MLA | ViT-L | 512x512 | 16 | 160000 | 17.30 | 5.25 | V100 | 47.39 | 49.37 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/setr/setr_vit-l_mla_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_mla_512x512_160k_b16_ade20k/setr_mla_512x512_160k_b16_ade20k_20210619_191057-f9741de7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_mla_512x512_160k_b16_ade20k/setr_mla_512x512_160k_b16_ade20k_20210619_191057.log.json) | +| Method | Backbone | Crop Size | Batch Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------- | -------- | --------- | ---------- | ------- | -------- | -------------- | ------ | ----- | ------------: | -------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| SETR Naive | ViT-L | 512x512 | 16 | 160000 | 18.40 | 4.72 | V100 | 48.28 | 49.56 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/setr/setr_vit-l_naive_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_naive_512x512_160k_b16_ade20k/setr_naive_512x512_160k_b16_ade20k_20210619_191258-061f24f5.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_naive_512x512_160k_b16_ade20k/setr_naive_512x512_160k_b16_ade20k_20210619_191258.log.json) | +| SETR PUP | ViT-L | 512x512 | 16 | 160000 | 19.54 | 4.50 | V100 | 48.24 | 49.99 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/setr/setr_vit-l_pup_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_pup_512x512_160k_b16_ade20k/setr_pup_512x512_160k_b16_ade20k_20210619_191343-7e0ce826.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_pup_512x512_160k_b16_ade20k/setr_pup_512x512_160k_b16_ade20k_20210619_191343.log.json) | +| SETR MLA | ViT-L | 512x512 | 8 | 160000 | 10.96 | - | V100 | 47.34 | 49.05 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/setr/setr_vit-l-mla_8xb1-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_mla_512x512_160k_b8_ade20k/setr_mla_512x512_160k_b8_ade20k_20210619_191118-c6d21df0.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_mla_512x512_160k_b8_ade20k/setr_mla_512x512_160k_b8_ade20k_20210619_191118.log.json) | +| SETR MLA | ViT-L | 512x512 | 16 | 160000 | 17.30 | 5.25 | V100 | 47.39 | 49.37 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/setr/setr_vit-l_mla_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_mla_512x512_160k_b16_ade20k/setr_mla_512x512_160k_b16_ade20k_20210619_191057-f9741de7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_mla_512x512_160k_b16_ade20k/setr_mla_512x512_160k_b16_ade20k_20210619_191057.log.json) | ### Cityscapes -| Method | Backbone | Crop Size | Batch Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ---------- | -------- | --------- | ---------- | ------- | -------- | -------------- | ------ | ----- | ------------: | -------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| SETR Naive | ViT-L | 768x768 | 8 | 80000 | 24.06 | 0.39 | V100 | 78.10 | 80.22 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/setr/setr_vit-l_naive_8xb1-80k_cityscapes-768x768.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_naive_vit-large_8x1_768x768_80k_cityscapes/setr_naive_vit-large_8x1_768x768_80k_cityscapes_20211123_000505-20728e80.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_naive_vit-large_8x1_768x768_80k_cityscapes/setr_naive_vit-large_8x1_768x768_80k_cityscapes_20211123_000505.log.json) | -| SETR PUP | ViT-L | 768x768 | 8 | 80000 | 27.96 | 0.37 | V100 | 79.21 | 81.02 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/setr/setr_vit-l_pup_8xb1-80k_cityscapes-768x768.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_pup_vit-large_8x1_768x768_80k_cityscapes/setr_pup_vit-large_8x1_768x768_80k_cityscapes_20211122_155115-f6f37b8f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_pup_vit-large_8x1_768x768_80k_cityscapes/setr_pup_vit-large_8x1_768x768_80k_cityscapes_20211122_155115.log.json) | -| SETR MLA | ViT-L | 768x768 | 8 | 80000 | 24.10 | 0.41 | V100 | 77.00 | 79.59 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/setr/setr_vit-l_mla_8xb1-80k_cityscapes-768x768.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_mla_vit-large_8x1_768x768_80k_cityscapes/setr_mla_vit-large_8x1_768x768_80k_cityscapes_20211119_101003-7f8dccbe.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_mla_vit-large_8x1_768x768_80k_cityscapes/setr_mla_vit-large_8x1_768x768_80k_cityscapes_20211119_101003.log.json) | +| Method | Backbone | Crop Size | Batch Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------- | -------- | --------- | ---------- | ------- | -------- | -------------- | ------ | ----- | ------------: | ----------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| SETR Naive | ViT-L | 768x768 | 8 | 80000 | 24.06 | 0.39 | V100 | 78.10 | 80.22 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/setr/setr_vit-l_naive_8xb1-80k_cityscapes-768x768.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_naive_vit-large_8x1_768x768_80k_cityscapes/setr_naive_vit-large_8x1_768x768_80k_cityscapes_20211123_000505-20728e80.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_naive_vit-large_8x1_768x768_80k_cityscapes/setr_naive_vit-large_8x1_768x768_80k_cityscapes_20211123_000505.log.json) | +| SETR PUP | ViT-L | 768x768 | 8 | 80000 | 27.96 | 0.37 | V100 | 79.21 | 81.02 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/setr/setr_vit-l_pup_8xb1-80k_cityscapes-768x768.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_pup_vit-large_8x1_768x768_80k_cityscapes/setr_pup_vit-large_8x1_768x768_80k_cityscapes_20211122_155115-f6f37b8f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_pup_vit-large_8x1_768x768_80k_cityscapes/setr_pup_vit-large_8x1_768x768_80k_cityscapes_20211122_155115.log.json) | +| SETR MLA | ViT-L | 768x768 | 8 | 80000 | 24.10 | 0.41 | V100 | 77.00 | 79.59 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/setr/setr_vit-l_mla_8xb1-80k_cityscapes-768x768.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_mla_vit-large_8x1_768x768_80k_cityscapes/setr_mla_vit-large_8x1_768x768_80k_cityscapes_20211119_101003-7f8dccbe.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/setr/setr_mla_vit-large_8x1_768x768_80k_cityscapes/setr_mla_vit-large_8x1_768x768_80k_cityscapes_20211119_101003.log.json) | ## Citation diff --git a/configs/stdc/README.md b/configs/stdc/README.md index 1efd65482f..3e8bf60688 100644 --- a/configs/stdc/README.md +++ b/configs/stdc/README.md @@ -46,12 +46,12 @@ This script convert model from `PRETRAIN_PATH` and store the converted model in ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------ | -------------------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------- | -------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| STDC | STDC1 (No Pretrain) | 512x1024 | 80000 | 7.15 | 23.06 | V100 | 71.82 | 73.89 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/stdc/stdc1_4xb12-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc1_512x1024_80k_cityscapes/stdc1_512x1024_80k_cityscapes_20220224_073048-74e6920a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc1_512x1024_80k_cityscapes/stdc1_512x1024_80k_cityscapes_20220224_073048.log.json) | -| STDC | STDC1 | 512x1024 | 80000 | - | - | V100 | 74.94 | 76.97 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/stdc/stdc1_in1k-pre_4xb12-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc1_in1k-pre_512x1024_80k_cityscapes/stdc1_in1k-pre_512x1024_80k_cityscapes_20220224_141648-3d4c2981.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc1_in1k-pre_512x1024_80k_cityscapes/stdc1_in1k-pre_512x1024_80k_cityscapes_20220224_141648.log.json) | -| STDC | STDC2 (No Pretrain) | 512x1024 | 80000 | 8.27 | 23.71 | V100 | 73.15 | 76.13 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/stdc/stdc2_4xb12-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc2_512x1024_80k_cityscapes/stdc2_512x1024_80k_cityscapes_20220222_132015-fb1e3a1a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc2_512x1024_80k_cityscapes/stdc2_512x1024_80k_cityscapes_20220222_132015.log.json) | -| STDC | STDC2 | 512x1024 | 80000 | - | - | V100 | 76.67 | 78.67 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/stdc/stdc2_in1k-pre_4xb12-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc2_in1k-pre_512x1024_80k_cityscapes/stdc2_in1k-pre_512x1024_80k_cityscapes_20220224_073048-1f8f0f6c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc2_in1k-pre_512x1024_80k_cityscapes/stdc2_in1k-pre_512x1024_80k_cityscapes_20220224_073048.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------ | -------------------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------- | ----------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| STDC | STDC1 (No Pretrain) | 512x1024 | 80000 | 7.15 | 23.06 | V100 | 71.82 | 73.89 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/stdc/stdc1_4xb12-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc1_512x1024_80k_cityscapes/stdc1_512x1024_80k_cityscapes_20220224_073048-74e6920a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc1_512x1024_80k_cityscapes/stdc1_512x1024_80k_cityscapes_20220224_073048.log.json) | +| STDC | STDC1 | 512x1024 | 80000 | - | - | V100 | 74.94 | 76.97 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/stdc/stdc1_in1k-pre_4xb12-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc1_in1k-pre_512x1024_80k_cityscapes/stdc1_in1k-pre_512x1024_80k_cityscapes_20220224_141648-3d4c2981.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc1_in1k-pre_512x1024_80k_cityscapes/stdc1_in1k-pre_512x1024_80k_cityscapes_20220224_141648.log.json) | +| STDC | STDC2 (No Pretrain) | 512x1024 | 80000 | 8.27 | 23.71 | V100 | 73.15 | 76.13 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/stdc/stdc2_4xb12-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc2_512x1024_80k_cityscapes/stdc2_512x1024_80k_cityscapes_20220222_132015-fb1e3a1a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc2_512x1024_80k_cityscapes/stdc2_512x1024_80k_cityscapes_20220222_132015.log.json) | +| STDC | STDC2 | 512x1024 | 80000 | - | - | V100 | 76.67 | 78.67 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/stdc/stdc2_in1k-pre_4xb12-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc2_in1k-pre_512x1024_80k_cityscapes/stdc2_in1k-pre_512x1024_80k_cityscapes_20220224_073048-1f8f0f6c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/stdc/stdc2_in1k-pre_512x1024_80k_cityscapes/stdc2_in1k-pre_512x1024_80k_cityscapes_20220224_073048.log.json) | Note: diff --git a/configs/twins/README.md b/configs/twins/README.md index 306b65fac8..e4b3735b00 100644 --- a/configs/twins/README.md +++ b/configs/twins/README.md @@ -44,20 +44,20 @@ python tools/model_converters/twins2mmseg.py ./alt_gvt_base.pth ./pretrained/alt ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------- | ------------------- | --------- | ------- | -------- | -------------- | ------ | ----- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| FPN | Twins-PCPVT-S | 512x512 | 80000 | 6.60 | 27.15 | V100 | 43.26 | 44.11 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/twins/twins_pcpvt-s_fpn_fpnhead_8xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-s_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_pcpvt-s_fpn_fpnhead_8x4_512x512_80k_ade20k_20211201_204132-41acd132.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-s_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_pcpvt-s_fpn_fpnhead_8x4_512x512_80k_ade20k_20211201_204132.log.json) | -| UPerNet | Twins-PCPVT-S | 512x512 | 160000 | 9.67 | 14.24 | V100 | 46.04 | 46.92 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/twins/twins_pcpvt-s_uperhead_8xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-s_uperhead_8x4_512x512_160k_ade20k/twins_pcpvt-s_uperhead_8x4_512x512_160k_ade20k_20211201_233537-8e99c07a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-s_uperhead_8x4_512x512_160k_ade20k/twins_pcpvt-s_uperhead_8x4_512x512_160k_ade20k_20211201_233537.log.json) | -| FPN | Twins-PCPVT-B | 512x512 | 80000 | 8.41 | 19.67 | V100 | 45.66 | 46.48 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/twins/twins_pcpvt-b_fpn_fpnhead_8xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-b_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_pcpvt-b_fpn_fpnhead_8x4_512x512_80k_ade20k_20211130_141019-d396db72.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-b_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_pcpvt-b_fpn_fpnhead_8x4_512x512_80k_ade20k_20211130_141019.log.json) | -| UPerNet | Twins-PCPVT-B (8x2) | 512x512 | 160000 | 6.46 | 12.04 | V100 | 47.91 | 48.64 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/twins/twins_pcpvt-b_uperhead_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-b_uperhead_8x2_512x512_160k_ade20k/twins_pcpvt-b_uperhead_8x2_512x512_160k_ade20k_20211130_141020-02094ea5.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-b_uperhead_8x2_512x512_160k_ade20k/twins_pcpvt-b_uperhead_8x2_512x512_160k_ade20k_20211130_141020.log.json) | -| FPN | Twins-PCPVT-L | 512x512 | 80000 | 10.78 | 14.32 | V100 | 45.94 | 46.70 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/twins/twins_pcpvt-l_fpn_fpnhead_8xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-l_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_pcpvt-l_fpn_fpnhead_8x4_512x512_80k_ade20k_20211201_105226-bc6d61dc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-l_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_pcpvt-l_fpn_fpnhead_8x4_512x512_80k_ade20k_20211201_105226.log.json) | -| UPerNet | Twins-PCPVT-L (8x2) | 512x512 | 160000 | 7.82 | 10.70 | V100 | 49.35 | 50.08 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/twins/twins_pcpvt-l_uperhead_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-l_uperhead_8x2_512x512_160k_ade20k/twins_pcpvt-l_uperhead_8x2_512x512_160k_ade20k_20211201_075053-c6095c07.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-l_uperhead_8x2_512x512_160k_ade20k/twins_pcpvt-l_uperhead_8x2_512x512_160k_ade20k_20211201_075053.log.json) | -| FPN | Twins-SVT-S | 512x512 | 80000 | 5.80 | 29.79 | V100 | 44.47 | 45.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/twins/twins_svt-s_fpn_fpnhead_8xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-s_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_svt-s_fpn_fpnhead_8x4_512x512_80k_ade20k_20211130_141006-0a0d3317.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-s_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_svt-s_fpn_fpnhead_8x4_512x512_80k_ade20k_20211130_141006.log.json) | -| UPerNet | SVT-S (8x2) | 512x512 | 160000 | 4.93 | 15.09 | V100 | 46.08 | 46.96 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/twins/twins_svt-s_uperhead_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-s_uperhead_8x2_512x512_160k_ade20k/twins_svt-s_uperhead_8x2_512x512_160k_ade20k_20211130_141005-e48a2d94.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-s_uperhead_8x2_512x512_160k_ade20k/twins_svt-s_uperhead_8x2_512x512_160k_ade20k_20211130_141005.log.json) | -| FPN | Twins-SVT-B | 512x512 | 80000 | 8.75 | 21.10 | V100 | 46.77 | 47.47 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/twins/twins_svt-b_fpn_fpnhead_8xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-b_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_svt-b_fpn_fpnhead_8x4_512x512_80k_ade20k_20211201_113849-88b2907c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-b_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_svt-b_fpn_fpnhead_8x4_512x512_80k_ade20k_20211201_113849.log.json) | -| UPerNet | Twins-SVT-B (8x2) | 512x512 | 160000 | 6.77 | 12.66 | V100 | 48.04 | 48.87 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/twins/twins_svt-b_uperhead_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-b_uperhead_8x2_512x512_160k_ade20k/twins_svt-b_uperhead_8x2_512x512_160k_ade20k_20211202_040826-0943a1f1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-b_uperhead_8x2_512x512_160k_ade20k/twins_svt-b_uperhead_8x2_512x512_160k_ade20k_20211202_040826.log.json) | -| FPN | Twins-SVT-L | 512x512 | 80000 | 11.20 | 17.80 | V100 | 46.55 | 47.74 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/twins/twins_svt-l_fpn_fpnhead_8xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-l_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_svt-l_fpn_fpnhead_8x4_512x512_80k_ade20k_20211130_141005-1d59bee2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-l_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_svt-l_fpn_fpnhead_8x4_512x512_80k_ade20k_20211130_141005.log.json) | -| UPerNet | Twins-SVT-L (8x2) | 512x512 | 160000 | 8.41 | 10.73 | V100 | 49.65 | 50.63 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/twins/twins_pcpvt-l_uperhead_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-l_uperhead_8x2_512x512_160k_ade20k/twins_svt-l_uperhead_8x2_512x512_160k_ade20k_20211130_141005-3e2cae61.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-l_uperhead_8x2_512x512_160k_ade20k/twins_svt-l_uperhead_8x2_512x512_160k_ade20k_20211130_141005.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------- | ------------------- | --------- | ------- | -------- | -------------- | ------ | ----- | ------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| FPN | Twins-PCPVT-S | 512x512 | 80000 | 6.60 | 27.15 | V100 | 43.26 | 44.11 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/twins/twins_pcpvt-s_fpn_fpnhead_8xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-s_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_pcpvt-s_fpn_fpnhead_8x4_512x512_80k_ade20k_20211201_204132-41acd132.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-s_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_pcpvt-s_fpn_fpnhead_8x4_512x512_80k_ade20k_20211201_204132.log.json) | +| UPerNet | Twins-PCPVT-S | 512x512 | 160000 | 9.67 | 14.24 | V100 | 46.04 | 46.92 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/twins/twins_pcpvt-s_uperhead_8xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-s_uperhead_8x4_512x512_160k_ade20k/twins_pcpvt-s_uperhead_8x4_512x512_160k_ade20k_20211201_233537-8e99c07a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-s_uperhead_8x4_512x512_160k_ade20k/twins_pcpvt-s_uperhead_8x4_512x512_160k_ade20k_20211201_233537.log.json) | +| FPN | Twins-PCPVT-B | 512x512 | 80000 | 8.41 | 19.67 | V100 | 45.66 | 46.48 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/twins/twins_pcpvt-b_fpn_fpnhead_8xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-b_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_pcpvt-b_fpn_fpnhead_8x4_512x512_80k_ade20k_20211130_141019-d396db72.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-b_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_pcpvt-b_fpn_fpnhead_8x4_512x512_80k_ade20k_20211130_141019.log.json) | +| UPerNet | Twins-PCPVT-B (8x2) | 512x512 | 160000 | 6.46 | 12.04 | V100 | 47.91 | 48.64 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/twins/twins_pcpvt-b_uperhead_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-b_uperhead_8x2_512x512_160k_ade20k/twins_pcpvt-b_uperhead_8x2_512x512_160k_ade20k_20211130_141020-02094ea5.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-b_uperhead_8x2_512x512_160k_ade20k/twins_pcpvt-b_uperhead_8x2_512x512_160k_ade20k_20211130_141020.log.json) | +| FPN | Twins-PCPVT-L | 512x512 | 80000 | 10.78 | 14.32 | V100 | 45.94 | 46.70 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/twins/twins_pcpvt-l_fpn_fpnhead_8xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-l_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_pcpvt-l_fpn_fpnhead_8x4_512x512_80k_ade20k_20211201_105226-bc6d61dc.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-l_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_pcpvt-l_fpn_fpnhead_8x4_512x512_80k_ade20k_20211201_105226.log.json) | +| UPerNet | Twins-PCPVT-L (8x2) | 512x512 | 160000 | 7.82 | 10.70 | V100 | 49.35 | 50.08 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/twins/twins_pcpvt-l_uperhead_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-l_uperhead_8x2_512x512_160k_ade20k/twins_pcpvt-l_uperhead_8x2_512x512_160k_ade20k_20211201_075053-c6095c07.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_pcpvt-l_uperhead_8x2_512x512_160k_ade20k/twins_pcpvt-l_uperhead_8x2_512x512_160k_ade20k_20211201_075053.log.json) | +| FPN | Twins-SVT-S | 512x512 | 80000 | 5.80 | 29.79 | V100 | 44.47 | 45.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/twins/twins_svt-s_fpn_fpnhead_8xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-s_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_svt-s_fpn_fpnhead_8x4_512x512_80k_ade20k_20211130_141006-0a0d3317.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-s_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_svt-s_fpn_fpnhead_8x4_512x512_80k_ade20k_20211130_141006.log.json) | +| UPerNet | SVT-S (8x2) | 512x512 | 160000 | 4.93 | 15.09 | V100 | 46.08 | 46.96 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/twins/twins_svt-s_uperhead_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-s_uperhead_8x2_512x512_160k_ade20k/twins_svt-s_uperhead_8x2_512x512_160k_ade20k_20211130_141005-e48a2d94.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-s_uperhead_8x2_512x512_160k_ade20k/twins_svt-s_uperhead_8x2_512x512_160k_ade20k_20211130_141005.log.json) | +| FPN | Twins-SVT-B | 512x512 | 80000 | 8.75 | 21.10 | V100 | 46.77 | 47.47 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/twins/twins_svt-b_fpn_fpnhead_8xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-b_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_svt-b_fpn_fpnhead_8x4_512x512_80k_ade20k_20211201_113849-88b2907c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-b_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_svt-b_fpn_fpnhead_8x4_512x512_80k_ade20k_20211201_113849.log.json) | +| UPerNet | Twins-SVT-B (8x2) | 512x512 | 160000 | 6.77 | 12.66 | V100 | 48.04 | 48.87 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/twins/twins_svt-b_uperhead_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-b_uperhead_8x2_512x512_160k_ade20k/twins_svt-b_uperhead_8x2_512x512_160k_ade20k_20211202_040826-0943a1f1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-b_uperhead_8x2_512x512_160k_ade20k/twins_svt-b_uperhead_8x2_512x512_160k_ade20k_20211202_040826.log.json) | +| FPN | Twins-SVT-L | 512x512 | 80000 | 11.20 | 17.80 | V100 | 46.55 | 47.74 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/twins/twins_svt-l_fpn_fpnhead_8xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-l_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_svt-l_fpn_fpnhead_8x4_512x512_80k_ade20k_20211130_141005-1d59bee2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-l_fpn_fpnhead_8x4_512x512_80k_ade20k/twins_svt-l_fpn_fpnhead_8x4_512x512_80k_ade20k_20211130_141005.log.json) | +| UPerNet | Twins-SVT-L (8x2) | 512x512 | 160000 | 8.41 | 10.73 | V100 | 49.65 | 50.63 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/twins/twins_pcpvt-l_uperhead_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-l_uperhead_8x2_512x512_160k_ade20k/twins_svt-l_uperhead_8x2_512x512_160k_ade20k_20211130_141005-3e2cae61.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/twins/twins_svt-l_uperhead_8x2_512x512_160k_ade20k/twins_svt-l_uperhead_8x2_512x512_160k_ade20k_20211130_141005.log.json) | Note: diff --git a/configs/unet/README.md b/configs/unet/README.md index e42cd0f91e..7225fbbf68 100644 --- a/configs/unet/README.md +++ b/configs/unet/README.md @@ -26,53 +26,53 @@ There is large consent that successful training of deep networks requires many t ### Cityscapes -| Method | Backbone | Loss | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ---------- | ----------- | ------------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| UNet + FCN | UNet-S5-D16 | Cross Entropy | 512x1024 | 160000 | 17.91 | 3.05 | V100 | 69.10 | 71.05 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_fcn_4xb4-160k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_4x4_512x1024_160k_cityscapes/fcn_unet_s5-d16_4x4_512x1024_160k_cityscapes_20211210_145204-6860854e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_4x4_512x1024_160k_cityscapes/fcn_unet_s5-d16_4x4_512x1024_160k_cityscapes_20211210_145204.log.json) | +| Method | Backbone | Loss | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ---------- | ----------- | ------------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| UNet + FCN | UNet-S5-D16 | Cross Entropy | 512x1024 | 160000 | 17.91 | 3.05 | V100 | 69.10 | 71.05 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/unet/unet-s5-d16_fcn_4xb4-160k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_4x4_512x1024_160k_cityscapes/fcn_unet_s5-d16_4x4_512x1024_160k_cityscapes_20211210_145204-6860854e.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_4x4_512x1024_160k_cityscapes/fcn_unet_s5-d16_4x4_512x1024_160k_cityscapes_20211210_145204.log.json) | ### DRIVE -| Method | Backbone | Loss | Image Size | Crop Size | Stride | Lr schd | Mem (GB) | Inf time (fps) | Device | mDice | Dice | config | download | -| ---------------- | ----------- | -------------------- | ---------- | --------- | -----: | ------- | -------- | -------------: | ------ | ----: | ----: | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| UNet + FCN | UNet-S5-D16 | Cross Entropy | 584x565 | 64x64 | 42x42 | 40000 | 0.680 | - | V100 | 88.38 | 78.67 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_fcn_4xb4-40k_drive-64x64.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_64x64_40k_drive/fcn_unet_s5-d16_64x64_40k_drive_20201223_191051-5daf6d3b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/unet_s5-d16_64x64_40k_drive/unet_s5-d16_64x64_40k_drive-20201223_191051.log.json) | -| UNet + FCN | UNet-S5-D16 | Cross Entropy + Dice | 584x565 | 64x64 | 42x42 | 40000 | 0.582 | - | V100 | 88.71 | 79.32 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_fcn_4xb4-ce-1.0-dice-3.0-40k_drive-64x64.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive/fcn_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive_20211210_201820-785de5c2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive/fcn_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive_20211210_201820.log.json) | -| UNet + PSPNet | UNet-S5-D16 | Cross Entropy | 584x565 | 64x64 | 42x42 | 40000 | 0.599 | - | V100 | 88.35 | 78.62 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_pspnet_4xb4-40k_drive-64x64.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_64x64_40k_drive/pspnet_unet_s5-d16_64x64_40k_drive_20201227_181818-aac73387.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_64x64_40k_drive/pspnet_unet_s5-d16_64x64_40k_drive-20201227_181818.log.json) | -| UNet + PSPNet | UNet-S5-D16 | Cross Entropy + Dice | 584x565 | 64x64 | 42x42 | 40000 | 0.585 | - | V100 | 88.76 | 79.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_pspnet_4xb4-ce-1.0-dice-3.0-40k_drive-64x64.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive/pspnet_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive_20211210_201821-22b3e3ba.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive/pspnet_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive_20211210_201821.log.json) | -| UNet + DeepLabV3 | UNet-S5-D16 | Cross Entropy | 584x565 | 64x64 | 42x42 | 40000 | 0.596 | - | V100 | 88.38 | 78.69 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_deeplabv3_4xb4-40k_drive-64x64.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_64x64_40k_drive/deeplabv3_unet_s5-d16_64x64_40k_drive_20201226_094047-0671ff20.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_64x64_40k_drive/deeplabv3_unet_s5-d16_64x64_40k_drive-20201226_094047.log.json) | -| UNet + DeepLabV3 | UNet-S5-D16 | Cross Entropy + Dice | 584x565 | 64x64 | 42x42 | 40000 | 0.582 | - | V100 | 88.84 | 79.56 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_deeplabv3_4xb4-ce-1.0-dice-3.0-40k_drive-64x64.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive_20211210_201825-6bf0efd7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive_20211210_201825.log.json) | +| Method | Backbone | Loss | Image Size | Crop Size | Stride | Lr schd | Mem (GB) | Inf time (fps) | Device | mDice | Dice | config | download | +| ---------------- | ----------- | -------------------- | ---------- | --------- | -----: | ------- | -------- | -------------: | ------ | ----: | ----: | ------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| UNet + FCN | UNet-S5-D16 | Cross Entropy | 584x565 | 64x64 | 42x42 | 40000 | 0.680 | - | V100 | 88.38 | 78.67 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/unet/unet-s5-d16_fcn_4xb4-40k_drive-64x64.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_64x64_40k_drive/fcn_unet_s5-d16_64x64_40k_drive_20201223_191051-5daf6d3b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/unet_s5-d16_64x64_40k_drive/unet_s5-d16_64x64_40k_drive-20201223_191051.log.json) | +| UNet + FCN | UNet-S5-D16 | Cross Entropy + Dice | 584x565 | 64x64 | 42x42 | 40000 | 0.582 | - | V100 | 88.71 | 79.32 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/unet/unet-s5-d16_fcn_4xb4-ce-1.0-dice-3.0-40k_drive-64x64.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive/fcn_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive_20211210_201820-785de5c2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive/fcn_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive_20211210_201820.log.json) | +| UNet + PSPNet | UNet-S5-D16 | Cross Entropy | 584x565 | 64x64 | 42x42 | 40000 | 0.599 | - | V100 | 88.35 | 78.62 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/unet/unet-s5-d16_pspnet_4xb4-40k_drive-64x64.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_64x64_40k_drive/pspnet_unet_s5-d16_64x64_40k_drive_20201227_181818-aac73387.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_64x64_40k_drive/pspnet_unet_s5-d16_64x64_40k_drive-20201227_181818.log.json) | +| UNet + PSPNet | UNet-S5-D16 | Cross Entropy + Dice | 584x565 | 64x64 | 42x42 | 40000 | 0.585 | - | V100 | 88.76 | 79.42 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/unet/unet-s5-d16_pspnet_4xb4-ce-1.0-dice-3.0-40k_drive-64x64.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive/pspnet_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive_20211210_201821-22b3e3ba.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive/pspnet_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive_20211210_201821.log.json) | +| UNet + DeepLabV3 | UNet-S5-D16 | Cross Entropy | 584x565 | 64x64 | 42x42 | 40000 | 0.596 | - | V100 | 88.38 | 78.69 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/unet/unet-s5-d16_deeplabv3_4xb4-40k_drive-64x64.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_64x64_40k_drive/deeplabv3_unet_s5-d16_64x64_40k_drive_20201226_094047-0671ff20.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_64x64_40k_drive/deeplabv3_unet_s5-d16_64x64_40k_drive-20201226_094047.log.json) | +| UNet + DeepLabV3 | UNet-S5-D16 | Cross Entropy + Dice | 584x565 | 64x64 | 42x42 | 40000 | 0.582 | - | V100 | 88.84 | 79.56 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/unet/unet-s5-d16_deeplabv3_4xb4-ce-1.0-dice-3.0-40k_drive-64x64.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive_20211210_201825-6bf0efd7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_64x64_40k_drive_20211210_201825.log.json) | ### STARE -| Method | Backbone | Loss | Image Size | Crop Size | Stride | Lr schd | Mem (GB) | Inf time (fps) | Device | mDice | Dice | config | download | -| ---------------- | ----------- | -------------------- | ---------- | --------- | -----: | ------- | -------- | -------------: | ------ | ----: | ----: | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| UNet + FCN | UNet-S5-D16 | Cross Entropy | 605x700 | 128x128 | 85x85 | 40000 | 0.968 | - | V100 | 89.78 | 81.02 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_fcn_4xb4-40k_stare-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_128x128_40k_stare/fcn_unet_s5-d16_128x128_40k_stare_20201223_191051-7d77e78b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/unet_s5-d16_128x128_40k_stare/unet_s5-d16_128x128_40k_stare-20201223_191051.log.json) | -| UNet + FCN | UNet-S5-D16 | Cross Entropy + Dice | 605x700 | 128x128 | 85x85 | 40000 | 0.986 | - | V100 | 90.65 | 82.70 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_fcn_4xb4-ce-1.0-dice-3.0-40k_stare-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare_20211210_201821-f75705a9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare_20211210_201821.log.json) | -| UNet + PSPNet | UNet-S5-D16 | Cross Entropy | 605x700 | 128x128 | 85x85 | 40000 | 0.982 | - | V100 | 89.89 | 81.22 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_pspnet_4xb4-40k_stare-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_128x128_40k_stare/pspnet_unet_s5-d16_128x128_40k_stare_20201227_181818-3c2923c4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_128x128_40k_stare/pspnet_unet_s5-d16_128x128_40k_stare-20201227_181818.log.json) | -| UNet + PSPNet | UNet-S5-D16 | Cross Entropy + Dice | 605x700 | 128x128 | 85x85 | 40000 | 1.028 | - | V100 | 90.72 | 82.84 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_pspnet_4xb4-ce-1.0-dice-3.0-40k_stare-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare_20211210_201823-f1063ef7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare_20211210_201823.log.json) | -| UNet + DeepLabV3 | UNet-S5-D16 | Cross Entropy | 605x700 | 128x128 | 85x85 | 40000 | 0.999 | - | V100 | 89.73 | 80.93 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_deeplabv3_4xb4-40k_stare-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_128x128_40k_stare/deeplabv3_unet_s5-d16_128x128_40k_stare_20201226_094047-93dcb93c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_128x128_40k_stare/deeplabv3_unet_s5-d16_128x128_40k_stare-20201226_094047.log.json) | -| UNet + DeepLabV3 | UNet-S5-D16 | Cross Entropy + Dice | 605x700 | 128x128 | 85x85 | 40000 | 1.010 | - | V100 | 90.65 | 82.71 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_deeplabv3_4xb4-ce-1.0-dice-3.0-40k_stare-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare_20211210_201825-21db614c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare_20211210_201825.log.json) | +| Method | Backbone | Loss | Image Size | Crop Size | Stride | Lr schd | Mem (GB) | Inf time (fps) | Device | mDice | Dice | config | download | +| ---------------- | ----------- | -------------------- | ---------- | --------- | -----: | ------- | -------- | -------------: | ------ | ----: | ----: | --------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| UNet + FCN | UNet-S5-D16 | Cross Entropy | 605x700 | 128x128 | 85x85 | 40000 | 0.968 | - | V100 | 89.78 | 81.02 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/unet/unet-s5-d16_fcn_4xb4-40k_stare-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_128x128_40k_stare/fcn_unet_s5-d16_128x128_40k_stare_20201223_191051-7d77e78b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/unet_s5-d16_128x128_40k_stare/unet_s5-d16_128x128_40k_stare-20201223_191051.log.json) | +| UNet + FCN | UNet-S5-D16 | Cross Entropy + Dice | 605x700 | 128x128 | 85x85 | 40000 | 0.986 | - | V100 | 90.65 | 82.70 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/unet/unet-s5-d16_fcn_4xb4-ce-1.0-dice-3.0-40k_stare-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare_20211210_201821-f75705a9.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare_20211210_201821.log.json) | +| UNet + PSPNet | UNet-S5-D16 | Cross Entropy | 605x700 | 128x128 | 85x85 | 40000 | 0.982 | - | V100 | 89.89 | 81.22 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/unet/unet-s5-d16_pspnet_4xb4-40k_stare-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_128x128_40k_stare/pspnet_unet_s5-d16_128x128_40k_stare_20201227_181818-3c2923c4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_128x128_40k_stare/pspnet_unet_s5-d16_128x128_40k_stare-20201227_181818.log.json) | +| UNet + PSPNet | UNet-S5-D16 | Cross Entropy + Dice | 605x700 | 128x128 | 85x85 | 40000 | 1.028 | - | V100 | 90.72 | 82.84 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/unet/unet-s5-d16_pspnet_4xb4-ce-1.0-dice-3.0-40k_stare-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare_20211210_201823-f1063ef7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare_20211210_201823.log.json) | +| UNet + DeepLabV3 | UNet-S5-D16 | Cross Entropy | 605x700 | 128x128 | 85x85 | 40000 | 0.999 | - | V100 | 89.73 | 80.93 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/unet/unet-s5-d16_deeplabv3_4xb4-40k_stare-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_128x128_40k_stare/deeplabv3_unet_s5-d16_128x128_40k_stare_20201226_094047-93dcb93c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_128x128_40k_stare/deeplabv3_unet_s5-d16_128x128_40k_stare-20201226_094047.log.json) | +| UNet + DeepLabV3 | UNet-S5-D16 | Cross Entropy + Dice | 605x700 | 128x128 | 85x85 | 40000 | 1.010 | - | V100 | 90.65 | 82.71 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/unet/unet-s5-d16_deeplabv3_4xb4-ce-1.0-dice-3.0-40k_stare-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare_20211210_201825-21db614c.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_stare_20211210_201825.log.json) | ### CHASE_DB1 -| Method | Backbone | Loss | Image Size | Crop Size | Stride | Lr schd | Mem (GB) | Inf time (fps) | Device | mDice | Dice | config | download | -| ---------------- | ----------- | -------------------- | ---------- | --------- | -----: | ------- | -------- | -------------: | ------ | ----: | ----: | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| UNet + FCN | UNet-S5-D16 | Cross Entropy | 960x999 | 128x128 | 85x85 | 40000 | 0.968 | - | V100 | 89.46 | 80.24 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_fcn_4xb4-40k_chase-db1-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_128x128_40k_chase_db1/fcn_unet_s5-d16_128x128_40k_chase_db1_20201223_191051-11543527.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/unet_s5-d16_128x128_40k_chase_db1/unet_s5-d16_128x128_40k_chase_db1-20201223_191051.log.json) | -| UNet + FCN | UNet-S5-D16 | Cross Entropy + Dice | 960x999 | 128x128 | 85x85 | 40000 | 0.986 | - | V100 | 89.52 | 80.40 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_fcn_4xb4-ce-1.0-dice-3.0-40k_chase-db1-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1_20211210_201821-1c4eb7cf.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1_20211210_201821.log.json) | -| UNet + PSPNet | UNet-S5-D16 | Cross Entropy | 960x999 | 128x128 | 85x85 | 40000 | 0.982 | - | V100 | 89.52 | 80.36 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_pspnet_4xb4-40k_chase-db1-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_128x128_40k_chase_db1/pspnet_unet_s5-d16_128x128_40k_chase_db1_20201227_181818-68d4e609.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_128x128_40k_chase_db1/pspnet_unet_s5-d16_128x128_40k_chase_db1-20201227_181818.log.json) | -| UNet + PSPNet | UNet-S5-D16 | Cross Entropy + Dice | 960x999 | 128x128 | 85x85 | 40000 | 1.028 | - | V100 | 89.45 | 80.28 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_pspnet_4xb4-ce-1.0-dice-3.0-40k_chase-db1-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1_20211210_201823-c0802c4d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1_20211210_201823.log.json) | -| UNet + DeepLabV3 | UNet-S5-D16 | Cross Entropy | 960x999 | 128x128 | 85x85 | 40000 | 0.999 | - | V100 | 89.57 | 80.47 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet_s5-d16_deeplabv3_4xb4-40k_chase-db1-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_128x128_40k_chase_db1/deeplabv3_unet_s5-d16_128x128_40k_chase_db1_20201226_094047-4c5aefa3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_128x128_40k_chase_db1/deeplabv3_unet_s5-d16_128x128_40k_chase_db1-20201226_094047.log.json) | -| UNet + DeepLabV3 | UNet-S5-D16 | Cross Entropy + Dice | 960x999 | 128x128 | 85x85 | 40000 | 1.010 | - | V100 | 89.49 | 80.37 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_deeplabv3_4xb4-ce-1.0-dice-3.0-40k_chase-db1-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1_20211210_201825-4ef29df5.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1_20211210_201825.log.json) | +| Method | Backbone | Loss | Image Size | Crop Size | Stride | Lr schd | Mem (GB) | Inf time (fps) | Device | mDice | Dice | config | download | +| ---------------- | ----------- | -------------------- | ---------- | --------- | -----: | ------- | -------- | -------------: | ------ | ----: | ----: | ------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| UNet + FCN | UNet-S5-D16 | Cross Entropy | 960x999 | 128x128 | 85x85 | 40000 | 0.968 | - | V100 | 89.46 | 80.24 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/unet/unet-s5-d16_fcn_4xb4-40k_chase-db1-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_128x128_40k_chase_db1/fcn_unet_s5-d16_128x128_40k_chase_db1_20201223_191051-11543527.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/unet_s5-d16_128x128_40k_chase_db1/unet_s5-d16_128x128_40k_chase_db1-20201223_191051.log.json) | +| UNet + FCN | UNet-S5-D16 | Cross Entropy + Dice | 960x999 | 128x128 | 85x85 | 40000 | 0.986 | - | V100 | 89.52 | 80.40 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/unet/unet-s5-d16_fcn_4xb4-ce-1.0-dice-3.0-40k_chase-db1-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1_20211210_201821-1c4eb7cf.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1/fcn_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1_20211210_201821.log.json) | +| UNet + PSPNet | UNet-S5-D16 | Cross Entropy | 960x999 | 128x128 | 85x85 | 40000 | 0.982 | - | V100 | 89.52 | 80.36 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/unet/unet-s5-d16_pspnet_4xb4-40k_chase-db1-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_128x128_40k_chase_db1/pspnet_unet_s5-d16_128x128_40k_chase_db1_20201227_181818-68d4e609.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_128x128_40k_chase_db1/pspnet_unet_s5-d16_128x128_40k_chase_db1-20201227_181818.log.json) | +| UNet + PSPNet | UNet-S5-D16 | Cross Entropy + Dice | 960x999 | 128x128 | 85x85 | 40000 | 1.028 | - | V100 | 89.45 | 80.28 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/unet/unet-s5-d16_pspnet_4xb4-ce-1.0-dice-3.0-40k_chase-db1-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1_20211210_201823-c0802c4d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1/pspnet_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1_20211210_201823.log.json) | +| UNet + DeepLabV3 | UNet-S5-D16 | Cross Entropy | 960x999 | 128x128 | 85x85 | 40000 | 0.999 | - | V100 | 89.57 | 80.47 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/unet/unet_s5-d16_deeplabv3_4xb4-40k_chase-db1-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_128x128_40k_chase_db1/deeplabv3_unet_s5-d16_128x128_40k_chase_db1_20201226_094047-4c5aefa3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_128x128_40k_chase_db1/deeplabv3_unet_s5-d16_128x128_40k_chase_db1-20201226_094047.log.json) | +| UNet + DeepLabV3 | UNet-S5-D16 | Cross Entropy + Dice | 960x999 | 128x128 | 85x85 | 40000 | 1.010 | - | V100 | 89.49 | 80.37 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/unet/unet-s5-d16_deeplabv3_4xb4-ce-1.0-dice-3.0-40k_chase-db1-128x128.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1_20211210_201825-4ef29df5.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_128x128_40k_chase-db1_20211210_201825.log.json) | ### HRF -| Method | Backbone | Loss | Image Size | Crop Size | Stride | Lr schd | Mem (GB) | Inf time (fps) | Device | mDice | Dice | config | download | -| ---------------- | ----------- | -------------------- | ---------- | --------- | ------: | ------- | -------- | -------------: | ------ | ----: | ----: | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| UNet + FCN | UNet-S5-D16 | Cross Entropy | 2336x3504 | 256x256 | 170x170 | 40000 | 2.525 | - | V100 | 88.92 | 79.45 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_fcn_4xb4-40k_hrf-256x256.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_256x256_40k_hrf/fcn_unet_s5-d16_256x256_40k_hrf_20201223_173724-d89cf1ed.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/unet_s5-d16_256x256_40k_hrf/unet_s5-d16_256x256_40k_hrf-20201223_173724.log.json) | -| UNet + FCN | UNet-S5-D16 | Cross Entropy + Dice | 2336x3504 | 256x256 | 170x170 | 40000 | 2.623 | - | V100 | 89.64 | 80.87 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_fcn_4xb4-ce-1.0-dice-3.0-40k_hrf-256x256.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf/fcn_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf_20211210_201821-c314da8a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf/fcn_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf_20211210_201821.log.json) | -| UNet + PSPNet | UNet-S5-D16 | Cross Entropy | 2336x3504 | 256x256 | 170x170 | 40000 | 2.588 | - | V100 | 89.24 | 80.07 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_pspnet_4xb4-40k_hrf-256x256.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_256x256_40k_hrf/pspnet_unet_s5-d16_256x256_40k_hrf_20201227_181818-fdb7e29b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_256x256_40k_hrf/pspnet_unet_s5-d16_256x256_40k_hrf-20201227_181818.log.json) | -| UNet + PSPNet | UNet-S5-D16 | Cross Entropy + Dice | 2336x3504 | 256x256 | 170x170 | 40000 | 2.798 | - | V100 | 89.69 | 80.96 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_pspnet_4xb4-ce-1.0-dice-3.0-40k_hrf-256x256.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf/pspnet_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf_20211210_201823-53d492fa.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf/pspnet_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf_20211210_201823.log.json) | -| UNet + DeepLabV3 | UNet-S5-D16 | Cross Entropy | 2336x3504 | 256x256 | 170x170 | 40000 | 2.604 | - | V100 | 89.32 | 80.21 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_deeplabv3_4xb4-40k_hrf-256x256.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_256x256_40k_hrf/deeplabv3_unet_s5-d16_256x256_40k_hrf_20201226_094047-3a1fdf85.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_256x256_40k_hrf/deeplabv3_unet_s5-d16_256x256_40k_hrf-20201226_094047.log.json) | -| UNet + DeepLabV3 | UNet-S5-D16 | Cross Entropy + Dice | 2336x3504 | 256x256 | 170x170 | 40000 | 2.607 | - | V100 | 89.56 | 80.71 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/unet/unet-s5-d16_deeplabv3_4xb4-ce-1.0-dice-3.0-40k_hrf-256x256.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf_20211210_202032-59daf7a4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf_20211210_202032.log.json) | +| Method | Backbone | Loss | Image Size | Crop Size | Stride | Lr schd | Mem (GB) | Inf time (fps) | Device | mDice | Dice | config | download | +| ---------------- | ----------- | -------------------- | ---------- | --------- | ------: | ------- | -------- | -------------: | ------ | ----: | ----: | ------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| UNet + FCN | UNet-S5-D16 | Cross Entropy | 2336x3504 | 256x256 | 170x170 | 40000 | 2.525 | - | V100 | 88.92 | 79.45 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/unet/unet-s5-d16_fcn_4xb4-40k_hrf-256x256.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_256x256_40k_hrf/fcn_unet_s5-d16_256x256_40k_hrf_20201223_173724-d89cf1ed.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/unet_s5-d16_256x256_40k_hrf/unet_s5-d16_256x256_40k_hrf-20201223_173724.log.json) | +| UNet + FCN | UNet-S5-D16 | Cross Entropy + Dice | 2336x3504 | 256x256 | 170x170 | 40000 | 2.623 | - | V100 | 89.64 | 80.87 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/unet/unet-s5-d16_fcn_4xb4-ce-1.0-dice-3.0-40k_hrf-256x256.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf/fcn_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf_20211210_201821-c314da8a.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/fcn_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf/fcn_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf_20211210_201821.log.json) | +| UNet + PSPNet | UNet-S5-D16 | Cross Entropy | 2336x3504 | 256x256 | 170x170 | 40000 | 2.588 | - | V100 | 89.24 | 80.07 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/unet/unet-s5-d16_pspnet_4xb4-40k_hrf-256x256.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_256x256_40k_hrf/pspnet_unet_s5-d16_256x256_40k_hrf_20201227_181818-fdb7e29b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_256x256_40k_hrf/pspnet_unet_s5-d16_256x256_40k_hrf-20201227_181818.log.json) | +| UNet + PSPNet | UNet-S5-D16 | Cross Entropy + Dice | 2336x3504 | 256x256 | 170x170 | 40000 | 2.798 | - | V100 | 89.69 | 80.96 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/unet/unet-s5-d16_pspnet_4xb4-ce-1.0-dice-3.0-40k_hrf-256x256.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf/pspnet_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf_20211210_201823-53d492fa.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/pspnet_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf/pspnet_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf_20211210_201823.log.json) | +| UNet + DeepLabV3 | UNet-S5-D16 | Cross Entropy | 2336x3504 | 256x256 | 170x170 | 40000 | 2.604 | - | V100 | 89.32 | 80.21 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/unet/unet-s5-d16_deeplabv3_4xb4-40k_hrf-256x256.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_256x256_40k_hrf/deeplabv3_unet_s5-d16_256x256_40k_hrf_20201226_094047-3a1fdf85.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_256x256_40k_hrf/deeplabv3_unet_s5-d16_256x256_40k_hrf-20201226_094047.log.json) | +| UNet + DeepLabV3 | UNet-S5-D16 | Cross Entropy + Dice | 2336x3504 | 256x256 | 170x170 | 40000 | 2.607 | - | V100 | 89.56 | 80.71 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/unet/unet-s5-d16_deeplabv3_4xb4-ce-1.0-dice-3.0-40k_hrf-256x256.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf_20211210_202032-59daf7a4.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/unet/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf/deeplabv3_unet_s5-d16_ce-1.0-dice-3.0_256x256_40k_hrf_20211210_202032.log.json) | Note: diff --git a/configs/upernet/README.md b/configs/upernet/README.md index 7d128090bf..c2babbd2a7 100644 --- a/configs/upernet/README.md +++ b/configs/upernet/README.md @@ -26,34 +26,34 @@ Humans recognize the visual world at multiple levels: we effortlessly categorize ### Cityscapes -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| UPerNet | R-50 | 512x1024 | 40000 | 6.4 | 4.25 | V100 | 77.10 | 78.37 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r50_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x1024_40k_cityscapes/upernet_r50_512x1024_40k_cityscapes_20200605_094827-aa54cb54.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x1024_40k_cityscapes/upernet_r50_512x1024_40k_cityscapes_20200605_094827.log.json) | -| UPerNet | R-101 | 512x1024 | 40000 | 7.4 | 3.79 | V100 | 78.69 | 80.11 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r101_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x1024_40k_cityscapes/upernet_r101_512x1024_40k_cityscapes_20200605_094933-ebce3b10.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x1024_40k_cityscapes/upernet_r101_512x1024_40k_cityscapes_20200605_094933.log.json) | -| UPerNet | R-50 | 769x769 | 40000 | 7.2 | 1.76 | V100 | 77.98 | 79.70 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r50_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_769x769_40k_cityscapes/upernet_r50_769x769_40k_cityscapes_20200530_033048-92d21539.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_769x769_40k_cityscapes/upernet_r50_769x769_40k_cityscapes_20200530_033048.log.json) | -| UPerNet | R-101 | 769x769 | 40000 | 8.4 | 1.56 | V100 | 79.03 | 80.77 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r101_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_769x769_40k_cityscapes/upernet_r101_769x769_40k_cityscapes_20200530_040819-83c95d01.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_769x769_40k_cityscapes/upernet_r101_769x769_40k_cityscapes_20200530_040819.log.json) | -| UPerNet | R-50 | 512x1024 | 80000 | - | - | V100 | 78.19 | 79.19 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r50_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x1024_80k_cityscapes/upernet_r50_512x1024_80k_cityscapes_20200607_052207-848beca8.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x1024_80k_cityscapes/upernet_r50_512x1024_80k_cityscapes_20200607_052207.log.json) | -| UPerNet | R-101 | 512x1024 | 80000 | - | - | V100 | 79.40 | 80.46 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r101_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x1024_80k_cityscapes/upernet_r101_512x1024_80k_cityscapes_20200607_002403-f05f2345.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x1024_80k_cityscapes/upernet_r101_512x1024_80k_cityscapes_20200607_002403.log.json) | -| UPerNet | R-50 | 769x769 | 80000 | - | - | V100 | 79.39 | 80.92 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r50_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_769x769_80k_cityscapes/upernet_r50_769x769_80k_cityscapes_20200607_005107-82ae7d15.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_769x769_80k_cityscapes/upernet_r50_769x769_80k_cityscapes_20200607_005107.log.json) | -| UPerNet | R-101 | 769x769 | 80000 | - | - | V100 | 80.10 | 81.49 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r101_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_769x769_80k_cityscapes/upernet_r101_769x769_80k_cityscapes_20200607_001014-082fc334.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_769x769_80k_cityscapes/upernet_r101_769x769_80k_cityscapes_20200607_001014.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| UPerNet | R-50 | 512x1024 | 40000 | 6.4 | 4.25 | V100 | 77.10 | 78.37 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/upernet/upernet_r50_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x1024_40k_cityscapes/upernet_r50_512x1024_40k_cityscapes_20200605_094827-aa54cb54.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x1024_40k_cityscapes/upernet_r50_512x1024_40k_cityscapes_20200605_094827.log.json) | +| UPerNet | R-101 | 512x1024 | 40000 | 7.4 | 3.79 | V100 | 78.69 | 80.11 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/upernet/upernet_r101_4xb2-40k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x1024_40k_cityscapes/upernet_r101_512x1024_40k_cityscapes_20200605_094933-ebce3b10.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x1024_40k_cityscapes/upernet_r101_512x1024_40k_cityscapes_20200605_094933.log.json) | +| UPerNet | R-50 | 769x769 | 40000 | 7.2 | 1.76 | V100 | 77.98 | 79.70 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/upernet/upernet_r50_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_769x769_40k_cityscapes/upernet_r50_769x769_40k_cityscapes_20200530_033048-92d21539.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_769x769_40k_cityscapes/upernet_r50_769x769_40k_cityscapes_20200530_033048.log.json) | +| UPerNet | R-101 | 769x769 | 40000 | 8.4 | 1.56 | V100 | 79.03 | 80.77 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/upernet/upernet_r101_4xb2-40k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_769x769_40k_cityscapes/upernet_r101_769x769_40k_cityscapes_20200530_040819-83c95d01.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_769x769_40k_cityscapes/upernet_r101_769x769_40k_cityscapes_20200530_040819.log.json) | +| UPerNet | R-50 | 512x1024 | 80000 | - | - | V100 | 78.19 | 79.19 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/upernet/upernet_r50_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x1024_80k_cityscapes/upernet_r50_512x1024_80k_cityscapes_20200607_052207-848beca8.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x1024_80k_cityscapes/upernet_r50_512x1024_80k_cityscapes_20200607_052207.log.json) | +| UPerNet | R-101 | 512x1024 | 80000 | - | - | V100 | 79.40 | 80.46 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/upernet/upernet_r101_4xb2-80k_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x1024_80k_cityscapes/upernet_r101_512x1024_80k_cityscapes_20200607_002403-f05f2345.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x1024_80k_cityscapes/upernet_r101_512x1024_80k_cityscapes_20200607_002403.log.json) | +| UPerNet | R-50 | 769x769 | 80000 | - | - | V100 | 79.39 | 80.92 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/upernet/upernet_r50_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_769x769_80k_cityscapes/upernet_r50_769x769_80k_cityscapes_20200607_005107-82ae7d15.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_769x769_80k_cityscapes/upernet_r50_769x769_80k_cityscapes_20200607_005107.log.json) | +| UPerNet | R-101 | 769x769 | 80000 | - | - | V100 | 80.10 | 81.49 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/upernet/upernet_r101_4xb2-80k_cityscapes-769x769.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_769x769_80k_cityscapes/upernet_r101_769x769_80k_cityscapes_20200607_001014-082fc334.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_769x769_80k_cityscapes/upernet_r101_769x769_80k_cityscapes_20200607_001014.log.json) | ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| UPerNet | R-50 | 512x512 | 80000 | 8.1 | 23.40 | V100 | 40.70 | 41.81 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r50_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_80k_ade20k/upernet_r50_512x512_80k_ade20k_20200614_144127-ecc8377b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_80k_ade20k/upernet_r50_512x512_80k_ade20k_20200614_144127.log.json) | -| UPerNet | R-101 | 512x512 | 80000 | 9.1 | 20.34 | V100 | 42.91 | 43.96 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r101_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_80k_ade20k/upernet_r101_512x512_80k_ade20k_20200614_185117-32e4db94.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_80k_ade20k/upernet_r101_512x512_80k_ade20k_20200614_185117.log.json) | -| UPerNet | R-50 | 512x512 | 160000 | - | - | V100 | 42.05 | 42.78 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r50_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_160k_ade20k/upernet_r50_512x512_160k_ade20k_20200615_184328-8534de8d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_160k_ade20k/upernet_r50_512x512_160k_ade20k_20200615_184328.log.json) | -| UPerNet | R-101 | 512x512 | 160000 | - | - | V100 | 43.82 | 44.85 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r101_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_160k_ade20k/upernet_r101_512x512_160k_ade20k_20200615_161951-91b32684.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_160k_ade20k/upernet_r101_512x512_160k_ade20k_20200615_161951.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| UPerNet | R-50 | 512x512 | 80000 | 8.1 | 23.40 | V100 | 40.70 | 41.81 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/upernet/upernet_r50_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_80k_ade20k/upernet_r50_512x512_80k_ade20k_20200614_144127-ecc8377b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_80k_ade20k/upernet_r50_512x512_80k_ade20k_20200614_144127.log.json) | +| UPerNet | R-101 | 512x512 | 80000 | 9.1 | 20.34 | V100 | 42.91 | 43.96 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/upernet/upernet_r101_4xb4-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_80k_ade20k/upernet_r101_512x512_80k_ade20k_20200614_185117-32e4db94.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_80k_ade20k/upernet_r101_512x512_80k_ade20k_20200614_185117.log.json) | +| UPerNet | R-50 | 512x512 | 160000 | - | - | V100 | 42.05 | 42.78 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/upernet/upernet_r50_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_160k_ade20k/upernet_r50_512x512_160k_ade20k_20200615_184328-8534de8d.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_160k_ade20k/upernet_r50_512x512_160k_ade20k_20200615_184328.log.json) | +| UPerNet | R-101 | 512x512 | 160000 | - | - | V100 | 43.82 | 44.85 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/upernet/upernet_r101_4xb4-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_160k_ade20k/upernet_r101_512x512_160k_ade20k_20200615_161951-91b32684.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_160k_ade20k/upernet_r101_512x512_160k_ade20k_20200615_161951.log.json) | ### Pascal VOC 2012 + Aug -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ----------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| UPerNet | R-50 | 512x512 | 20000 | 6.4 | 23.17 | V100 | 74.82 | 76.35 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r50_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_20k_voc12aug/upernet_r50_512x512_20k_voc12aug_20200617_165330-5b5890a7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_20k_voc12aug/upernet_r50_512x512_20k_voc12aug_20200617_165330.log.json) | -| UPerNet | R-101 | 512x512 | 20000 | 7.5 | 19.98 | V100 | 77.10 | 78.29 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r101_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_20k_voc12aug/upernet_r101_512x512_20k_voc12aug_20200617_165629-f14e7f27.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_20k_voc12aug/upernet_r101_512x512_20k_voc12aug_20200617_165629.log.json) | -| UPerNet | R-50 | 512x512 | 40000 | - | - | V100 | 75.92 | 77.44 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r50_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_40k_voc12aug/upernet_r50_512x512_40k_voc12aug_20200613_162257-ca9bcc6b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_40k_voc12aug/upernet_r50_512x512_40k_voc12aug_20200613_162257.log.json) | -| UPerNet | R-101 | 512x512 | 40000 | - | - | V100 | 77.43 | 78.56 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/upernet/upernet_r101_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_40k_voc12aug/upernet_r101_512x512_40k_voc12aug_20200613_163549-e26476ac.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_40k_voc12aug/upernet_r101_512x512_40k_voc12aug_20200613_163549.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------- | -------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| UPerNet | R-50 | 512x512 | 20000 | 6.4 | 23.17 | V100 | 74.82 | 76.35 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/upernet/upernet_r50_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_20k_voc12aug/upernet_r50_512x512_20k_voc12aug_20200617_165330-5b5890a7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_20k_voc12aug/upernet_r50_512x512_20k_voc12aug_20200617_165330.log.json) | +| UPerNet | R-101 | 512x512 | 20000 | 7.5 | 19.98 | V100 | 77.10 | 78.29 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/upernet/upernet_r101_4xb4-20k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_20k_voc12aug/upernet_r101_512x512_20k_voc12aug_20200617_165629-f14e7f27.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_20k_voc12aug/upernet_r101_512x512_20k_voc12aug_20200617_165629.log.json) | +| UPerNet | R-50 | 512x512 | 40000 | - | - | V100 | 75.92 | 77.44 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/upernet/upernet_r50_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_40k_voc12aug/upernet_r50_512x512_40k_voc12aug_20200613_162257-ca9bcc6b.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_40k_voc12aug/upernet_r50_512x512_40k_voc12aug_20200613_162257.log.json) | +| UPerNet | R-101 | 512x512 | 40000 | - | - | V100 | 77.43 | 78.56 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/upernet/upernet_r101_4xb4-40k_voc12aug-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_40k_voc12aug/upernet_r101_512x512_40k_voc12aug_20200613_163549-e26476ac.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_40k_voc12aug/upernet_r101_512x512_40k_voc12aug_20200613_163549.log.json) | ## Citation diff --git a/configs/vit/README.md b/configs/vit/README.md index 26601d498f..f75326e8e4 100644 --- a/configs/vit/README.md +++ b/configs/vit/README.md @@ -44,19 +44,19 @@ This script convert model from `PRETRAIN_PATH` and store the converted model in ### ADE20K -| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | -| ------- | ----------------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | --------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| UPerNet | ViT-B + MLN | 512x512 | 80000 | 9.20 | 6.94 | V100 | 47.71 | 49.51 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/vit/vit_vit-b16_mln_upernet_8xb2-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_vit-b16_mln_512x512_80k_ade20k/upernet_vit-b16_mln_512x512_80k_ade20k_20210624_130547-0403cee1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_vit-b16_mln_512x512_80k_ade20k/20210624_130547.log.json) | -| UPerNet | ViT-B + MLN | 512x512 | 160000 | 9.20 | 7.58 | V100 | 46.75 | 48.46 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/vit/vit_vit-b16_mln_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_vit-b16_mln_512x512_160k_ade20k/upernet_vit-b16_mln_512x512_160k_ade20k_20210624_130547-852fa768.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_vit-b16_mln_512x512_160k_ade20k/20210623_192432.log.json) | -| UPerNet | ViT-B + LN + MLN | 512x512 | 160000 | 9.21 | 6.82 | V100 | 47.73 | 49.95 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/vit/vit_vit-b16-ln_mln_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_vit-b16_ln_mln_512x512_160k_ade20k/upernet_vit-b16_ln_mln_512x512_160k_ade20k_20210621_172828-f444c077.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_vit-b16_ln_mln_512x512_160k_ade20k/20210621_172828.log.json) | -| UPerNet | DeiT-S | 512x512 | 80000 | 4.68 | 29.85 | V100 | 42.96 | 43.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/vit/vit_deit-s16_upernet_8xb2-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_512x512_80k_ade20k/upernet_deit-s16_512x512_80k_ade20k_20210624_095228-afc93ec2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_512x512_80k_ade20k/20210624_095228.log.json) | -| UPerNet | DeiT-S | 512x512 | 160000 | 4.68 | 29.19 | V100 | 42.87 | 43.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/vit/vit_deit-s16_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_512x512_160k_ade20k/upernet_deit-s16_512x512_160k_ade20k_20210621_160903-5110d916.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_512x512_160k_ade20k/20210621_160903.log.json) | -| UPerNet | DeiT-S + MLN | 512x512 | 160000 | 5.69 | 11.18 | V100 | 43.82 | 45.07 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/vit/vit_deit-s16_mln_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_mln_512x512_160k_ade20k/upernet_deit-s16_mln_512x512_160k_ade20k_20210621_161021-fb9a5dfb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_mln_512x512_160k_ade20k/20210621_161021.log.json) | -| UPerNet | DeiT-S + LN + MLN | 512x512 | 160000 | 5.69 | 12.39 | V100 | 43.52 | 45.01 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/vit/vit_deit-s16-ln_mln_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_ln_mln_512x512_160k_ade20k/upernet_deit-s16_ln_mln_512x512_160k_ade20k_20210621_161021-c0cd652f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_ln_mln_512x512_160k_ade20k/20210621_161021.log.json) | -| UPerNet | DeiT-B | 512x512 | 80000 | 7.75 | 9.69 | V100 | 45.24 | 46.73 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/vit/vit_deit-b16_upernet_8xb2-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_512x512_80k_ade20k/upernet_deit-b16_512x512_80k_ade20k_20210624_130529-1e090789.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_512x512_80k_ade20k/20210624_130529.log.json) | -| UPerNet | DeiT-B | 512x512 | 160000 | 7.75 | 10.39 | V100 | 45.36 | 47.16 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/vit/vit_deit-b16_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_512x512_160k_ade20k/upernet_deit-b16_512x512_160k_ade20k_20210621_180100-828705d7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_512x512_160k_ade20k/20210621_180100.log.json) | -| UPerNet | DeiT-B + MLN | 512x512 | 160000 | 9.21 | 7.78 | V100 | 45.46 | 47.16 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/vit/vit_deit-b16_mln_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_mln_512x512_160k_ade20k/upernet_deit-b16_mln_512x512_160k_ade20k_20210621_191949-4e1450f3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_mln_512x512_160k_ade20k/20210621_191949.log.json) | -| UPerNet | DeiT-B + LN + MLN | 512x512 | 160000 | 9.21 | 7.75 | V100 | 45.37 | 47.23 | [config](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/vit/vit_deit-b16-ln_mln_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_ln_mln_512x512_160k_ade20k/upernet_deit-b16_ln_mln_512x512_160k_ade20k_20210623_153535-8a959c14.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_ln_mln_512x512_160k_ade20k/20210623_153535.log.json) | +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | Device | mIoU | mIoU(ms+flip) | config | download | +| ------- | ----------------- | --------- | ------: | -------- | -------------- | ------ | ----: | ------------: | ------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| UPerNet | ViT-B + MLN | 512x512 | 80000 | 9.20 | 6.94 | V100 | 47.71 | 49.51 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/vit/vit_vit-b16_mln_upernet_8xb2-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_vit-b16_mln_512x512_80k_ade20k/upernet_vit-b16_mln_512x512_80k_ade20k_20210624_130547-0403cee1.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_vit-b16_mln_512x512_80k_ade20k/20210624_130547.log.json) | +| UPerNet | ViT-B + MLN | 512x512 | 160000 | 9.20 | 7.58 | V100 | 46.75 | 48.46 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/vit/vit_vit-b16_mln_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_vit-b16_mln_512x512_160k_ade20k/upernet_vit-b16_mln_512x512_160k_ade20k_20210624_130547-852fa768.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_vit-b16_mln_512x512_160k_ade20k/20210623_192432.log.json) | +| UPerNet | ViT-B + LN + MLN | 512x512 | 160000 | 9.21 | 6.82 | V100 | 47.73 | 49.95 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/vit/vit_vit-b16-ln_mln_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_vit-b16_ln_mln_512x512_160k_ade20k/upernet_vit-b16_ln_mln_512x512_160k_ade20k_20210621_172828-f444c077.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_vit-b16_ln_mln_512x512_160k_ade20k/20210621_172828.log.json) | +| UPerNet | DeiT-S | 512x512 | 80000 | 4.68 | 29.85 | V100 | 42.96 | 43.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/vit/vit_deit-s16_upernet_8xb2-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_512x512_80k_ade20k/upernet_deit-s16_512x512_80k_ade20k_20210624_095228-afc93ec2.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_512x512_80k_ade20k/20210624_095228.log.json) | +| UPerNet | DeiT-S | 512x512 | 160000 | 4.68 | 29.19 | V100 | 42.87 | 43.79 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/vit/vit_deit-s16_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_512x512_160k_ade20k/upernet_deit-s16_512x512_160k_ade20k_20210621_160903-5110d916.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_512x512_160k_ade20k/20210621_160903.log.json) | +| UPerNet | DeiT-S + MLN | 512x512 | 160000 | 5.69 | 11.18 | V100 | 43.82 | 45.07 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/vit/vit_deit-s16_mln_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_mln_512x512_160k_ade20k/upernet_deit-s16_mln_512x512_160k_ade20k_20210621_161021-fb9a5dfb.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_mln_512x512_160k_ade20k/20210621_161021.log.json) | +| UPerNet | DeiT-S + LN + MLN | 512x512 | 160000 | 5.69 | 12.39 | V100 | 43.52 | 45.01 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/vit/vit_deit-s16-ln_mln_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_ln_mln_512x512_160k_ade20k/upernet_deit-s16_ln_mln_512x512_160k_ade20k_20210621_161021-c0cd652f.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-s16_ln_mln_512x512_160k_ade20k/20210621_161021.log.json) | +| UPerNet | DeiT-B | 512x512 | 80000 | 7.75 | 9.69 | V100 | 45.24 | 46.73 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/vit/vit_deit-b16_upernet_8xb2-80k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_512x512_80k_ade20k/upernet_deit-b16_512x512_80k_ade20k_20210624_130529-1e090789.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_512x512_80k_ade20k/20210624_130529.log.json) | +| UPerNet | DeiT-B | 512x512 | 160000 | 7.75 | 10.39 | V100 | 45.36 | 47.16 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/vit/vit_deit-b16_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_512x512_160k_ade20k/upernet_deit-b16_512x512_160k_ade20k_20210621_180100-828705d7.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_512x512_160k_ade20k/20210621_180100.log.json) | +| UPerNet | DeiT-B + MLN | 512x512 | 160000 | 9.21 | 7.78 | V100 | 45.46 | 47.16 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/vit/vit_deit-b16_mln_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_mln_512x512_160k_ade20k/upernet_deit-b16_mln_512x512_160k_ade20k_20210621_191949-4e1450f3.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_mln_512x512_160k_ade20k/20210621_191949.log.json) | +| UPerNet | DeiT-B + LN + MLN | 512x512 | 160000 | 9.21 | 7.75 | V100 | 45.37 | 47.23 | [config](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/vit/vit_deit-b16-ln_mln_upernet_8xb2-160k_ade20k-512x512.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_ln_mln_512x512_160k_ade20k/upernet_deit-b16_ln_mln_512x512_160k_ade20k_20210623_153535-8a959c14.pth) \| [log](https://download.openmmlab.com/mmsegmentation/v0.5/vit/upernet_deit-b16_ln_mln_512x512_160k_ade20k/20210623_153535.log.json) | ## Citation diff --git a/demo/MMSegmentation_Tutorial.ipynb b/demo/MMSegmentation_Tutorial.ipynb index 1d92342ae6..ac8601b321 100644 --- a/demo/MMSegmentation_Tutorial.ipynb +++ b/demo/MMSegmentation_Tutorial.ipynb @@ -7,7 +7,7 @@ "id": "view-in-github" }, "source": [ - "\"Open" + "\"Open" ] }, { @@ -89,7 +89,7 @@ "outputs": [], "source": [ "!rm -rf mmsegmentation\n", - "!git clone -b dev-1.x https://github.com/open-mmlab/mmsegmentation.git \n", + "!git clone -b main https://github.com/open-mmlab/mmsegmentation.git \n", "%cd mmsegmentation\n", "!pip install -e ." ] diff --git a/docker/Dockerfile b/docker/Dockerfile index 73a0fac121..982b09bdc6 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -28,7 +28,7 @@ RUN ["/bin/bash", "-c", "mim install mmengine"] RUN ["/bin/bash", "-c", "mim install mmcv==${MMCV}"] # Install MMSegmentation -RUN git clone -b dev-1.x https://github.com/open-mmlab/mmsegmentation.git /mmsegmentation +RUN git clone -b main https://github.com/open-mmlab/mmsegmentation.git /mmsegmentation WORKDIR /mmsegmentation ENV FORCE_CUDA="1" RUN pip install -r requirements.txt diff --git a/docs/en/advanced_guides/add_models.md b/docs/en/advanced_guides/add_models.md index e470e48ef2..ed5c9ce611 100644 --- a/docs/en/advanced_guides/add_models.md +++ b/docs/en/advanced_guides/add_models.md @@ -49,7 +49,7 @@ Here we show how to develop a new backbone with an example of MobileNet. ### Add new heads -In MMSegmentation, we provide a [BaseDecodeHead](https://github.com/open-mmlab/mmsegmentation/blob/1.x/mmseg/models/decode_heads/decode_head.py#L17) for developing all segmentation heads. +In MMSegmentation, we provide a [BaseDecodeHead](https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/models/decode_heads/decode_head.py#L17) for developing all segmentation heads. All newly implemented decode heads should be derived from it. Here we show how to develop a new head with the example of [PSPNet](https://arxiv.org/abs/1612.01105) as the following. @@ -166,7 +166,7 @@ loss_decode=dict(type='MyLoss', loss_weight=1.0)) ### Add new data preprocessor -In MMSegmentation 1.x versions, we use [SegDataPreProcessor](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/models/data_preprocessor.py#L13) to copy data to the target device and preprocess the data into the model input format as default. Here we show how to develop a new data preprocessor. +In MMSegmentation 1.x versions, we use [SegDataPreProcessor](https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/models/data_preprocessor.py#L13) to copy data to the target device and preprocess the data into the model input format as default. Here we show how to develop a new data preprocessor. 1. Create a new file `mmseg/models/my_datapreprocessor.py`. @@ -204,7 +204,7 @@ In MMSegmentation 1.x versions, we use [SegDataPreProcessor](https://github.com/ The segmentor is an algorithmic architecture in which users can customize their algorithms by adding customized components and defining the logic of algorithm execution. Please refer to [the model document](./models.md) for more details. -Since the [BaseSegmentor](https://github.com/open-mmlab/mmsegmentation/blob/1.x/mmseg/models/segmentors/base.py#L15) in MMSegmentation unifies three modes for a forward process, to develop a new segmentor, users need to overwrite `loss`, `predict` and `_forward` methods corresponding to the `loss`, `predict` and `tensor` modes. +Since the [BaseSegmentor](https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/models/segmentors/base.py#L15) in MMSegmentation unifies three modes for a forward process, to develop a new segmentor, users need to overwrite `loss`, `predict` and `_forward` methods corresponding to the `loss`, `predict` and `tensor` modes. Here we show how to develop a new segmentor. diff --git a/docs/en/advanced_guides/data_flow.md b/docs/en/advanced_guides/data_flow.md index 20d23084ab..404035aee4 100644 --- a/docs/en/advanced_guides/data_flow.md +++ b/docs/en/advanced_guides/data_flow.md @@ -16,7 +16,7 @@ val_cfg = dict(type='ValLoop') test_cfg = dict(type='TestLoop') ``` -In the above diagram, the red line indicates the [train_step](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/en/advanced_guides/models.md#train_step). At each training iteration, dataloader loads images from storage and transfer to data preprocessor, data preprocessor would put images to the specific device and stack data to batch, then model accepts the batch data as inputs, finally the outputs of the model would be sent to optimizer. The blue line indicates [val_step](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/en/advanced_guides/models.md#val_step) and [test_step](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/en/advanced_guides/models.md#test_step). The dataflow of these two process is similar to the `train_step` except the outputs of model, since model parameters are freezed when doing evaluation, the model output would be transferred to [Evaluator](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/en/advanced_guides/evaluation.md#ioumetric) to compute metrics. +In the above diagram, the red line indicates the [train_step](./models.md#train_step). At each training iteration, dataloader loads images from storage and transfer to data preprocessor, data preprocessor would put images to the specific device and stack data to batch, then model accepts the batch data as inputs, finally the outputs of the model would be sent to optimizer. The blue line indicates [val_step](./models.md#val_step) and [test_step](./models.md#test_step). The dataflow of these two process is similar to the `train_step` except the outputs of model, since model parameters are freezed when doing evaluation, the model output would be transferred to [Evaluator](./evaluation.md#ioumetric) to compute metrics. ## Dataflow convention in MMSegmentation @@ -26,7 +26,7 @@ From the diagram above, we could see the basic dataflow. In this section, we wou DataLoader is an essential component in training and testing pipelines of MMEngine. Conceptually, it is derived from and consistent with [PyTorch](https://pytorch.org/). DataLoader loads data from filesystem and the original data passes through data preparation pipeline, then it would be sent to Data Preprocessor. -MMSegmentation defines the default data format at [PackSegInputs](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/datasets/transforms/formatting.py#L12), it's the last component of `train_pipeline` and `test_pipeline`. Please refer to [data transform documentation](https://mmsegmentation.readthedocs.io/en/dev-1.x/advanced_guides/transforms.html) for more information about data transform `pipeline`. +MMSegmentation defines the default data format at [PackSegInputs](https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/datasets/transforms/formatting.py#L12), it's the last component of `train_pipeline` and `test_pipeline`. Please refer to [data transform documentation](./transforms.md) for more information about data transform `pipeline`. Without any modifications, the return value of PackSegInputs is usually a `dict` and has only two keys, `inputs` and `data_samples`. The following pseudo-code shows the data types of the data loader output in mmseg, which is a batch of fetched data samples from the dataset, and data loader packs them into a dictionary of the list. `inputs` is the list of input tensors to the model and `data_samples` contains a list of input images' meta information and corresponding ground truth. @@ -37,11 +37,11 @@ dict( ) ``` -**Note:** [SegDataSample](https://github.com/open-mmlab/mmsegmentation/blob/1.x/mmseg/structures/seg_data_sample.py) is a data structure interface of MMSegmentation, it is used as an interface between different components. `SegDataSample` implements the abstract data element `mmengine.structures.BaseDataElement`, please refer to [the SegDataSample documentation](https://mmsegmentation.readthedocs.io/en/1.x/advanced_guides/structures.html) and [data element documentation](https://mmengine.readthedocs.io/en/latest/advanced_tutorials/data_element.html) in [MMEngine](https://github.com/open-mmlab/mmengine) for more information. +**Note:** [SegDataSample](https://github.com/open-mmlab/mmsegmentation/blob/1.x/mmseg/structures/seg_data_sample.py) is a data structure interface of MMSegmentation, it is used as an interface between different components. `SegDataSample` implements the abstract data element `mmengine.structures.BaseDataElement`, please refer to [the SegDataSample documentation](./structures.md) and [data element documentation](https://mmengine.readthedocs.io/en/latest/advanced_tutorials/data_element.html) in [MMEngine](https://github.com/open-mmlab/mmengine) for more information. ### Data Preprocessor to Model -Though drawn separately in the diagram [above](#overview-of-dataflow), data_preprocessor is a part of the model and thus can be found in [Model tutorial](https://mmsegmentation.readthedocs.io/en/dev-1.x/advanced_guides/models.html) at data preprocessor chapter. +Though drawn separately in the diagram [above](#overview-of-dataflow), data_preprocessor is a part of the model and thus can be found in [Model tutorial](./models.md) at data preprocessor chapter. The return value of data preprocessor is a dictionary, containing `inputs` and `data_samples`, `inputs` is batched images, a 4D tensor, and some additional meta info used in data preprocesses would be added to the `data_samples`. When transferred to the network, the dictionary would be unpacked to two values. The following pseudo-codes show the return value of the data preprocessor and the input values of model. @@ -59,21 +59,21 @@ class Network(BaseSegmentor): pass ``` -**Note:** Model forward has 3 kinds of mode, which is controlled by input argumentmode, please refer [model tutorial](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/en/advanced_guides/models.md) for more details. +**Note:** Model forward has 3 kinds of mode, which is controlled by input argumentmode, please refer [model tutorial](./models.md) for more details. ### Model output -As [model tutorial](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/en/advanced_guides/models.md#forward) mentioned 3 kinds of mode forward with 3 kinds of output. `train_step`and `test_step`(or `val_step`) correspond to `'loss'` and `'predict'` respectively. +As [model tutorial](./models.md#forward) mentioned 3 kinds of mode forward with 3 kinds of output. `train_step`and `test_step`(or `val_step`) correspond to `'loss'` and `'predict'` respectively. -In `test_step` or `val_step`, the inference results would be transferred to `Evaluator`. You might read the [evaluation document](https://mmsegmentation.readthedocs.io/en/dev-1.x/advanced_guides/evaluation.html) for more information about `Evaluator`. +In `test_step` or `val_step`, the inference results would be transferred to `Evaluator`. You might read the [evaluation document](./evaluation.md) for more information about `Evaluator`. -After inference, the [BaseSegmentor](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/models/segmentors/base.py#L15) in MMSegmentation would do a simple post process to pack inference results, the segmentation logits produced by the neural network, segmentation mask after the `argmax` operation and ground truth(if exists) would be packed into a similar `SegDataSample` instance. The return value of [postprocess_result](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/models/segmentors/base.py#L132) is a **`List` of `SegDataSample`**. Following diagram shows the key properties of these `SegDataSample` instances. +After inference, the [BaseSegmentor](https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/models/segmentors/base.py#L15) in MMSegmentation would do a simple post process to pack inference results, the segmentation logits produced by the neural network, segmentation mask after the `argmax` operation and ground truth(if exists) would be packed into a similar `SegDataSample` instance. The return value of [postprocess_result](https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/models/segmentors/base.py#L132) is a **`List` of `SegDataSample`**. Following diagram shows the key properties of these `SegDataSample` instances. ![SegDataSample](https://user-images.githubusercontent.com/15952744/209912225-ab46a8d9-904a-43cb-8bf1-8bec4938ed29.png) -The same as Data Preprocessor, loss function is also a part of the model, it's a property of [decode head](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/models/decode_heads/decode_head.py#L142). +The same as Data Preprocessor, loss function is also a part of the model, it's a property of [decode head](https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/models/decode_heads/decode_head.py#L142). -In MMSegmentation, the method [loss_by_feat](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/models/decode_heads/decode_head.py#L291) of `decode_head` is an unified interface used to compute loss. +In MMSegmentation, the method [loss_by_feat](https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/models/decode_heads/decode_head.py#L291) of `decode_head` is an unified interface used to compute loss. Parameters: @@ -84,4 +84,4 @@ Returns: - dict\[str, Tensor\]: a dictionary of loss components -**Note:** The `train_step` transfers the loss into OptimWrapper to update the weights in model, please refer [train_step](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/en/advanced_guides/models.md#train_step) for more details. +**Note:** The `train_step` transfers the loss into OptimWrapper to update the weights in model, please refer [train_step](./models.md#train_step) for more details. diff --git a/docs/en/advanced_guides/datasets.md b/docs/en/advanced_guides/datasets.md index a1b8044b3d..c655a3ff55 100644 --- a/docs/en/advanced_guides/datasets.md +++ b/docs/en/advanced_guides/datasets.md @@ -1,14 +1,14 @@ # Dataset -Dataset classes in MMSegmentation have two functions: (1) load data information after [data preparation](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/en/user_guides/2_dataset_prepare.md) -and (2) send data into [dataset transform pipeline](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/datasets/basesegdataset.py#L141) to do [data augmentation](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/zh_cn/advanced_guides/transforms.md). +Dataset classes in MMSegmentation have two functions: (1) load data information after [data preparation](../user_guides/2_dataset_prepare.md) +and (2) send data into [dataset transform pipeline](https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/datasets/basesegdataset.py#L141) to do [data augmentation](./transforms.md). There are 2 kinds of loaded information: (1) meta information which is original dataset information such as categories (classes) of dataset and their corresponding palette information, (2) data information which includes the path of dataset images and labels. The tutorial includes some main interfaces in MMSegmentation 1.x dataset class: methods of loading data information and modifying dataset classes in base dataset class, and the relationship between dataset and the data transform pipeline. ## Main Interfaces -Take Cityscapes as an example, if you want to run the example, please download and [preprocess](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/en/user_guides/2_dataset_prepare.md#cityscapes) +Take Cityscapes as an example, if you want to run the example, please download and [preprocess](../user_guides/2_dataset_prepare.md#cityscapes) Cityscapes dataset in `data` directory, before running the demo code: Instantiate Cityscapes training dataset: @@ -108,7 +108,7 @@ print(dataset.metainfo) ``` The return value of dataset `__getitem__` method is the output of data samples after data augmentation, whose type is also `dict`. It has two fields: `'inputs'` corresponding to images after data augmentation, -and `'data_samples'` corresponding to `SegDataSample`\](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/zh_cn/advanced_guides/structures.md) which is new data structures in MMSegmentation 1.x, +and `'data_samples'` corresponding to [`SegDataSample`](./structures.md) which is new data structures in MMSegmentation 1.x, and `gt_sem_seg` of `SegDataSample` has labels after data augmentation operations. ```python @@ -179,19 +179,19 @@ print(dataset[0]) ## BaseSegDataset -As mentioned above, dataset classes have the same functions, we implemented [`BaseSegDataset`](https://mmsegmentation.readthedocs.io/en/dev-1.x/api.html?highlight=BaseSegDataset#mmseg.datasets.BaseSegDataset) to reues the common functions. +As mentioned above, dataset classes have the same functions, we implemented [`BaseSegDataset`](https://mmsegmentation.readthedocs.io/en/main/api.html?highlight=BaseSegDataset#mmseg.datasets.BaseSegDataset) to reues the common functions. It inherits [`BaseDataset` of MMEngine](https://github.com/open-mmlab/mmengine/blob/main/docs/en/advanced_tutorials/basedataset.md) and follows unified initialization process of OpenMMLab. It supports the highly effective interior storing format, some functions like dataset concatenation and repeatedly sampling. In MMSegmentation `BaseSegDataset`, the **method of loading data information** (`load_data_list`) is redefined and adds new `get_label_map` method to **modify dataset classes information**. ### Loading Dataset Information The loaded data information includes the path of images samples and annotations samples, the detailed implementation could be found in -[`load_data_list`](https://github.com/open-mmlab/mmsegmentation/blob/163277bfe0fa8fefb63ee5137917fafada1b301c/mmseg/datasets/basesegdataset.py#L231) of `BaseSegDataset` in MMSegmentation. +[`load_data_list`](https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/datasets/basesegdataset.py#L231) of `BaseSegDataset` in MMSegmentation. There are two main methods to acquire the path of images and labels: 1. Load file paths according to the dirictory and suffix of input images and annotations -If the dataset directory structure is organized as below, the [`load_data_list`](https://github.com/open-mmlab/mmsegmentation/blob/163277bfe0fa8fefb63ee5137917fafada1b301c/mmseg/datasets/basesegdataset.py#L231) can parse dataset directory Structure: +If the dataset directory structure is organized as below, the [`load_data_list`](https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/datasets/basesegdataset.py#L231) can parse dataset directory Structure: ``` ├── data @@ -344,7 +344,7 @@ print(dataset.metainfo) ``` Meta information is different from default setting of Cityscapes dataset. Moreover, `label_map` field is also defined, which is used for modifying label index of each pixel on segmentation mask. -The segmentation label would re-map class information by `label_map`, [here](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/datasets/basesegdataset.py#L151) is detailed implementation: +The segmentation label would re-map class information by `label_map`, [here](https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/datasets/basesegdataset.py#L151) is detailed implementation: ```python gt_semantic_seg_copy = gt_semantic_seg.copy() diff --git a/docs/en/advanced_guides/engine.md b/docs/en/advanced_guides/engine.md index 0ed08fa4b5..7acfe5ad64 100644 --- a/docs/en/advanced_guides/engine.md +++ b/docs/en/advanced_guides/engine.md @@ -70,14 +70,14 @@ It is not recommended for users to modify the default hook priorities. Please re The following are the default hooks used in MMSegmentation: -| Hook | Function | Priority | -| :-----------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------: | :---------------: | -| [IterTimerHook](https://github.com/open-mmlab/mmengine/blob/main/mmengine/hooks/iter_timer_hook.py) | Record the time spent on each iteration. | NORMAL (50) | -| [LoggerHook](https://github.com/open-mmlab/mmengine/blob/main/mmengine/hooks/logger_hook.py) | Collect log records from different components in `Runner` and output them to terminal, JSON file, tensorboard, wandb, etc. | BELOW_NORMAL (60) | -| [ParamSchedulerHook](https://github.com/open-mmlab/mmengine/blob/main/mmengine/hooks/param_scheduler_hook.py) | Update some hyperparameters in the optimizer, such as learning rate momentum. | LOW (70) | -| [CheckpointHook](https://github.com/open-mmlab/mmengine/blob/main/mmengine/hooks/checkpoint_hook.py) | Regularly save checkpoint files. | VERY_LOW (90) | -| [DistSamplerSeedHook](https://github.com/open-mmlab/mmengine/blob/main/mmengine/hooks/sampler_seed_hook.py) | Ensure the distributed sampler shuffle is enabled. | NORMAL (50) | -| [SegVisualizationHook](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/visualization/local_visualizer.py) | Visualize prediction results during validation and testing. | NORMAL (50) | +| Hook | Function | Priority | +| :--------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------: | :---------------: | +| [IterTimerHook](https://github.com/open-mmlab/mmengine/blob/main/mmengine/hooks/iter_timer_hook.py) | Record the time spent on each iteration. | NORMAL (50) | +| [LoggerHook](https://github.com/open-mmlab/mmengine/blob/main/mmengine/hooks/logger_hook.py) | Collect log records from different components in `Runner` and output them to terminal, JSON file, tensorboard, wandb, etc. | BELOW_NORMAL (60) | +| [ParamSchedulerHook](https://github.com/open-mmlab/mmengine/blob/main/mmengine/hooks/param_scheduler_hook.py) | Update some hyperparameters in the optimizer, such as learning rate momentum. | LOW (70) | +| [CheckpointHook](https://github.com/open-mmlab/mmengine/blob/main/mmengine/hooks/checkpoint_hook.py) | Regularly save checkpoint files. | VERY_LOW (90) | +| [DistSamplerSeedHook](https://github.com/open-mmlab/mmengine/blob/main/mmengine/hooks/sampler_seed_hook.py) | Ensure the distributed sampler shuffle is enabled. | NORMAL (50) | +| [SegVisualizationHook](https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/visualization/local_visualizer.py) | Visualize prediction results during validation and testing. | NORMAL (50) | MMSegmentation registers some hooks with essential training functions in `default_hooks`: @@ -149,7 +149,7 @@ custom_hooks = [ ### SegVisualizationHook -MMSegmentation implemented [`SegVisualizationHook`](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/engine/hooks/visualization_hook.py#L17), which is used to visualize prediction results during validation and testing. +MMSegmentation implemented [`SegVisualizationHook`](https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/engine/hooks/visualization_hook.py#L17), which is used to visualize prediction results during validation and testing. `SegVisualizationHook` overrides the `_after_iter` method in the base class `Hook`. During validation or testing, it calls the `add_datasample` method of `visualizer` to draw semantic segmentation results according to the specified iteration interval. The specific implementation is as follows: ```python @@ -185,7 +185,7 @@ class SegVisualizationHook(Hook): ``` -For more details about visualization, you can check [here](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/en/user_guides/visualization.md). +For more details about visualization, you can check [here](../user_guides/visualization.md). ## Optimizer @@ -237,7 +237,7 @@ The default setting for `loss_scale` in [`AmpOptimWrapper`](https://github.com/o In model training, if you want to set different optimization strategies for different parameters in the optimizer, such as setting different learning rates, weight decay, and other hyperparameters, you can achieve this by setting `paramwise_cfg` in the `optim_wrapper` of the configuration file. -The following config file uses the [ViT `optim_wrapper`](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/vit/vit_vit-b16-ln_mln_upernet_8xb2-160k_ade20k-512x512.py#L15-L27) as an example to introduce the use of `paramwise_cfg` parameters. During training, the weight decay parameter coefficients for the `pos_embed`, `mask_token`, and `norm` modules are set to 0. That is, during training, the weight decay for these modules will be changed to `weight_decay * decay_mult`=0. +The following config file uses the [ViT `optim_wrapper`](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/vit/vit_vit-b16-ln_mln_upernet_8xb2-160k_ade20k-512x512.py#L15-L27) as an example to introduce the use of `paramwise_cfg` parameters. During training, the weight decay parameter coefficients for the `pos_embed`, `mask_token`, and `norm` modules are set to 0. That is, during training, the weight decay for these modules will be changed to `weight_decay * decay_mult`=0. ```python optimizer = dict( @@ -259,7 +259,7 @@ Here, `decay_mult` refers to the weight decay coefficient for the corresponding The default optimizer wrapper constructor [`DefaultOptimWrapperConstructor`](https://github.com/open-mmlab/mmengine/blob/main/mmengine/optim/optimizer/default_constructor.py#L19) builds the optimizer used in training based on the input `optim_wrapper` and `paramwise_cfg` defined in the `optim_wrapper`. When the functionality of [`DefaultOptimWrapperConstructor`](https://github.com/open-mmlab/mmengine/blob/main/mmengine/optim/optimizer/default_constructor.py#L19) does not meet the requirements, you can customize the optimizer wrapper constructor to implement the configuration of hyperparameters. -MMSegmentation has implemented the [`LearningRateDecayOptimizerConstructor`](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/engine/optimizers/layer_decay_optimizer_constructor.py#L104), which can decay the learning rate of model parameters in the backbone networks of ConvNeXt, BEiT, and MAE models during training according to the defined decay ratio (`decay_rate`). The configuration in the configuration file is as follows: +MMSegmentation has implemented the [`LearningRateDecayOptimizerConstructor`](https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/engine/optimizers/layer_decay_optimizer_constructor.py#L104), which can decay the learning rate of model parameters in the backbone networks of ConvNeXt, BEiT, and MAE models during training according to the defined decay ratio (`decay_rate`). The configuration in the configuration file is as follows: ```python optim_wrapper = dict( diff --git a/docs/en/advanced_guides/evaluation.md b/docs/en/advanced_guides/evaluation.md index 1e42db2a10..ca0beeeccf 100644 --- a/docs/en/advanced_guides/evaluation.md +++ b/docs/en/advanced_guides/evaluation.md @@ -2,10 +2,7 @@ The evaluation procedure would be executed at [ValLoop](https://github.com/open-mmlab/mmengine/blob/main/mmengine/runner/loops.py#L300) and [TestLoop](https://github.com/open-mmlab/mmengine/blob/main/mmengine/runner/loops.py#L373), users can evaluate model performance during training or using the test script with simple settings in the configuration file. The `ValLoop` and `TestLoop` are properties of [Runner](https://github.com/open-mmlab/mmengine/blob/main/mmengine/runner/runner.py#L59), they will be built the first time they are called. To build the `ValLoop` successfully, the `val_dataloader` and `val_evaluator` must be set when building `Runner` since `dataloader` and `evaluator` are required parameters, and the same goes for `TestLoop`. For more information about the Runner's design, please refer to the [documentation](https://github.com/open-mmlab/mmengine/blob/main/docs/en/design/runner.md) of [MMEngine](https://github.com/open-mmlab/mmengine). -
    - -
    test_step/val_step dataflow
    -
    +![test_step/val_step dataflow](https://user-images.githubusercontent.com/15952744/228828179-3269baa3-bebd-4c9a-9787-59e7d785fbcf.png) In MMSegmentation, we write the settings of dataloader and metrics in the config files of datasets and the configuration of the evaluation loop in the `schedule_x` config files by default. diff --git a/docs/en/advanced_guides/models.md b/docs/en/advanced_guides/models.md index 84e6cb6a9e..b0089869d9 100644 --- a/docs/en/advanced_guides/models.md +++ b/docs/en/advanced_guides/models.md @@ -34,15 +34,8 @@ MMSegmentation wraps `BaseModel` and implements the [BaseSegmentor](https://gith ### forward -
    - -
    EncoderDecoder dataflow
    -
    - -
    -
    -
    CascadeEncoderDecoder dataflow
    -
    +![EncoderDecoder dataflow](https://user-images.githubusercontent.com/15952744/228827860-c0e34875-d370-4736-84f0-9560c26c9576.png) +![CascadeEncoderDecoder dataflow](https://user-images.githubusercontent.com/15952744/228827987-aa214507-0c6d-4a08-8ce4-679b2b200b79.png) The `forward` method returns losses or predictions of training, validation, testing, and a simple inference process. @@ -114,10 +107,7 @@ Returns: - Dict\[str, `torch.Tensor`\]: A `dict` of tensor for logging. -
    - -
    train_step dataflow
    -
    +![train_step dataflow](https://user-images.githubusercontent.com/15952744/228828089-a9ae1225-958d-4cf7-99af-9af8576f7ef7.png) ### val_step @@ -131,10 +121,7 @@ Returns: - `list` - The predictions of given data. -
    - -
    test_step/val_step dataflow
    -
    +![test_step/val_step dataflow](https://user-images.githubusercontent.com/15952744/228828179-3269baa3-bebd-4c9a-9787-59e7d785fbcf.png) ### test_step diff --git a/docs/en/get_started.md b/docs/en/get_started.md index b082508693..3cda319065 100644 --- a/docs/en/get_started.md +++ b/docs/en/get_started.md @@ -51,7 +51,7 @@ mim install "mmcv>=2.0.0rc1" Case a: If you develop and run mmseg directly, install it from source: ```shell -git clone -b dev-1.x https://github.com/open-mmlab/mmsegmentation.git +git clone -b main https://github.com/open-mmlab/mmsegmentation.git cd mmsegmentation pip install -v -e . # '-v' means verbose, or more output @@ -164,7 +164,7 @@ thus we only need to install MMCV and MMSegmentation with the following commands ```shell !git clone https://github.com/open-mmlab/mmsegmentation.git %cd mmsegmentation -!git checkout dev-1.x +!git checkout main !pip install -e . ``` @@ -181,7 +181,7 @@ Within Jupyter, the exclamation mark `!` is used to call external executables an ### Using MMSegmentation with Docker -We provide a [Dockerfile](https://github.com/open-mmlab/mmsegmentation/blob/master/docker/Dockerfile) to build an image. Ensure that your [docker version](https://docs.docker.com/engine/install/) >=19.03. +We provide a [Dockerfile](https://github.com/open-mmlab/mmsegmentation/blob/main/docker/Dockerfile) to build an image. Ensure that your [docker version](https://docs.docker.com/engine/install/) >=19.03. ```shell # build an image with PyTorch 1.11, CUDA 11.3 diff --git a/docs/en/model_zoo.md b/docs/en/model_zoo.md index 782a47002f..6717df6cc7 100644 --- a/docs/en/model_zoo.md +++ b/docs/en/model_zoo.md @@ -34,123 +34,123 @@ ### FCN -Please refer to [FCN](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/fcn) for details. +Please refer to [FCN](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn) for details. ### PSPNet -Please refer to [PSPNet](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/pspnet) for details. +Please refer to [PSPNet](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet) for details. ### DeepLabV3 -Please refer to [DeepLabV3](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/deeplabv3) for details. +Please refer to [DeepLabV3](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3) for details. ### PSANet -Please refer to [PSANet](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/psanet) for details. +Please refer to [PSANet](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/psanet) for details. ### DeepLabV3+ -Please refer to [DeepLabV3+](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/deeplabv3plus) for details. +Please refer to [DeepLabV3+](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus) for details. ### UPerNet -Please refer to [UPerNet](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/upernet) for details. +Please refer to [UPerNet](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/upernet) for details. ### NonLocal Net -Please refer to [NonLocal Net](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/nonlocal_net) for details. +Please refer to [NonLocal Net](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/nonlocal_net) for details. ### EncNet -Please refer to [EncNet](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/encnet) for details. +Please refer to [EncNet](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/encnet) for details. ### CCNet -Please refer to [CCNet](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/ccnet) for details. +Please refer to [CCNet](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ccnet) for details. ### DANet -Please refer to [DANet](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/danet) for details. +Please refer to [DANet](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/danet) for details. ### APCNet -Please refer to [APCNet](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/apcnet) for details. +Please refer to [APCNet](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/apcnet) for details. ### HRNet -Please refer to [HRNet](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/hrnet) for details. +Please refer to [HRNet](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet) for details. ### GCNet -Please refer to [GCNet](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/gcnet) for details. +Please refer to [GCNet](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/gcnet) for details. ### DMNet -Please refer to [DMNet](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/dmnet) for details. +Please refer to [DMNet](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/dmnet) for details. ### ANN -Please refer to [ANN](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/ann) for details. +Please refer to [ANN](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ann) for details. ### OCRNet -Please refer to [OCRNet](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/ocrnet) for details. +Please refer to [OCRNet](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ocrnet) for details. ### Fast-SCNN -Please refer to [Fast-SCNN](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/fastscnn) for details. +Please refer to [Fast-SCNN](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fastscnn) for details. ### ResNeSt -Please refer to [ResNeSt](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/resnest) for details. +Please refer to [ResNeSt](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/resnest) for details. ### Semantic FPN -Please refer to [Semantic FPN](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/sem_fpn) for details. +Please refer to [Semantic FPN](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/sem_fpn) for details. ### PointRend -Please refer to [PointRend](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/point_rend) for details. +Please refer to [PointRend](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/point_rend) for details. ### MobileNetV2 -Please refer to [MobileNetV2](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/mobilenet_v2) for details. +Please refer to [MobileNetV2](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/mobilenet_v2) for details. ### MobileNetV3 -Please refer to [MobileNetV3](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/mobilenet_v3) for details. +Please refer to [MobileNetV3](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/mobilenet_v3) for details. ### EMANet -Please refer to [EMANet](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/emanet) for details. +Please refer to [EMANet](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/emanet) for details. ### DNLNet -Please refer to [DNLNet](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/dnlnet) for details. +Please refer to [DNLNet](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/dnlnet) for details. ### CGNet -Please refer to [CGNet](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/cgnet) for details. +Please refer to [CGNet](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/cgnet) for details. ### Mixed Precision (FP16) Training -Please refer [Mixed Precision (FP16) Training on BiSeNetV2](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/bisenetv2/bisenetv2_fcn_fp16_4x4_1024x1024_160k_cityscapes.py) for details. +Please refer [Mixed Precision (FP16) Training on BiSeNetV2](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/bisenetv2/bisenetv2_fcn_4xb4-160k_cityscapes-1024x1024.py) for details. ### U-Net -Please refer to [U-Net](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/unet/README.md) for details. +Please refer to [U-Net](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/unet/README.md) for details. ### ViT -Please refer to [ViT](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/vit/README.md) for details. +Please refer to [ViT](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/vit/README.md) for details. ### Swin -Please refer to [Swin](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/swin/README.md) for details. +Please refer to [Swin](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/swin/README.md) for details. ### SETR -Please refer to [SETR](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/setr/README.md) for details. +Please refer to [SETR](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/setr/README.md) for details. ## Speed benchmark diff --git a/docs/en/modelzoo_statistics.md b/docs/en/modelzoo_statistics.md index c8fa46d013..e5e21a1474 100644 --- a/docs/en/modelzoo_statistics.md +++ b/docs/en/modelzoo_statistics.md @@ -7,96 +7,96 @@ - Number of checkpoints: 612 - - \[ALGORITHM\] [ANN](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/ann) (16 ckpts) + - \[ALGORITHM\] [ANN](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ann) (16 ckpts) - - \[ALGORITHM\] [APCNet](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/apcnet) (12 ckpts) + - \[ALGORITHM\] [APCNet](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/apcnet) (12 ckpts) - - \[BACKBONE\] [BEiT](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/beit) (2 ckpts) + - \[BACKBONE\] [BEiT](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/beit) (2 ckpts) - - \[ALGORITHM\] [BiSeNetV1](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/bisenetv1) (11 ckpts) + - \[ALGORITHM\] [BiSeNetV1](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/bisenetv1) (11 ckpts) - - \[ALGORITHM\] [BiSeNetV2](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/bisenetv2) (4 ckpts) + - \[ALGORITHM\] [BiSeNetV2](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/bisenetv2) (4 ckpts) - - \[ALGORITHM\] [CCNet](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/ccnet) (16 ckpts) + - \[ALGORITHM\] [CCNet](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ccnet) (16 ckpts) - - \[ALGORITHM\] [CGNet](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/cgnet) (2 ckpts) + - \[ALGORITHM\] [CGNet](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/cgnet) (2 ckpts) - - \[BACKBONE\] [ConvNeXt](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/convnext) (6 ckpts) + - \[BACKBONE\] [ConvNeXt](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/convnext) (6 ckpts) - - \[ALGORITHM\] [DANet](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/danet) (16 ckpts) + - \[ALGORITHM\] [DANet](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/danet) (16 ckpts) - - \[ALGORITHM\] [DeepLabV3](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/deeplabv3) (41 ckpts) + - \[ALGORITHM\] [DeepLabV3](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3) (41 ckpts) - - \[ALGORITHM\] [DeepLabV3+](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/deeplabv3plus) (42 ckpts) + - \[ALGORITHM\] [DeepLabV3+](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/deeplabv3plus) (42 ckpts) - - \[ALGORITHM\] [DMNet](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/dmnet) (12 ckpts) + - \[ALGORITHM\] [DMNet](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/dmnet) (12 ckpts) - - \[ALGORITHM\] [DNLNet](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/dnlnet) (12 ckpts) + - \[ALGORITHM\] [DNLNet](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/dnlnet) (12 ckpts) - - \[ALGORITHM\] [DPT](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/dpt) (1 ckpts) + - \[ALGORITHM\] [DPT](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/dpt) (1 ckpts) - - \[ALGORITHM\] [EMANet](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/emanet) (4 ckpts) + - \[ALGORITHM\] [EMANet](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/emanet) (4 ckpts) - - \[ALGORITHM\] [EncNet](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/encnet) (12 ckpts) + - \[ALGORITHM\] [EncNet](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/encnet) (12 ckpts) - - \[ALGORITHM\] [ERFNet](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/erfnet) (1 ckpts) + - \[ALGORITHM\] [ERFNet](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/erfnet) (1 ckpts) - - \[ALGORITHM\] [FastFCN](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/fastfcn) (12 ckpts) + - \[ALGORITHM\] [FastFCN](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fastfcn) (12 ckpts) - - \[ALGORITHM\] [Fast-SCNN](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/fastscnn) (1 ckpts) + - \[ALGORITHM\] [Fast-SCNN](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fastscnn) (1 ckpts) - - \[ALGORITHM\] [FCN](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/fcn) (41 ckpts) + - \[ALGORITHM\] [FCN](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn) (41 ckpts) - - \[ALGORITHM\] [GCNet](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/gcnet) (16 ckpts) + - \[ALGORITHM\] [GCNet](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/gcnet) (16 ckpts) - - \[BACKBONE\] [HRNet](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/hrnet) (37 ckpts) + - \[BACKBONE\] [HRNet](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/hrnet) (37 ckpts) - - \[ALGORITHM\] [ICNet](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/icnet) (12 ckpts) + - \[ALGORITHM\] [ICNet](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/icnet) (12 ckpts) - - \[ALGORITHM\] [ISANet](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/isanet) (16 ckpts) + - \[ALGORITHM\] [ISANet](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/isanet) (16 ckpts) - - \[ALGORITHM\] [K-Net](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/knet) (7 ckpts) + - \[ALGORITHM\] [K-Net](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/knet) (7 ckpts) - - \[BACKBONE\] [MAE](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/mae) (1 ckpts) + - \[BACKBONE\] [MAE](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/mae) (1 ckpts) - - \[ALGORITHM\] [Mask2Former](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/mask2former) (13 ckpts) + - \[ALGORITHM\] [Mask2Former](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/mask2former) (13 ckpts) - - \[ALGORITHM\] [MaskFormer](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/maskformer) (4 ckpts) + - \[ALGORITHM\] [MaskFormer](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/maskformer) (4 ckpts) - - \[BACKBONE\] [MobileNetV2](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/mobilenet_v2) (8 ckpts) + - \[BACKBONE\] [MobileNetV2](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/mobilenet_v2) (8 ckpts) - - \[BACKBONE\] [MobileNetV3](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/mobilenet_v3) (4 ckpts) + - \[BACKBONE\] [MobileNetV3](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/mobilenet_v3) (4 ckpts) - - \[ALGORITHM\] [NonLocal Net](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/nonlocal_net) (16 ckpts) + - \[ALGORITHM\] [NonLocal Net](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/nonlocal_net) (16 ckpts) - - \[ALGORITHM\] [OCRNet](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/ocrnet) (24 ckpts) + - \[ALGORITHM\] [OCRNet](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/ocrnet) (24 ckpts) - - \[ALGORITHM\] [PointRend](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/point_rend) (4 ckpts) + - \[ALGORITHM\] [PointRend](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/point_rend) (4 ckpts) - - \[BACKBONE\] [PoolFormer](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/poolformer) (5 ckpts) + - \[BACKBONE\] [PoolFormer](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/poolformer) (5 ckpts) - - \[ALGORITHM\] [PSANet](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/psanet) (16 ckpts) + - \[ALGORITHM\] [PSANet](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/psanet) (16 ckpts) - - \[ALGORITHM\] [PSPNet](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/pspnet) (54 ckpts) + - \[ALGORITHM\] [PSPNet](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/pspnet) (54 ckpts) - - \[BACKBONE\] [ResNeSt](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/resnest) (8 ckpts) + - \[BACKBONE\] [ResNeSt](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/resnest) (8 ckpts) - - \[ALGORITHM\] [SegFormer](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/segformer) (13 ckpts) + - \[ALGORITHM\] [SegFormer](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/segformer) (13 ckpts) - - \[ALGORITHM\] [Segmenter](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/segmenter) (5 ckpts) + - \[ALGORITHM\] [Segmenter](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/segmenter) (5 ckpts) - - \[ALGORITHM\] [Semantic FPN](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/sem_fpn) (4 ckpts) + - \[ALGORITHM\] [Semantic FPN](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/sem_fpn) (4 ckpts) - - \[ALGORITHM\] [SETR](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/setr) (7 ckpts) + - \[ALGORITHM\] [SETR](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/setr) (7 ckpts) - - \[ALGORITHM\] [STDC](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/stdc) (4 ckpts) + - \[ALGORITHM\] [STDC](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/stdc) (4 ckpts) - - \[BACKBONE\] [Swin Transformer](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/swin) (6 ckpts) + - \[BACKBONE\] [Swin Transformer](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/swin) (6 ckpts) - - \[BACKBONE\] [Twins](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/twins) (12 ckpts) + - \[BACKBONE\] [Twins](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/twins) (12 ckpts) - - \[ALGORITHM\] [UNet](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/unet) (25 ckpts) + - \[ALGORITHM\] [UNet](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/unet) (25 ckpts) - - \[ALGORITHM\] [UPerNet](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/upernet) (16 ckpts) + - \[ALGORITHM\] [UPerNet](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/upernet) (16 ckpts) - - \[BACKBONE\] [Vision Transformer](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/vit) (11 ckpts) + - \[BACKBONE\] [Vision Transformer](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/vit) (11 ckpts) diff --git a/docs/en/notes/faq.md b/docs/en/notes/faq.md index fe5cac3834..5b9c35339b 100644 --- a/docs/en/notes/faq.md +++ b/docs/en/notes/faq.md @@ -26,5 +26,5 @@ Notes: ## How to know the number of GPUs needed to train the model -- Infer from the name of the config file of the model. You can refer to the `Config Name Style` part of [Learn about Configs](https://github.com/open-mmlab/mmsegmentation/blob/master/docs/en/tutorials/config.md). For example, for config file with name `segformer_mit-b0_8xb1-160k_cityscapes-1024x1024.py`, `8xb1` means training the model corresponding to it needs 8 GPUs, and the batch size of each GPU is 1. +- Infer from the name of the config file of the model. You can refer to the `Config Name Style` part of [Learn about Configs](../user_guides/1_config.md). For example, for config file with name `segformer_mit-b0_8xb1-160k_cityscapes-1024x1024.py`, `8xb1` means training the model corresponding to it needs 8 GPUs, and the batch size of each GPU is 1. - Infer from the log file. Open the log file of the model and search `nGPU` in the file. The number of figures following `nGPU` is the number of GPUs needed to train the model. For instance, searching for `nGPU` in the log file yields the record `nGPU 0,1,2,3,4,5,6,7`, which indicates that eight GPUs are needed to train the model. diff --git a/docs/en/overview.md b/docs/en/overview.md index 399f343fd4..bbc0b8e32c 100644 --- a/docs/en/overview.md +++ b/docs/en/overview.md @@ -72,8 +72,8 @@ Here is a detailed step-by-step guide to learn more about MMSegmentation: please refer to the below guides to build your own segmentation project: - [Add new models](advanced_guides/add_models.md) - - [Add new datasets](advanced_guides/add_dataset.md) - - [Add new transforms](advanced_guides/add_transform.md) + - [Add new datasets](advanced_guides/add_datasets.md) + - [Add new transforms](advanced_guides/add_transforms.md) - [Customize runtime](advanced_guides/customize_runtime.md) 5. If you are more familiar with MMSegmentation v0.x, there is documentation about migration from MMSegmentation v0.x to v1.x @@ -82,4 +82,4 @@ Here is a detailed step-by-step guide to learn more about MMSegmentation: ## References -- https://paperswithcode.com/task/semantic-segmentation/codeless#task-home +- [Paper with code](https://paperswithcode.com/task/semantic-segmentation/codeless#task-home) diff --git a/docs/en/switch_language.md b/docs/en/switch_language.md index 80e30dc3ae..d6973b6c05 100644 --- a/docs/en/switch_language.md +++ b/docs/en/switch_language.md @@ -1,3 +1,3 @@ -## English +## English -## 简体中文 +## 简体中文 diff --git a/docs/en/user_guides/2_dataset_prepare.md b/docs/en/user_guides/2_dataset_prepare.md index 63a1a8bb4a..d4fbfbf5d0 100644 --- a/docs/en/user_guides/2_dataset_prepare.md +++ b/docs/en/user_guides/2_dataset_prepare.md @@ -619,4 +619,4 @@ It includes 400 images for training, 400 images for validation and 400 images fo ``` - You could set Datasets version with `MapillaryDataset_v1` and `MapillaryDataset_v2` in your configs. - View the Mapillary Vistas Datasets config file here [V1.2](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/_base_/datasets/mapillary_v1.py) and [V2.0](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/_base_/datasets/mapillary_v2.py) + View the Mapillary Vistas Datasets config file here [V1.2](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/_base_/datasets/mapillary_v1.py) and [V2.0](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/_base_/datasets/mapillary_v2.py) diff --git a/docs/en/user_guides/3_inference.md b/docs/en/user_guides/3_inference.md index 6650b2ed39..cacebd2f60 100644 --- a/docs/en/user_guides/3_inference.md +++ b/docs/en/user_guides/3_inference.md @@ -96,7 +96,7 @@ The model names can be found in models' metafile (configs/xxx/metafile.yaml), li - weights (str, optional) - Path to the checkpoint. If it is not specified and model is a model name of metafile, the weights will be loaded from metafile. Defaults to None. - classes (list, optional) - Input classes for result rendering, as the prediction of segmentation model is a segment map with label indices, `classes` is a list which includes items responding to the label indices. If classes is not defined, visualizer will take `cityscapes` classes by default. Defaults to None. - palette (list, optional) - Input palette for result rendering, which is a list of colors responding to the classes. If the palette is not defined, the visualizer will take the palette of `cityscapes` by default. Defaults to None. -- dataset_name (str, optional) - [Dataset name or alias](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/utils/class_names.py#L302-L317), visualizer will use the meta information of the dataset i.e. classes and palette, but the `classes` and `palette` have higher priority. Defaults to None. +- dataset_name (str, optional) - [Dataset name or alias](https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/utils/class_names.py#L302-L317), visualizer will use the meta information of the dataset i.e. classes and palette, but the `classes` and `palette` have higher priority. Defaults to None. - device (str, optional) - Device to run inference. If None, the available device will be automatically used. Defaults to None. - scope (str, optional) - The scope of the model. Defaults to 'mmseg'. diff --git a/docs/zh_cn/advanced_guides/add_models.md b/docs/zh_cn/advanced_guides/add_models.md index 2f0a5af0d1..e05c07c8ba 100644 --- a/docs/zh_cn/advanced_guides/add_models.md +++ b/docs/zh_cn/advanced_guides/add_models.md @@ -166,7 +166,7 @@ loss_decode=dict(type='MyLoss', loss_weight=1.0)) ### 添加新的数据预处理器(data preprocessor) -在 MMSegmentation 1.x 版本中,我们使用 [SegDataPreProcessor](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/models/data_preprocessor.py#L13) 将数据复制到目标设备,并将数据预处理为默认的模型输入格式。这里我们将展示如何开发一个新的数据预处理器。 +在 MMSegmentation 1.x 版本中,我们使用 [SegDataPreProcessor](https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/models/data_preprocessor.py#L13) 将数据复制到目标设备,并将数据预处理为默认的模型输入格式。这里我们将展示如何开发一个新的数据预处理器。 1. 创建一个新文件 `mmseg/models/my_datapreprocessor.py`。 diff --git a/docs/zh_cn/advanced_guides/data_flow.md b/docs/zh_cn/advanced_guides/data_flow.md index 0716d36d1b..20dbe07e75 100644 --- a/docs/zh_cn/advanced_guides/data_flow.md +++ b/docs/zh_cn/advanced_guides/data_flow.md @@ -16,7 +16,7 @@ val_cfg = dict(type='ValLoop') test_cfg = dict(type='TestLoop') ``` -在上图中,红色线表示 [train_step](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/en/advanced_guides/models.md#train_step) ***([中文链接待更新](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/zh_cn/advanced_guides/models.md#train_step))*** ,在每次训练迭代中,数据加载器(dataloader)从存储中加载图像并传输到数据预处理器(data preprocessor),数据预处理器会将图像放到特定的设备上,并将数据堆叠到批处理中,之后模型接受批处理数据作为输入,最后将模型的输出发送给优化器(optimizer)。蓝色线表示 [val_step](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/en/advanced_guides/models.md#val_step) 和 [test_step](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/en/advanced_guides/models.md#test_step) ***([中文链接待更新](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/zh_cn/advanced_guides/models.md#test_step))*** 。这两个过程的数据流除了模型输出与 `train_step` 不同外,其余均和 `train_step` 类似。由于在评估时模型参数会被冻结,因此模型的输出将被传递给 [Evaluator](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/en/advanced_guides/evaluation.md#ioumetric) ***([中文链接待更新](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/zh_cn/advanced_guides/evaluation.md#ioumetric))*** +在上图中,红色线表示 [train_step](./models.md#train_step),在每次训练迭代中,数据加载器(dataloader)从存储中加载图像并传输到数据预处理器(data preprocessor),数据预处理器会将图像放到特定的设备上,并将数据堆叠到批处理中,之后模型接受批处理数据作为输入,最后将模型的输出发送给优化器(optimizer)。蓝色线表示 [val_step](./models.md#val_step) 和 [test_step](./models.md#test_step)。这两个过程的数据流除了模型输出与 `train_step` 不同外,其余均和 `train_step` 类似。由于在评估时模型参数会被冻结,因此模型的输出将被传递给 [Evaluator](./evaluation.md#ioumetric)。 来计算指标。 ## MMSegmentation 中的数据流约定 @@ -28,7 +28,7 @@ test_cfg = dict(type='TestLoop') 数据加载器(DataLoader)是 MMEngine 的训练和测试流程中的一个重要组件。 从概念上讲,它源于 [PyTorch](https://pytorch.org/) 并保持一致。DataLoader 从文件系统加载数据,原始数据通过数据准备流程后被发送给数据预处理器。 -MMSegmentation 在 [PackSegInputs](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/datasets/transforms/formatting.py#L12) 中定义了默认数据格式, 它是 `train_pipeline` 和 `test_pipeline` 的最后一个组件。有关数据转换 `pipeline` 的更多信息,请参阅[数据转换文档](https://mmsegmentation.readthedocs.io/en/dev-1.x/advanced_guides/transforms.html)。 ***([中文链接待更新](https://mmsegmentation.readthedocs.io/zh_CN/dev-1.x/advanced_guides/transforms.html))*** +MMSegmentation 在 [PackSegInputs](https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/datasets/transforms/formatting.py#L12) 中定义了默认数据格式, 它是 `train_pipeline` 和 `test_pipeline` 的最后一个组件。有关数据转换 `pipeline` 的更多信息,请参阅[数据转换文档](./transforms.md)。 在没有任何修改的情况下,PackSegInputs 的返回值通常是一个包含 `inputs` 和 `data_samples` 的 `dict`。以下伪代码展示了 mmseg 中数据加载器输出的数据类型,它是从数据集中获取的一批数据样本,数据加载器将它们打包成一个字典列表。`inputs` 是输入进模型的张量列表,`data_samples` 包含了输入图像的 meta information 和相应的 ground truth。 @@ -39,11 +39,11 @@ dict( ) ``` -**注意:** [SegDataSample](https://github.com/open-mmlab/mmsegmentation/blob/1.x/mmseg/structures/seg_data_sample.py) 是 MMSegmentation 的数据结构接口,用于连接不同组件。`SegDataSample` 实现了抽象数据元素 `mmengine.structures.BaseDataElement`,更多信息请在 [MMEngine](https://github.com/open-mmlab/mmengine) 中参阅 [SegDataSample 文档](https://mmsegmentation.readthedocs.io/zh_CN/1.x/advanced_guides/structures.html)和[数据元素文档](https://mmengine.readthedocs.io/zh_CN/latest/advanced_tutorials/data_element.html)。 +**注意:** [SegDataSample](https://github.com/open-mmlab/mmsegmentation/blob/1.x/mmseg/structures/seg_data_sample.py) 是 MMSegmentation 的数据结构接口,用于连接不同组件。`SegDataSample` 实现了抽象数据元素 `mmengine.structures.BaseDataElement`,更多信息请在 [MMEngine](https://github.com/open-mmlab/mmengine) 中参阅 [SegDataSample 文档](./structures.md)和[数据元素文档](https://mmengine.readthedocs.io/zh_CN/latest/advanced_tutorials/data_element.html)。 ### 数据预处理器到模型 -虽然在[上面的图](##数据流概述)中分开绘制了数据预处理器和模型,但数据预处理器是模型的一部分,因此可以在[模型教程](https://mmsegmentation.readthedocs.io/en/dev-1.x/advanced_guides/models.html)中找到数据预处理器章节。 ***([中文链接待更新](https://mmsegmentation.readthedocs.io/zh_CN/dev-1.x/advanced_guides/models.html))*** +虽然在[上面的图](##数据流概述)中分开绘制了数据预处理器和模型,但数据预处理器是模型的一部分,因此可以在[模型教程](./models.md)中找到数据预处理器章节。 数据预处理器的返回值是一个包含 `inputs` 和 `data_samples` 的字典,其中 `inputs` 是批处理图像的 4D 张量,`data_samples` 中添加了一些用于数据预处理的额外元信息。当传递给网络时,字典将被解包为两个值。 以下伪代码展示了数据预处理器的返回值和模型的输入值。 @@ -61,22 +61,22 @@ class Network(BaseSegmentor): pass ``` -**注意:** 模型的前向传播有 3 种模式,由输入参数 mode 控制,更多信息请参阅[模型教程](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/en/advanced_guides/models.md)。 ***([中文链接待更新](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/zh_cn/advanced_guides/models.md))*** +**注意:** 模型的前向传播有 3 种模式,由输入参数 mode 控制,更多信息请参阅[模型教程](./models.md)。 ### 模型输出 -如[模型教程](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/en/advanced_guides/models.md#forward) ***([中文链接待更新](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/zh_cn/advanced_guides/models.md#forward))*** 所提到的 3 种前向传播具有 3 种输出。 +如[模型教程](./models.md#forward) ***([中文链接待更新](./models.md#forward))*** 所提到的 3 种前向传播具有 3 种输出。 `train_step` 和 `test_step`(或 `val_step`)分别对应于 `'loss'` 和 `'predict'`。 -在 `test_step` 或 `val_step` 中,推理结果会被传递给 `Evaluator` 。您可以参阅[评估文档](https://mmsegmentation.readthedocs.io/en/dev-1.x/advanced_guides/evaluation.html) ***([中文链接待更新](https://mmsegmentation.readthedocs.io/zh_CN/dev-1.x/advanced_guides/evaluation.html))*** 来获取更多关于 `Evaluator` 的信息。 +在 `test_step` 或 `val_step` 中,推理结果会被传递给 `Evaluator` 。您可以参阅[评估文档](./evaluation.md)来获取更多关于 `Evaluator` 的信息。 -在推理后,MMSegmentation 中的 [BaseSegmentor](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/models/segmentors/base.py#L15) 会对推理结果进行简单的后处理以打包推理结果。神经网络生成的分割 logits,经过 `argmax` 操作后的分割 mask 和 ground truth(如果存在)将被打包到类似 `SegDataSample` 的实例。 [postprocess_result](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/models/segmentors/base.py#L132) 的返回值是一个 **`SegDataSample`的`List`**。下图显示了这些 `SegDataSample` 实例的关键属性。 +在推理后,MMSegmentation 中的 [BaseSegmentor](https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/models/segmentors/base.py#L15) 会对推理结果进行简单的后处理以打包推理结果。神经网络生成的分割 logits,经过 `argmax` 操作后的分割 mask 和 ground truth(如果存在)将被打包到类似 `SegDataSample` 的实例。 [postprocess_result](https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/models/segmentors/base.py#L132) 的返回值是一个 **`SegDataSample`的`List`**。下图显示了这些 `SegDataSample` 实例的关键属性。 ![SegDataSample](https://user-images.githubusercontent.com/15952744/209912225-ab46a8d9-904a-43cb-8bf1-8bec4938ed29.png) -与数据预处理器一致,损失函数也是模型的一部分,它是[解码头](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/models/decode_heads/decode_head.py#L142)的属性之一。 +与数据预处理器一致,损失函数也是模型的一部分,它是[解码头](https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/models/decode_heads/decode_head.py#L142)的属性之一。 -在 MMSegmentation 中,`decode_head` 的 [loss_by_feat](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/models/decode_heads/decode_head.py#L291) 方法是用于计算损失的统一接口。 +在 MMSegmentation 中,`decode_head` 的 [loss_by_feat](https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/models/decode_heads/decode_head.py#L291) 方法是用于计算损失的统一接口。 参数: @@ -87,4 +87,4 @@ class Network(BaseSegmentor): - dict\[str, Tensor\]:一个损失组件的字典 -**注意:** `train_step` 将损失传递进 OptimWrapper 以更新模型中的权重,更多信息请参阅 [train_step](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/en/advanced_guides/models.md#train_step)。 ***([中文链接待更新](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/zh_cn/advanced_guides/models.md#train_step))*** +**注意:** `train_step` 将损失传递进 OptimWrapper 以更新模型中的权重,更多信息请参阅 [train_step](./models.md#train_step)。 diff --git a/docs/zh_cn/advanced_guides/datasets.md b/docs/zh_cn/advanced_guides/datasets.md index 546e97f70d..80852a04e5 100644 --- a/docs/zh_cn/advanced_guides/datasets.md +++ b/docs/zh_cn/advanced_guides/datasets.md @@ -1,10 +1,10 @@ # 数据集 -在 MMSegmentation 算法库中, 所有 Dataset 类的功能有两个: 加载[预处理](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/en/user_guides/2_dataset_prepare.md) 之后的数据集的信息, 和将数据送入[数据集变换流水线](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/datasets/basesegdataset.py#L141) 中, 进行[数据变换操作](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/zh_cn/advanced_guides/transforms.md). 加载的数据集信息包括两类: 元信息 (meta information), 数据集本身的信息, 例如数据集总共的类别, 和它们对应调色盘信息: 数据信息 (data information) 是指每组数据中图片和对应标签的路径. 下文中介绍了 MMSegmentation 1.x 中数据集的常用接口, 和 mmseg 数据集基类中数据信息加载与修改数据集类别的逻辑, 以及数据集与数据变换流水线 (pipeline) 的关系. +在 MMSegmentation 算法库中, 所有 Dataset 类的功能有两个: 加载[预处理](../user_guides/2_dataset_prepare.md) 之后的数据集的信息, 和将数据送入[数据集变换流水线](https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/datasets/basesegdataset.py#L141) 中, 进行[数据变换操作](./transforms.md). 加载的数据集信息包括两类: 元信息 (meta information), 数据集本身的信息, 例如数据集总共的类别, 和它们对应调色盘信息: 数据信息 (data information) 是指每组数据中图片和对应标签的路径. 下文中介绍了 MMSegmentation 1.x 中数据集的常用接口, 和 mmseg 数据集基类中数据信息加载与修改数据集类别的逻辑, 以及数据集与数据变换流水线 (pipeline) 的关系. ## 常用接口 -以 Cityscapes 为例, 介绍数据集常用接口. 如需运行以下示例, 请在当前工作目录下的 `data` 目录下载并[预处理](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/en/user_guides/2_dataset_prepare.md#cityscapes) Cityscapes 数据集. +以 Cityscapes 为例, 介绍数据集常用接口. 如需运行以下示例, 请在当前工作目录下的 `data` 目录下载并[预处理](../user_guides/2_dataset_prepare.md#cityscapes) Cityscapes 数据集. 实例化 Cityscapes 训练数据集: @@ -96,7 +96,7 @@ print(dataset.metainfo) 'reduce_zero_label': False} ``` -数据集 `__getitem__` 方法的返回值, 是经过数据增强的样本数据的输出, 同样也是一个字典, 包括两个字段, `'inputs'` 字段是当前样本经过数据增强操作的图像, 类型为 torch.Tensor, `'data_samples'` 字段存放的数据类型是 MMSegmentation 1.x 新添加的数据结构 [`Segdatasample`](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/zh_cn/advanced_guides/structures.md), 其中`gt_sem_seg` 字段是经过数据增强的标签数据. +数据集 `__getitem__` 方法的返回值, 是经过数据增强的样本数据的输出, 同样也是一个字典, 包括两个字段, `'inputs'` 字段是当前样本经过数据增强操作的图像, 类型为 torch.Tensor, `'data_samples'` 字段存放的数据类型是 MMSegmentation 1.x 新添加的数据结构 [`Segdatasample`](./structures.md), 其中`gt_sem_seg` 字段是经过数据增强的标签数据. ```python print(dataset[0]) @@ -166,13 +166,13 @@ print(dataset[0]) ## BaseSegDataset -由于 MMSegmentation 中的所有数据集的基本功能均包括(1) 加载[数据集预处理](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/zh_cn/user_guides/2_dataset_prepare.md) 之后的数据信息和 (2) 将数据送入数据变换流水线中进行数据变换, 因此在 MMSegmentation 中将其中的共同接口抽象成 [`BaseSegDataset`](https://mmsegmentation.readthedocs.io/en/dev-1.x/api.html?highlight=BaseSegDataset#mmseg.datasets.BaseSegDataset),它继承自 [MMEngine 的 `BaseDataset`](https://github.com/open-mmlab/mmengine/blob/main/docs/en/advanced_tutorials/basedataset.md), 遵循 OpenMMLab 数据集初始化统一流程, 支持高效的内部数据存储格式, 支持数据集拼接、数据集重复采样等功能. +由于 MMSegmentation 中的所有数据集的基本功能均包括(1) 加载[数据集预处理](../user_guides/2_dataset_prepare.md) 之后的数据信息和 (2) 将数据送入数据变换流水线中进行数据变换, 因此在 MMSegmentation 中将其中的共同接口抽象成 [`BaseSegDataset`](https://mmsegmentation.readthedocs.io/en/main/api.html?highlight=BaseSegDataset#mmseg.datasets.BaseSegDataset),它继承自 [MMEngine 的 `BaseDataset`](https://github.com/open-mmlab/mmengine/blob/main/docs/en/advanced_tutorials/basedataset.md), 遵循 OpenMMLab 数据集初始化统一流程, 支持高效的内部数据存储格式, 支持数据集拼接、数据集重复采样等功能. 在 MMSegmentation BaseSegDataset 中重新定义了**数据信息加载方法**(`load_data_list`)和并新增了 `get_label_map` 方法用来**修改数据集的类别信息**. ### 数据信息加载 -数据信息加载的内容是样本数据的图片路径和标签路径, 具体实现在 MMSegmentation 的 BaseSegDataset 的 [`load_data_list`](https://github.com/open-mmlab/mmsegmentation/blob/163277bfe0fa8fefb63ee5137917fafada1b301c/mmseg/datasets/basesegdataset.py#L231) 中. -主要有两种获取图片和标签的路径方法, 如果当数据集目录按以下目录结构组织, [`load_data_list`](https://github.com/open-mmlab/mmsegmentation/blob/163277bfe0fa8fefb63ee5137917fafada1b301c/mmseg/datasets/basesegdataset.py#L231)) 会根据数据路径和后缀来解析. +数据信息加载的内容是样本数据的图片路径和标签路径, 具体实现在 MMSegmentation 的 BaseSegDataset 的 [`load_data_list`](https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/datasets/basesegdataset.py#L231) 中. +主要有两种获取图片和标签的路径方法, 如果当数据集目录按以下目录结构组织, [`load_data_list`](https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/datasets/basesegdataset.py#L231)) 会根据数据路径和后缀来解析. ``` ├── data @@ -322,7 +322,7 @@ print(dataset.metainfo) 'reduce_zero_label': False} ``` -可以看到, 数据集元信息的类别和默认 Cityscapes 不同. 并且, 定义了标签重映射的字段 `label_map` 用来修改每个分割掩膜上的像素的类别索引, 分割标签类别会根据 `label_map`, 将类别重映射, [具体实现](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/datasets/basesegdataset.py#L151): +可以看到, 数据集元信息的类别和默认 Cityscapes 不同. 并且, 定义了标签重映射的字段 `label_map` 用来修改每个分割掩膜上的像素的类别索引, 分割标签类别会根据 `label_map`, 将类别重映射, [具体实现](https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/datasets/basesegdataset.py#L151): ```python gt_semantic_seg_copy = gt_semantic_seg.copy() diff --git a/docs/zh_cn/advanced_guides/engine.md b/docs/zh_cn/advanced_guides/engine.md index 7920ecfd87..79b4c8d229 100644 --- a/docs/zh_cn/advanced_guides/engine.md +++ b/docs/zh_cn/advanced_guides/engine.md @@ -66,16 +66,16 @@ OpenMMLab 将模型训练和测试过程抽象为 `Runner`, 插入钩子可以 不建议用户修改默认钩子的优先级, 可以参考 [mmengine hooks 文档](https://github.com/open-mmlab/mmengine/blob/main/docs/zh_cn/tutorials/hook.md) 了解钩子优先级的定义. 下面是 MMSegmentation 中所用到的默认钩子: -| 钩子 | 功能 | 优先级 | -| :-----------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------: | :---------------: | -| [IterTimerHook](https://github.com/open-mmlab/mmengine/blob/main/mmengine/hooks/iter_timer_hook.py) | 记录 iteration 花费的时间. | NORMAL (50) | -| [LoggerHook](https://github.com/open-mmlab/mmengine/blob/main/mmengine/hooks/logger_hook.py) | 从 `Runner` 里不同的组件中收集日志记录, 并将其输出到终端, JSON 文件, tensorboard, wandb 等下游. | BELOW_NORMAL (60) | -| [ParamSchedulerHook](https://github.com/open-mmlab/mmengine/blob/main/mmengine/hooks/param_scheduler_hook.py) | 更新优化器里面的一些超参数, 例如学习率的动量. | LOW (70) | -| [CheckpointHook](https://github.com/open-mmlab/mmengine/blob/main/mmengine/hooks/checkpoint_hook.py) | 规律性地保存 checkpoint 文件. | VERY_LOW (90) | -| [DistSamplerSeedHook](https://github.com/open-mmlab/mmengine/blob/main/mmengine/hooks/sampler_seed_hook.py) | 确保分布式采样器 shuffle 是打开的. | NORMAL (50) | -| [SegVisualizationHook](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/visualization/local_visualizer.py) | 可视化验证和测试过程里的预测结果. | NORMAL (50) | +| 钩子 | 功能 | 优先级 | +| :--------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------: | :---------------: | +| [IterTimerHook](https://github.com/open-mmlab/mmengine/blob/main/mmengine/hooks/iter_timer_hook.py) | 记录 iteration 花费的时间. | NORMAL (50) | +| [LoggerHook](https://github.com/open-mmlab/mmengine/blob/main/mmengine/hooks/logger_hook.py) | 从 `Runner` 里不同的组件中收集日志记录, 并将其输出到终端, JSON 文件, tensorboard, wandb 等下游. | BELOW_NORMAL (60) | +| [ParamSchedulerHook](https://github.com/open-mmlab/mmengine/blob/main/mmengine/hooks/param_scheduler_hook.py) | 更新优化器里面的一些超参数, 例如学习率的动量. | LOW (70) | +| [CheckpointHook](https://github.com/open-mmlab/mmengine/blob/main/mmengine/hooks/checkpoint_hook.py) | 规律性地保存 checkpoint 文件. | VERY_LOW (90) | +| [DistSamplerSeedHook](https://github.com/open-mmlab/mmengine/blob/main/mmengine/hooks/sampler_seed_hook.py) | 确保分布式采样器 shuffle 是打开的. | NORMAL (50) | +| [SegVisualizationHook](https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/visualization/local_visualizer.py) | 可视化验证和测试过程里的预测结果. | NORMAL (50) | -MMSegmentation 会在 [`defualt_hooks`](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/_base_/schedules/schedule_160k.py#L19-L25) 里面注册一些训练所必需功能的钩子:: +MMSegmentation 会在 [`defualt_hooks`](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/_base_/schedules/schedule_160k.py#L19-L25) 里面注册一些训练所必需功能的钩子:: ```python default_hooks = dict( @@ -147,7 +147,7 @@ custom_hooks = [ ### SegVisualizationHook -MMSegmentation 实现了 [`SegVisualizationHook`](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/engine/hooks/visualization_hook.py#L17), 用来在验证和测试时可视化预测结果. +MMSegmentation 实现了 [`SegVisualizationHook`](https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/engine/hooks/visualization_hook.py#L17), 用来在验证和测试时可视化预测结果. `SegVisualizationHook` 重写了基类 `Hook` 中的 `_after_iter` 方法, 在验证或测试时, 根据指定的迭代次数间隔调用 `visualizer` 的 `add_datasample` 方法绘制语义分割结果, 具体实现如下: ```python @@ -183,7 +183,7 @@ class SegVisualizationHook(Hook): ``` -关于可视化更多的细节可以查看[这里](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/zh_cn/user_guides/visualization.md). +关于可视化更多的细节可以查看[这里](../user_guides/visualization.md). ## 优化器 @@ -236,7 +236,7 @@ optim_wrapper = dict(type='AmpOptimWrapper', optimizer=optimizer) 在模型训练中, 如果想在优化器里为不同参数分别设置优化策略, 例如设置不同的学习率、权重衰减等超参数, 可以通过设置配置文件里 `optim_wrapper` 中的 `paramwise_cfg` 来实现. -下面的配置文件以 [ViT `optim_wrapper`](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/vit/vit_vit-b16-ln_mln_upernet_8xb2-160k_ade20k-512x512.py#L15-L27) 为例介绍 `paramwise_cfg` 参数使用. +下面的配置文件以 [ViT `optim_wrapper`](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/vit/vit_vit-b16-ln_mln_upernet_8xb2-160k_ade20k-512x512.py#L15-L27) 为例介绍 `paramwise_cfg` 参数使用. 训练时将 `pos_embed`, `mask_token`, `norm` 模块的 weight decay 参数的系数设置成 0. 即: 在训练时, 这些模块的 weight decay 将被变为 `weight_decay * decay_mult`=0. @@ -261,7 +261,7 @@ optim_wrapper = dict( 默认的优化器封装构造器 [`DefaultOptimWrapperConstructor`](https://github.com/open-mmlab/mmengine/blob/main/mmengine/optim/optimizer/default_constructor.py#L19) 根据输入的 `optim_wrapper` 和 `optim_wrapper` 中定义的 `paramwise_cfg` 来构建训练中使用的优化器. 当 [`DefaultOptimWrapperConstructor`](https://github.com/open-mmlab/mmengine/blob/main/mmengine/optim/optimizer/default_constructor.py#L19) 功能不能满足需求时, 可以自定义优化器封装构造器来实现超参数的配置. -MMSegmentation 中的实现了 [`LearningRateDecayOptimizerConstructor`](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/engine/optimizers/layer_decay_optimizer_constructor.py#L104), 可以对以 ConvNeXt, BEiT 和 MAE 为骨干网络的模型训练时, 骨干网络的模型参数的学习率按照定义的衰减比例(`decay_rate`)逐层递减, 在配置文件中的配置如下: +MMSegmentation 中的实现了 [`LearningRateDecayOptimizerConstructor`](https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/engine/optimizers/layer_decay_optimizer_constructor.py#L104), 可以对以 ConvNeXt, BEiT 和 MAE 为骨干网络的模型训练时, 骨干网络的模型参数的学习率按照定义的衰减比例(`decay_rate`)逐层递减, 在配置文件中的配置如下: ```python optim_wrapper = dict( diff --git a/docs/zh_cn/get_started.md b/docs/zh_cn/get_started.md index 38e93e9cb4..55360aab8f 100644 --- a/docs/zh_cn/get_started.md +++ b/docs/zh_cn/get_started.md @@ -51,7 +51,7 @@ mim install "mmcv>=2.0.0rc1" 情况 a: 如果您想立刻开发和运行 mmsegmentation,您可通过源码安装: ```shell -git clone -b dev-1.x https://github.com/open-mmlab/mmsegmentation.git +git clone -b main https://github.com/open-mmlab/mmsegmentation.git cd mmsegmentation pip install -v -e . # '-v' 表示详细模式,更多的输出 @@ -164,7 +164,7 @@ MMSegmentation 可以在仅有 CPU 的版本上运行。在 CPU 模式,您可 ```shell !git clone https://github.com/open-mmlab/mmsegmentation.git %cd mmsegmentation -!git checkout dev-1.x +!git checkout main !pip install -e . ``` diff --git a/docs/zh_cn/user_guides/2_dataset_prepare.md b/docs/zh_cn/user_guides/2_dataset_prepare.md index 6d8cb18681..e5e6c76c47 100644 --- a/docs/zh_cn/user_guides/2_dataset_prepare.md +++ b/docs/zh_cn/user_guides/2_dataset_prepare.md @@ -615,4 +615,4 @@ python tools/convert_datasets/refuge.py --raw_data_root=/path/to/refuge/REFUGE2/ ``` - 您可以在配置中使用 `MapillaryDataset_v1` 和 `Mapillary Dataset_v2` 设置数据集版本。 - 在此处 [V1.2](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/_base_/datasets/mapillary_v1.py) 和 [V2.0](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/_base_/datasets/mapillary_v2.py) 查看 Mapillary Vistas 数据集配置文件 + 在此处 [V1.2](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/_base_/datasets/mapillary_v1.py) 和 [V2.0](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/_base_/datasets/mapillary_v2.py) 查看 Mapillary Vistas 数据集配置文件 diff --git a/docs/zh_cn/user_guides/3_inference.md b/docs/zh_cn/user_guides/3_inference.md index ab68bb47e6..0afcb4b05d 100644 --- a/docs/zh_cn/user_guides/3_inference.md +++ b/docs/zh_cn/user_guides/3_inference.md @@ -96,7 +96,7 @@ print(type(results[0])) - weights(str,可选)- 权重的路径。如果未指定,并且模型是元文件中的模型名称,则权重将从元文件加载。默认为 None。 - classes(list,可选)- 输入类别用于结果渲染,由于分割模型的预测结构是标签索引的分割图,`classes` 是一个相应的标签索引的类别列表。若 classes 没有定义,可视化工具将默认使用 `cityscapes` 的类别。默认为 None。 - palette(list,可选)- 输入调色盘用于结果渲染,它是对应分类的配色列表。若 palette 没有定义,可视化工具将默认使用 `cityscapes` 的调色盘。默认为 None。 -- dataset_name(str,可选)- [数据集名称或别名](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/utils/class_names.py#L302-L317),可视化工具将使用数据集的元信息,如类别和配色,但 `classes` 和 `palette` 具有更高的优先级。默认为 None。 +- dataset_name(str,可选)- [数据集名称或别名](https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/utils/class_names.py#L302-L317),可视化工具将使用数据集的元信息,如类别和配色,但 `classes` 和 `palette` 具有更高的优先级。默认为 None。 - device(str,可选)- 运行推理的设备。如果无,则会自动使用可用的设备。默认为 None。 - scope(str,可选)- 模型的作用域。默认为 'mmseg'。 diff --git a/mmseg/apis/mmseg_inferencer.py b/mmseg/apis/mmseg_inferencer.py index cb387b10b3..1c72285c56 100644 --- a/mmseg/apis/mmseg_inferencer.py +++ b/mmseg/apis/mmseg_inferencer.py @@ -30,7 +30,7 @@ class MMSegInferencer(BaseInferencer): Args: model (str, optional): Path to the config file or the model name - defined in metafile. Take the `mmseg metafile `_ + defined in metafile. Take the `mmseg metafile `_ as an example the `model` could be "fcn_r50-d8_4xb2-40k_cityscapes-512x1024", and the weights of model will be download automatically. If use config file, like @@ -48,7 +48,7 @@ class MMSegInferencer(BaseInferencer): a list of color palette responding to the classes. If palette is not defined, visualizer will take `cityscapes` palette by default. Defaults to None. - dataset_name (str, optional): `Dataset name or alias `_ + dataset_name (str, optional): `Dataset name or alias `_ visulizer will use the meta information of the dataset i.e. classes and palette, but the `classes` and `palette` have higher priority. Defaults to None. diff --git a/mmseg/visualization/local_visualizer.py b/mmseg/visualization/local_visualizer.py index d11ad79c81..504004dfcb 100644 --- a/mmseg/visualization/local_visualizer.py +++ b/mmseg/visualization/local_visualizer.py @@ -31,7 +31,7 @@ class SegLocalVisualizer(Visualizer): `cityscapes` classes by default. Defaults to None. palette (list, optional): Input palette for result rendering, which is a list of color palette responding to the classes. Defaults to None. - dataset_name (str, optional): `Dataset name or alias `_ + dataset_name (str, optional): `Dataset name or alias `_ visulizer will use the meta information of the dataset i.e. classes and palette, but the `classes` and `palette` have higher priority. Defaults to None. @@ -133,7 +133,7 @@ def set_dataset_meta(self, palette (list, optional): Input palette for result rendering, which is a list of color palette responding to the classes. Defaults to None. - dataset_name (str, optional): `Dataset name or alias `_ + dataset_name (str, optional): `Dataset name or alias `_ visulizer will use the meta information of the dataset i.e. classes and palette, but the `classes` and `palette` have higher priority. Defaults to None. diff --git a/projects/example_project/README.md b/projects/example_project/README.md index 4338b8acac..e4fd03cf4a 100644 --- a/projects/example_project/README.md +++ b/projects/example_project/README.md @@ -53,7 +53,7 @@ mim train mmsegmentation configs/fcn_dummy-r50-d8_4xb2-40k_cityscapes-512x1024.p mim test mmsegmentation configs/fcn_dummy-r50-d8_4xb2-40k_cityscapes-512x1024.py --work-dir work_dirs/dummy_resnet --checkpoint ${CHECKPOINT_PATH} ``` -> List the results as usually done in other model's README. \[Example\](https://github.com/open-mmlab/mmsegmentation/tree/dev-1.x/configs/fcn#results-and-models +> List the results as usually done in other model's README. \[Example\](https://github.com/open-mmlab/mmsegmentation/tree/main/configs/fcn#results-and-models > You should claim whether this is based on the pre-trained weights, which are converted from the official release; or it's a reproduced result obtained from retraining the model in this project | Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | config | download | @@ -113,11 +113,11 @@ Here is a checklist illustrating a usual development workflow of a successful pr - [ ] Type hints and docstrings -> Ideally *all* the methods should have [type hints](https://www.pythontutorial.net/python-basics/python-type-hints/) and [docstrings](https://google.github.io/styleguide/pyguide.html#381-docstrings). [Example](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/utils/io.py#L9) +> Ideally *all* the methods should have [type hints](https://www.pythontutorial.net/python-basics/python-type-hints/) and [docstrings](https://google.github.io/styleguide/pyguide.html#381-docstrings). [Example](https://github.com/open-mmlab/mmsegmentation/blob/main/mmseg/utils/io.py#L9) - [ ] Unit tests -> Unit tests for each module are required. [Example](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/tests/test_utils/test_io.py#L14) +> Unit tests for each module are required. [Example](https://github.com/open-mmlab/mmsegmentation/blob/main/tests/test_utils/test_io.py#L14) - [ ] Code polishing @@ -125,10 +125,10 @@ Here is a checklist illustrating a usual development workflow of a successful pr - [ ] Metafile.yml -> It will be parsed by MIM and Inferencer. [Example](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/fcn.yml) +> It will be parsed by MIM and Inferencer. [Example](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/fcn.yml) - [ ] Move your modules into the core package following the codebase's file hierarchy structure. -> In particular, you may have to refactor this README into a standard one. [Example](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/fcn/README.md) +> In particular, you may have to refactor this README into a standard one. [Example](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/fcn/README.md) - [ ] Refactor your modules into the core package following the codebase's file hierarchy structure. diff --git a/projects/faq.md b/projects/faq.md index 724c1cf6a5..dfda48ed09 100644 --- a/projects/faq.md +++ b/projects/faq.md @@ -1,6 +1,6 @@ Q1: Why set up `projects/` folder? -Implementing new models and features into OpenMMLab's algorithm libraries could be troublesome due to the rigorous requirements on code quality, which could hinder the fast iteration of SOTA models and might discourage our members from sharing their latest outcomes here. And that's why we have this `projects/` folder now, where some experimental features, frameworks and models are placed, only needed to satisfy the minimum requirement on the code quality, and can be used as standalone libraries. Users are welcome to use them if they [use MMSegmentation from source](https://mmsegmentation.readthedocs.io/en/dev-1.x/get_started.html#best-practices). +Implementing new models and features into OpenMMLab's algorithm libraries could be troublesome due to the rigorous requirements on code quality, which could hinder the fast iteration of SOTA models and might discourage our members from sharing their latest outcomes here. And that's why we have this `projects/` folder now, where some experimental features, frameworks and models are placed, only needed to satisfy the minimum requirement on the code quality, and can be used as standalone libraries. Users are welcome to use them if they [use MMSegmentation from source](https://mmsegmentation.readthedocs.io/en/main/get_started.html#best-practices). Q2: Why should there be a checklist for a project? diff --git a/projects/hssn/README.md b/projects/hssn/README.md index c2a74c69f9..9dcbf37de0 100644 --- a/projects/hssn/README.md +++ b/projects/hssn/README.md @@ -41,9 +41,9 @@ bash tools/dist_test.sh projects/hssn/configs/hssn/hieraseg_deeplabv3plus_r101-d ### Cityscapes -| Method | Backbone | Crop Size | mIoU | mIoU (ms+flip) | config | model | -| :--------: | :------: | :-------: | :---: | :------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------: | -| DeeplabV3+ | R-101-D8 | 512x1024 | 81.61 | 82.71 | [config](https://github.com/open-mmlab/mmsegmentation/tree/dev-1.x/projects/HieraSeg/configs/hieraseg/hieraseg_deeplabv3plus_r101-d8_4xb2-80l_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hieraseg/hieraseg_deeplabv3plus_r101-d8_4xb2-80k_cityscapes-512x1024_20230112_125023-bc59a3d1.pth) | +| Method | Backbone | Crop Size | mIoU | mIoU (ms+flip) | config | model | +| :--------: | :------: | :-------: | :---: | :------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------: | +| DeeplabV3+ | R-101-D8 | 512x1024 | 81.61 | 82.71 | [config](https://github.com/open-mmlab/mmsegmentation/tree/main/projects/HieraSeg/configs/hieraseg/hieraseg_deeplabv3plus_r101-d8_4xb2-80l_cityscapes-512x1024.py) | [model](https://download.openmmlab.com/mmsegmentation/v0.5/hieraseg/hieraseg_deeplabv3plus_r101-d8_4xb2-80k_cityscapes-512x1024_20230112_125023-bc59a3d1.pth) | diff --git a/projects/isnet/README.md b/projects/isnet/README.md index 3a3172a9d9..0a79ad6a4f 100644 --- a/projects/isnet/README.md +++ b/projects/isnet/README.md @@ -96,11 +96,11 @@ A project does not necessarily have to be finished in a single PR, but it's esse - [ ] Type hints and docstrings - + - [ ] Unit tests - + - [ ] Code polishing @@ -108,10 +108,10 @@ A project does not necessarily have to be finished in a single PR, but it's esse - [ ] Metafile.yml - + - [ ] Move your modules into the core package following the codebase's file hierarchy structure. - + - [ ] Refactor your modules into the core package following the codebase's file hierarchy structure. diff --git a/projects/mapillary_dataset/README.md b/projects/mapillary_dataset/README.md index cdc61d53a9..44a1e33ef9 100644 --- a/projects/mapillary_dataset/README.md +++ b/projects/mapillary_dataset/README.md @@ -10,7 +10,7 @@ This project implements **`Mapillary Vistas Dataset`** ### Dataset preparing -Preparing `Mapillary Vistas Dataset` dataset following [Mapillary Vistas Dataset Preparing Guide](https://github.com/open-mmlab/mmsegmentation/tree/dev-1.x/projects/mapillary_dataset/docs/en/user_guides/2_dataset_prepare.md) +Preparing `Mapillary Vistas Dataset` dataset following [Mapillary Vistas Dataset Preparing Guide](https://github.com/open-mmlab/mmsegmentation/tree/main/projects/mapillary_dataset/docs/en/user_guides/2_dataset_prepare.md) ```none mmsegmentation diff --git a/projects/mapillary_dataset/docs/en/user_guides/2_dataset_prepare.md b/projects/mapillary_dataset/docs/en/user_guides/2_dataset_prepare.md index fa07454330..c5cbc0f9b8 100644 --- a/projects/mapillary_dataset/docs/en/user_guides/2_dataset_prepare.md +++ b/projects/mapillary_dataset/docs/en/user_guides/2_dataset_prepare.md @@ -47,7 +47,7 @@ ``` - You could set Datasets version with `MapillaryDataset_v1` and `MapillaryDataset_v2` in your configs. - View the Mapillary Vistas Datasets config file here [V1.2](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/_base_/datasets/mapillary_v1.py) and [V2.0](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/configs/_base_/datasets/mapillary_v2.py) + View the Mapillary Vistas Datasets config file here [V1.2](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/_base_/datasets/mapillary_v1.py) and [V2.0](https://github.com/open-mmlab/mmsegmentation/blob/main/configs/_base_/datasets/mapillary_v2.py) - **View datasets labels index and palette**