This commit is contained in:
hu-jingsong 2021-05-18 10:38:35 +08:00
parent 4b242fb202
commit b4043d225e
22 changed files with 8117 additions and 0 deletions

View File

@ -0,0 +1,140 @@
# Semi-Supervised Domain Adaptation based on Dual-level Domain Mixing for Semantic Segmentation (DDM)
This repository is an official implementation of the paper "Semi-Supervised Domain Adaptation based on Dual-level Domain Mixing for Semantic Segmentation" from CVPR 2021.
Data-driven based approaches, in spite of great success in many tasks, have poor generalization when applied to unseen image domains, and require expensive cost of annotation especially for dense pixel prediction tasks such as semantic segmentation. We focus on a more practical setting of semi-supervised domain adaptation (SSDA) where both a small set of labeled target data and large amounts of labeled source data are available. We propose a novel framework based on dual-level domain mixing, named DDM, to address the task of SSDA. The proposed framework consists of three stages. First, two kinds of data mixing methods are proposed to reduce domain gap in both region-level and sample-level respectively. We can obtain two complementary domain-mixed teachers based on dual-level mixed data from holistic and partial views respectively. Then, a student model is learned by distilling knowledge from these two teachers. Finally, pseudo labels of unlabeled data are generated in a self-training manner for another few rounds of teachers training. Extensive experimental results have demonstrated the effectiveness of our proposed framework on synthetic-to-real semantic segmentation benchmarks.
If you find our work useful in your research or publication, please cite our work:
[1] Shuaijun Chen, Xu Jia, Jianzhong He, Yongjie Shi and Jianzhuang Liu. **"Semi-supervised Domain Adaptation based on Dual-level Domain Mixing for Semantic Segmentation"**. **CVPR 2021**. [[arXiv](https://arxiv.org/pdf/2103.04705.pdf)]
@inproceedings{chen2021semi,
title={Semi-supervised Domain Adaptation based on Dual-level Domain Mixing for Semantic Segmentation},
author={Chen, Shuaijun and Jia, Xu and He, Jianzhong and Shi, Yongjie and Liu, Jianzhuang},
booktitle={CVPR},
year={2021}
}
## Model architecture
### The overall network architecture and algorithm pseudo code of DDM is shown as below
![architecture](./images/DDM_arch.png)
![pseudo code](./images/DDM_pseudo.png)
## Dataset
The benchmark datasets can be downloaded as follows:
The real dataset:
[Cityscapes](https://www.cityscapes-dataset.com/),
The synthetic dataset:
[GTA5](https://download.visinf.tu-darmstadt.de/data/from_games/).
## Requirements
### Hardware (Ascend)
> Prepare hardware environment with Ascend.
### Framework
> [MindSpore](https://www.mindspore.cn/install/en)
### For more information, please check the resources below
[MindSpore Tutorials](https://www.mindspore.cn/tutorial/training/en/master/index.html)
[MindSpore Python API](https://www.mindspore.cn/doc/api_python/en/master/index.html)
## Script Description
> This is the inference script of our framework, you can following steps to finish the test of different settings of DDM via the corresponding pretrained models.
### Scripts and Sample Code
```bash
DDM/
├── config.py # Hyper-parameters
├── dataset # Dataloader folder
│   ├── base_dataset.py # basic dataset setting
│   ├── cityscapes_list # folder contains image list and class information
│   │   ├── info_16.json # 16 class information
│   │   ├── info.json # 19 class information
│   │   ├── label.txt # the label list of val dataset
│   │   ├── train_round0.txt # train images for round0
│   │   ├── train.txt # train images
│   │   └── val.txt # val image list of val dataset
│   ├── cityscapes.py # dataloader of cityscapes
│   └── __init__.py # data init
├── net
│   ├── deeplabv2_mindspore.py # architecture of deeplabv2
│   └── __init__.py # net init
├── eval.py # the test script
└── utils
├── func.py # some functions
├── __init__.py # utils init
└── serialization.py # yaml and json files processing script
```
### Script Parameter
> For details about hyperparameters, see config.py.
## Training Process
### Sample-level teacher
```markdown
To be done
```
### Region-level teacher
```markdown
To be done
```
### Multi-teacher distillation
```markdown
To be done
```
### Self-training
```markdown
To be done
```
## Evaluation
### Evaluation Process
> Inference:
```bash
python eval.py --data_path [data_path] --pretrained [model_weight]
# For example: For 100 labeled target images on GTA5->Cityscapes:
python eval.py --data_path ./data/cityscapes/ --pretrained ./weights/100/best_model.ckpt
```
### Evaluation Result
The result are evaluated by the value of mIoU.
## Performance
### Inference Performance
The Results on all numbers of labeled target images on GTA5->Cityscapes are listed as below.
| Num | 100 | 200 | 500 | 1000 | 2975 |
| ----- | ----- | ----- | ----- | ----- | ----- |
| DDM | 61.15 | 60.46 | 64.25 | 66.55 | 69.77 |
## ModeZoo Homepage
Please check the official [homepage](https://gitee.com/mindspore/mindspore/tree/master/model_zoo).

View File

@ -0,0 +1,198 @@
# Copyright 2021 Huawei Technologies Co., Ltd
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ============================================================================
"""Hyper-parameters."""
import numpy as np
from easydict import EasyDict
from utils.serialization import yaml_load
cfg = EasyDict()
# COMMON CONFIGS
# source domain
cfg.SOURCE = 'GTA'
# target domain
cfg.TARGET = 'Cityscapes'
# Number of workers for dataloading
cfg.NUM_WORKERS = 4
# List of training images
cfg.DATA_LIST_SOURCE = str('dataset/gta5_list/{}.txt')
cfg.DATA_LIST_TARGET = str('dataset/cityscapes_list/{}.txt')
cfg.PSEUDO_LIST = str('dataset/cityscapes_list/{}.txt')
# Directories
cfg.DATA_DIRECTORY_SOURCE = str('/cache/datasets/domain_adaptation/GTAv')
cfg.DATA_DIRECTORY_TARGET = str('/cache/datasets/domain_adaptation/cityscapes')
cfg.DATA_DIRECTORY_PSEUDO = str('/cache/datasets/domain_adaptation/cityscapes')
cfg.DATA_REMOTE_DIRECTORY_SOURCE = str('chensj/datasets/domain_adaptation/GTAv')
cfg.DATA_REMOTE_DIRECTORY_TARGET = str('chensj/datasets/domain_adaptation/cityscapes')
# Number of object classes
cfg.NUM_CLASSES = 19
# Exp dirs
#cfg.EXP_NAME = ''
cfg.EXP_ROOT = './experiments/test'
cfg.EXP_REMOTE_ROOT = 'chensj/experiments/domain_adaptation/advent/experimet_8p'
#cfg.EXP_ROOT_SNAPSHOT = osp.join(cfg.EXP_ROOT, 'snapshots')
#cfg.EXP_ROOT_LOGS = osp.join(cfg.EXP_ROOT, 'logs')
# CUDA
cfg.GPU_ID = '0,1,2,3,4,5,6,7'
# TRAIN CONFIGS
cfg.TRAIN = EasyDict()
cfg.TRAIN.SET_SOURCE = 'all'
cfg.TRAIN.SET_TARGET = 'train'
cfg.TRAIN.BATCH_SIZE_SOURCE = 1
cfg.TRAIN.BATCH_SIZE_TARGET = 1
cfg.TRAIN.IGNORE_LABEL = 255
cfg.TRAIN.INPUT_SIZE_SOURCE = (1280, 720)
cfg.TRAIN.INPUT_SIZE_TARGET = (1024, 512)
# Class info
cfg.TRAIN.INFO_SOURCE = ''
cfg.TRAIN.INFO_TARGET = str('dataset/cityscapes_list/info.json')
# Segmentation network params
cfg.TRAIN.MODEL = 'DeepLabv2'
cfg.TRAIN.MULTI_LEVEL = True
cfg.TRAIN.RESTORE_FROM = ''
cfg.TRAIN.REMOTE_RESTORE_FROM = ''
cfg.TRAIN.IMG_MEAN = np.array((104.00698793, 116.66876762, 122.67891434), dtype=np.float32)
cfg.TRAIN.LEARNING_RATE = 2.5e-4
cfg.TRAIN.MOMENTUM = 0.9
cfg.TRAIN.WEIGHT_DECAY = 0.0005
cfg.TRAIN.POWER = 0.9
cfg.TRAIN.LAMBDA_SEG_MAIN = 1.0
cfg.TRAIN.LAMBDA_SEG_AUX = 0.1 # weight of conv4 prediction. Used in multi-level setting.
# BN settings
cfg.TRAIN.FREEZE_BN = False
cfg.TRAIN.FREEZE_BN_AFFINE = False
# Domain adaptation
cfg.TRAIN.DA_METHOD = 'AdvEnt'
# Adversarial training params
cfg.TRAIN.GAN_MODE = 'vanilla'
cfg.TRAIN.LEARNING_RATE_D = 1e-4
cfg.TRAIN.LAMBDA_ADV_MAIN = 0.001
cfg.TRAIN.LAMBDA_ADV_AUX = 0.0002
# MinEnt params
cfg.TRAIN.LAMBDA_ENT_MAIN = 0.001
cfg.TRAIN.LAMBDA_ENT_AUX = 0.0002
# Semi supervised learning params
cfg.TRAIN.USE_SEMI = False
cfg.TRAIN.NUM_SEMI = 100
cfg.TRAIN.DEL_XL = False
# loss weight of self KL Loss
cfg.TRAIN.self_KL = False
cfg.TRAIN.LAMBDA_SELF_KL = 1
cfg.TRAIN.Tau = 0.01
# setting for KD
cfg.TRAIN.KD = False
cfg.TRAIN.OnLine_KD = False
cfg.TRAIN.REMOTE_KD_RESTORE_FROM_2 = ''
cfg.TRAIN.KD_RESTORE_FROM_2 = ''
cfg.TRAIN.REMOTE_KD_RESTORE_FROM = ''
cfg.TRAIN.KD_RESTORE_FROM = ''
cfg.TRAIN.LAMBDA_KL = 0.5
cfg.TRAIN.KL_T = 10
# Other params
cfg.TRAIN.PRINT_FREQ = 100
cfg.TRAIN.MAX_ITERS = 250000
cfg.TRAIN.EARLY_STOP = 120000
cfg.TRAIN.SAVE_PRED_EVERY = 2000
cfg.TRAIN.SOURCE_TRANS = False
cfg.TRAIN.SNAPSHOT_DIR = ''
cfg.TRAIN.RANDOM_SEED = 1234
cfg.TRAIN.TENSORBOARD_LOGDIR = ''
cfg.TRAIN.TENSORBOARD_VIZRATE = 100
# TEST CONFIGS
cfg.TEST = EasyDict()
cfg.TEST.DATA = 'Cityscapes'
cfg.TEST.MODE = 'single' # {'single', 'best'}
# model
cfg.TEST.MODEL = ('DeepLabv2',)
cfg.TEST.MODEL_WEIGHT = (1.0,)
cfg.TEST.MULTI_LEVEL = (True,)
cfg.TEST.IMG_MEAN = np.array((104.00698793, 116.66876762, 122.67891434), dtype=np.float32)
cfg.TEST.RESTORE_FROM = ('',)
cfg.TEST.SNAPSHOT_DIR = ('',) # used in 'best' mode
cfg.TEST.SNAPSHOT_STEP = 2000 # used in 'best' mode
cfg.TEST.SNAPSHOT_MAXITER = 120000 # used in 'best' mode
# Test sets
cfg.TEST.SET = 'val'
cfg.TEST.BATCH_SIZE = 1
cfg.TEST.INPUT_SIZE = (1024, 512)
cfg.TEST.OUTPUT_SIZE = (2048, 1024)
cfg.TEST.DATA_DIRECTORY = str('/home/wangcong/hujingsong/deeplabv2/dataset/data/cityscapes')
cfg.TEST.DATA_LIST = str('dataset/cityscapes_list/{}.txt')
cfg.TEST.INFO = str('dataset/cityscapes_list/info.json')
cfg.TEST.WAIT_MODEL = True
def _merge_a_into_b(a, b):
"""Merge config dictionary a into config dictionary b, clobbering the
options in b whenever they are also specified in a.
"""
#if type(a) is not EasyDict:
if not isinstance(a, EasyDict):
return
for k, v in a.items():
# a must specify keys that are in b
# if not b.has_key(k):
if k not in b:
raise KeyError(f'{k} is not a valid config key')
# the types must match, too
old_type = type(b[k])
if old_type is not type(v):
if isinstance(b[k], np.ndarray):
v = np.array(v, dtype=b[k].dtype)
else:
raise ValueError(f'Type mismatch ({type(b[k])} vs. {type(v)}) '
f'for config key: {k}')
# recursively merge dicts
if isinstance(v, EasyDict):
try:
_merge_a_into_b(a[k], b[k])
except Exception:
print(f'Error under config key: {k}')
raise
else:
b[k] = v
def cfg_from_file(filename):
"""Load a config file and merge it into the default options.
"""
yaml_cfg = EasyDict(yaml_load(filename))
_merge_a_into_b(yaml_cfg, cfg)

View File

@ -0,0 +1,39 @@
# Copyright 2021 Huawei Technologies Co., Ltd
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ============================================================================
"""Create dataset"""
from .cityscapes import CityscapesDataSet
__img_factory = {
'Cityscapes': CityscapesDataSet,
}
__vid_factory = {
'Cityscapes': CityscapesDataSet,
}
def get_names():
return list(__img_factory.keys()) + list(__vid_factory.keys())
def init_img_dataset(name, **kwargs):
if name not in __img_factory.keys():
raise KeyError("Invalid dataset, got '{}', but expected to be one of {}".format(name, __img_factory.keys()))
return __img_factory[name](**kwargs)
def init_vid_dataset(name, **kwargs):
if name not in __vid_factory.keys():
raise KeyError("Invalid dataset, got '{}', but expected to be one of {}".format(name, __vid_factory.keys()))
return __vid_factory[name](**kwargs)

View File

@ -0,0 +1,119 @@
# Copyright 2021 Huawei Technologies Co., Ltd
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ============================================================================
"""basic dataset setting."""
from pathlib import Path
import random
import numpy as np
from PIL import Image
from skimage import color
TARGET_IMGS = None
class BaseDataset():
"""basic dataset setting"""
def __init__(self, root, list_path, set_, max_iters, image_size,
labels_size, mean, semi=False, num_semi=100, trans_img=False, del_xl=False):
self.root = Path(root)
self.set_name = set_
self.list_path = list_path.format(self.set_name)
if labels_size is None:
self.labels_size = self.image_size
else:
self.labels_size = labels_size
self.mean = mean
with open(self.list_path) as f:
self.img_ids = [i_id.strip() for i_id in f]
repeat_num, repeat_num_semi = 1, 1
self.files = []
for name in self.img_ids:
img_file, label_file = self.get_metadata(name)
self.files.append((img_file, label_file, name))
if semi:
print("Semi-supervised setting is used, the number of images " \
"for supervised training is {}".format(num_semi))
self.semi_files_sel = random.sample(self.files, num_semi)
if del_xl:
for i in self.semi_files_sel:
self.files.remove(i)
if max_iters is not None:
repeat_num_semi = int(np.ceil(float(max_iters) / num_semi))
self.semi_files = self.semi_files_sel * repeat_num_semi
else:
self.semi_files = None
if max_iters is not None:
repeat_num = int(np.ceil(float(max_iters) / len(self.files)))
self.files = self.files * repeat_num
# for trans_img setting
self.trans_img = trans_img
if trans_img:
global TARGET_IMGS
print('Get the target images list for data trans')
with open('dataset/cityscapes_list/train.txt', 'r') as f:
TARGET_IMGS = [f'{root}/../cityscapes/leftImg8bit/train/'+x.strip() for x in f]
def get_metadata(self, name):
raise NotImplementedError
def __len__(self):
return len(self.files)
def preprocess(self, image):
# change to BGR
image = image[:, :, ::-1]
image -= self.mean
return image.transpose((2, 0, 1))
def get_image(self, file):
return _load_img(file, self.image_size, Image.BICUBIC, rgb=True, trans_img=self.trans_img)
def get_labels(self, file):
return _load_img(file, self.labels_size, Image.NEAREST, rgb=False, trans_img=False)
def _load_img(file, size, interpolation, rgb, trans_img=False):
"""load images"""
img = Image.open(file)
if rgb:
# translate to the target style
if trans_img:
img = np.array(img)
t_img = np.array(Image.open(random.choices(TARGET_IMGS)[0]))
lab = color.rgb2lab(img)
t_lab = color.rgb2lab(t_img)
for i in range(3):
lab[:, :, i] = (lab[:, :, i] - lab[:, :, i].mean()) / lab[:, :, i].std() * t_lab[:, :, i].std()\
+ t_lab[:, :, i].mean()
img = color.lab2rgb(lab) * 255
img = np.clip(img, 0, 255)
img = Image.fromarray(img.astype(np.uint8))
# end
img = img.convert('RGB')
img = img.resize(size, interpolation)
return np.asarray(img, np.float32)

View File

@ -0,0 +1,79 @@
# Copyright 2021 Huawei Technologies Co., Ltd
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ============================================================================
"""dataloader of cityscapes."""
import random
import numpy as np
from utils.serialization import json_load
from .base_dataset import BaseDataset
DEFAULT_INFO_PATH_19 = 'dataset/cityscapes_list/info.json'
DEFAULT_INFO_PATH_16 = 'dataset/cityscapes_list/info_16.json'
class CityscapesDataSet(BaseDataset):
"""dataloader of cityscapes"""
def __init__(self, root, list_path, num_classes=19, set_name="val",
max_iters=None,
crop_size=(321, 321), mean=(128, 128, 128),
load_labels=True, semi=False, num_semi=100,
info_path=DEFAULT_INFO_PATH_19, labels_size=None, trans_img=False, del_xl=False):
super().__init__(root, list_path, set_name, max_iters, crop_size, labels_size, mean, semi=semi,
num_semi=num_semi, trans_img=trans_img, del_xl=del_xl)
self.semi = semi
self.load_labels = load_labels
if num_classes == 19:
self.info = json_load(DEFAULT_INFO_PATH_19)
elif num_classes == 16:
self.info = json_load(DEFAULT_INFO_PATH_16)
self.class_names = np.array(self.info['label'], dtype=np.str)
self.mapping = np.array(self.info['label2train'], dtype=np.int)
self.map_vector = np.zeros((self.mapping.shape[0],), dtype=np.int64)
for source_label, target_label in self.mapping:
self.map_vector[source_label] = target_label
def get_metadata(self, name):
img_file = self.root / 'leftImg8bit' / self.set_name / name
label_name = name.replace("leftImg8bit", "gtFine_labelIds")
label_file = self.root / 'gtFine' / self.set_name / label_name
return img_file, label_file
def map_labels(self, input_):
return self.map_vector[input_.astype(np.int64, copy=False)]
def __getitem__(self, index):
img_file, label_file, _ = self.files[index]
label = self.get_labels(label_file)
label = self.map_labels(label).copy()
image = self.get_image(img_file)
image = self.preprocess(image)
# for semi supervised setting
if self.semi:
semi_index = random.randint(0, len(self.semi_files)-1)
semi_img_file, semi_label_file, _ = self.semi_files[semi_index]
semi_label = self.get_labels(semi_label_file)
semi_label = self.map_labels(semi_label).copy()
semi_image = self.get_image(semi_img_file)
semi_image = self.preprocess(semi_image)
semi_image = semi_image.copy()
else:
semi_image, semi_label = [], []
return image.copy(), label

View File

@ -0,0 +1,88 @@
{
"classes":19,
"label2train":[
[0, 255],
[1, 255],
[2, 255],
[3, 255],
[4, 255],
[5, 255],
[6, 255],
[7, 0],
[8, 1],
[9, 255],
[10, 255],
[11, 2],
[12, 3],
[13, 4],
[14, 255],
[15, 255],
[16, 255],
[17, 5],
[18, 255],
[19, 6],
[20, 7],
[21, 8],
[22, 9],
[23, 10],
[24, 11],
[25, 12],
[26, 13],
[27, 14],
[28, 15],
[29, 255],
[30, 255],
[31, 16],
[32, 17],
[33, 18],
[-1, 255]],
"label":[
"road",
"sidewalk",
"building",
"wall",
"fence",
"pole",
"light",
"sign",
"vegetation",
"terrain",
"sky",
"person",
"rider",
"car",
"truck",
"bus",
"train",
"motocycle",
"bicycle"],
"palette":[
[128,64,128],
[244,35,232],
[70,70,70],
[102,102,156],
[190,153,153],
[153,153,153],
[250,170,30],
[220,220,0],
[107,142,35],
[152,251,152],
[70,130,180],
[220,20,60],
[255,0,0],
[0,0,142],
[0,0,70],
[0,60,100],
[0,80,100],
[0,0,230],
[119,11,32],
[0,0,0]],
"mean":[
73.158359210711552,
82.908917542625858,
72.392398761941593],
"std":[
47.675755341814678,
48.494214368814916,
47.736546325441594]
}

View File

@ -0,0 +1,82 @@
{
"classes":16,
"label2train":[
[0, 255],
[1, 255],
[2, 255],
[3, 255],
[4, 255],
[5, 255],
[6, 255],
[7, 0],
[8, 1],
[9, 255],
[10, 255],
[11, 2],
[12, 3],
[13, 4],
[14, 255],
[15, 255],
[16, 255],
[17, 5],
[18, 255],
[19, 6],
[20, 7],
[21, 8],
[22, 255],
[23, 9],
[24, 10],
[25, 11],
[26, 12],
[27, 255],
[28, 13],
[29, 255],
[30, 255],
[31, 255],
[32, 14],
[33, 15],
[-1, 255]],
"label":[
"road",
"sidewalk",
"building",
"wall",
"fence",
"pole",
"light",
"sign",
"vegetation",
"sky",
"person",
"rider",
"car",
"bus",
"motocycle",
"bicycle"],
"palette":[
[128,64,128],
[244,35,232],
[70,70,70],
[102,102,156],
[190,153,153],
[153,153,153],
[250,170,30],
[220,220,0],
[107,142,35],
[70,130,180],
[220,20,60],
[255,0,0],
[0,0,142],
[0,60,100],
[0,0,230],
[119,11,32],
[0,0,0]],
"mean":[
73.158359210711552,
82.908917542625858,
72.392398761941593],
"std":[
47.675755341814678,
48.494214368814916,
47.736546325441594]
}

View File

@ -0,0 +1,500 @@
frankfurt/frankfurt_000001_007973_gtFine_labelIds.png
frankfurt/frankfurt_000001_025921_gtFine_labelIds.png
frankfurt/frankfurt_000001_062016_gtFine_labelIds.png
frankfurt/frankfurt_000001_049078_gtFine_labelIds.png
frankfurt/frankfurt_000000_009561_gtFine_labelIds.png
frankfurt/frankfurt_000001_013710_gtFine_labelIds.png
frankfurt/frankfurt_000001_041664_gtFine_labelIds.png
frankfurt/frankfurt_000000_013240_gtFine_labelIds.png
frankfurt/frankfurt_000001_044787_gtFine_labelIds.png
frankfurt/frankfurt_000001_015328_gtFine_labelIds.png
frankfurt/frankfurt_000001_073243_gtFine_labelIds.png
frankfurt/frankfurt_000001_034816_gtFine_labelIds.png
frankfurt/frankfurt_000001_041074_gtFine_labelIds.png
frankfurt/frankfurt_000001_005898_gtFine_labelIds.png
frankfurt/frankfurt_000000_022254_gtFine_labelIds.png
frankfurt/frankfurt_000001_044658_gtFine_labelIds.png
frankfurt/frankfurt_000001_009504_gtFine_labelIds.png
frankfurt/frankfurt_000001_024927_gtFine_labelIds.png
frankfurt/frankfurt_000001_017842_gtFine_labelIds.png
frankfurt/frankfurt_000001_068208_gtFine_labelIds.png
frankfurt/frankfurt_000001_013016_gtFine_labelIds.png
frankfurt/frankfurt_000001_010156_gtFine_labelIds.png
frankfurt/frankfurt_000000_002963_gtFine_labelIds.png
frankfurt/frankfurt_000001_020693_gtFine_labelIds.png
frankfurt/frankfurt_000001_078803_gtFine_labelIds.png
frankfurt/frankfurt_000001_025713_gtFine_labelIds.png
frankfurt/frankfurt_000001_007285_gtFine_labelIds.png
frankfurt/frankfurt_000001_070099_gtFine_labelIds.png
frankfurt/frankfurt_000000_009291_gtFine_labelIds.png
frankfurt/frankfurt_000000_019607_gtFine_labelIds.png
frankfurt/frankfurt_000001_068063_gtFine_labelIds.png
frankfurt/frankfurt_000000_003920_gtFine_labelIds.png
frankfurt/frankfurt_000001_077233_gtFine_labelIds.png
frankfurt/frankfurt_000001_029086_gtFine_labelIds.png
frankfurt/frankfurt_000001_060545_gtFine_labelIds.png
frankfurt/frankfurt_000001_001464_gtFine_labelIds.png
frankfurt/frankfurt_000001_028590_gtFine_labelIds.png
frankfurt/frankfurt_000001_016462_gtFine_labelIds.png
frankfurt/frankfurt_000001_060422_gtFine_labelIds.png
frankfurt/frankfurt_000001_009058_gtFine_labelIds.png
frankfurt/frankfurt_000001_080830_gtFine_labelIds.png
frankfurt/frankfurt_000001_012870_gtFine_labelIds.png
frankfurt/frankfurt_000001_077434_gtFine_labelIds.png
frankfurt/frankfurt_000001_033655_gtFine_labelIds.png
frankfurt/frankfurt_000001_051516_gtFine_labelIds.png
frankfurt/frankfurt_000001_044413_gtFine_labelIds.png
frankfurt/frankfurt_000001_055172_gtFine_labelIds.png
frankfurt/frankfurt_000001_040575_gtFine_labelIds.png
frankfurt/frankfurt_000000_020215_gtFine_labelIds.png
frankfurt/frankfurt_000000_017228_gtFine_labelIds.png
frankfurt/frankfurt_000001_041354_gtFine_labelIds.png
frankfurt/frankfurt_000000_008206_gtFine_labelIds.png
frankfurt/frankfurt_000001_043564_gtFine_labelIds.png
frankfurt/frankfurt_000001_032711_gtFine_labelIds.png
frankfurt/frankfurt_000001_064130_gtFine_labelIds.png
frankfurt/frankfurt_000001_053102_gtFine_labelIds.png
frankfurt/frankfurt_000001_082087_gtFine_labelIds.png
frankfurt/frankfurt_000001_057478_gtFine_labelIds.png
frankfurt/frankfurt_000001_007407_gtFine_labelIds.png
frankfurt/frankfurt_000001_008200_gtFine_labelIds.png
frankfurt/frankfurt_000001_038844_gtFine_labelIds.png
frankfurt/frankfurt_000001_016029_gtFine_labelIds.png
frankfurt/frankfurt_000001_058176_gtFine_labelIds.png
frankfurt/frankfurt_000001_057181_gtFine_labelIds.png
frankfurt/frankfurt_000001_039895_gtFine_labelIds.png
frankfurt/frankfurt_000000_000294_gtFine_labelIds.png
frankfurt/frankfurt_000001_055062_gtFine_labelIds.png
frankfurt/frankfurt_000001_083029_gtFine_labelIds.png
frankfurt/frankfurt_000001_010444_gtFine_labelIds.png
frankfurt/frankfurt_000001_041517_gtFine_labelIds.png
frankfurt/frankfurt_000001_069633_gtFine_labelIds.png
frankfurt/frankfurt_000001_020287_gtFine_labelIds.png
frankfurt/frankfurt_000001_012038_gtFine_labelIds.png
frankfurt/frankfurt_000001_046504_gtFine_labelIds.png
frankfurt/frankfurt_000001_032556_gtFine_labelIds.png
frankfurt/frankfurt_000000_001751_gtFine_labelIds.png
frankfurt/frankfurt_000001_000538_gtFine_labelIds.png
frankfurt/frankfurt_000001_083852_gtFine_labelIds.png
frankfurt/frankfurt_000001_077092_gtFine_labelIds.png
frankfurt/frankfurt_000001_017101_gtFine_labelIds.png
frankfurt/frankfurt_000001_044525_gtFine_labelIds.png
frankfurt/frankfurt_000001_005703_gtFine_labelIds.png
frankfurt/frankfurt_000001_080391_gtFine_labelIds.png
frankfurt/frankfurt_000001_038418_gtFine_labelIds.png
frankfurt/frankfurt_000001_066832_gtFine_labelIds.png
frankfurt/frankfurt_000000_003357_gtFine_labelIds.png
frankfurt/frankfurt_000000_020880_gtFine_labelIds.png
frankfurt/frankfurt_000001_062396_gtFine_labelIds.png
frankfurt/frankfurt_000001_046272_gtFine_labelIds.png
frankfurt/frankfurt_000001_062509_gtFine_labelIds.png
frankfurt/frankfurt_000001_054415_gtFine_labelIds.png
frankfurt/frankfurt_000001_021406_gtFine_labelIds.png
frankfurt/frankfurt_000001_030310_gtFine_labelIds.png
frankfurt/frankfurt_000000_014480_gtFine_labelIds.png
frankfurt/frankfurt_000001_005410_gtFine_labelIds.png
frankfurt/frankfurt_000000_022797_gtFine_labelIds.png
frankfurt/frankfurt_000001_035144_gtFine_labelIds.png
frankfurt/frankfurt_000001_014565_gtFine_labelIds.png
frankfurt/frankfurt_000001_065850_gtFine_labelIds.png
frankfurt/frankfurt_000000_000576_gtFine_labelIds.png
frankfurt/frankfurt_000001_065617_gtFine_labelIds.png
frankfurt/frankfurt_000000_005543_gtFine_labelIds.png
frankfurt/frankfurt_000001_055709_gtFine_labelIds.png
frankfurt/frankfurt_000001_027325_gtFine_labelIds.png
frankfurt/frankfurt_000001_011835_gtFine_labelIds.png
frankfurt/frankfurt_000001_046779_gtFine_labelIds.png
frankfurt/frankfurt_000001_064305_gtFine_labelIds.png
frankfurt/frankfurt_000001_012738_gtFine_labelIds.png
frankfurt/frankfurt_000001_048355_gtFine_labelIds.png
frankfurt/frankfurt_000001_019969_gtFine_labelIds.png
frankfurt/frankfurt_000001_080091_gtFine_labelIds.png
frankfurt/frankfurt_000000_011007_gtFine_labelIds.png
frankfurt/frankfurt_000000_015676_gtFine_labelIds.png
frankfurt/frankfurt_000001_044227_gtFine_labelIds.png
frankfurt/frankfurt_000001_055387_gtFine_labelIds.png
frankfurt/frankfurt_000001_038245_gtFine_labelIds.png
frankfurt/frankfurt_000001_059642_gtFine_labelIds.png
frankfurt/frankfurt_000001_030669_gtFine_labelIds.png
frankfurt/frankfurt_000001_068772_gtFine_labelIds.png
frankfurt/frankfurt_000001_079206_gtFine_labelIds.png
frankfurt/frankfurt_000001_055306_gtFine_labelIds.png
frankfurt/frankfurt_000001_012699_gtFine_labelIds.png
frankfurt/frankfurt_000001_042384_gtFine_labelIds.png
frankfurt/frankfurt_000001_054077_gtFine_labelIds.png
frankfurt/frankfurt_000001_010830_gtFine_labelIds.png
frankfurt/frankfurt_000001_052120_gtFine_labelIds.png
frankfurt/frankfurt_000001_032018_gtFine_labelIds.png
frankfurt/frankfurt_000001_051737_gtFine_labelIds.png
frankfurt/frankfurt_000001_028335_gtFine_labelIds.png
frankfurt/frankfurt_000001_049770_gtFine_labelIds.png
frankfurt/frankfurt_000001_054884_gtFine_labelIds.png
frankfurt/frankfurt_000001_019698_gtFine_labelIds.png
frankfurt/frankfurt_000000_011461_gtFine_labelIds.png
frankfurt/frankfurt_000000_001016_gtFine_labelIds.png
frankfurt/frankfurt_000001_062250_gtFine_labelIds.png
frankfurt/frankfurt_000001_004736_gtFine_labelIds.png
frankfurt/frankfurt_000001_068682_gtFine_labelIds.png
frankfurt/frankfurt_000000_006589_gtFine_labelIds.png
frankfurt/frankfurt_000000_011810_gtFine_labelIds.png
frankfurt/frankfurt_000001_066574_gtFine_labelIds.png
frankfurt/frankfurt_000001_048654_gtFine_labelIds.png
frankfurt/frankfurt_000001_049209_gtFine_labelIds.png
frankfurt/frankfurt_000001_042098_gtFine_labelIds.png
frankfurt/frankfurt_000001_031416_gtFine_labelIds.png
frankfurt/frankfurt_000000_009969_gtFine_labelIds.png
frankfurt/frankfurt_000001_038645_gtFine_labelIds.png
frankfurt/frankfurt_000001_020046_gtFine_labelIds.png
frankfurt/frankfurt_000001_054219_gtFine_labelIds.png
frankfurt/frankfurt_000001_002759_gtFine_labelIds.png
frankfurt/frankfurt_000001_066438_gtFine_labelIds.png
frankfurt/frankfurt_000000_020321_gtFine_labelIds.png
frankfurt/frankfurt_000001_002646_gtFine_labelIds.png
frankfurt/frankfurt_000001_046126_gtFine_labelIds.png
frankfurt/frankfurt_000000_002196_gtFine_labelIds.png
frankfurt/frankfurt_000001_057954_gtFine_labelIds.png
frankfurt/frankfurt_000001_011715_gtFine_labelIds.png
frankfurt/frankfurt_000000_021879_gtFine_labelIds.png
frankfurt/frankfurt_000001_082466_gtFine_labelIds.png
frankfurt/frankfurt_000000_003025_gtFine_labelIds.png
frankfurt/frankfurt_000001_023369_gtFine_labelIds.png
frankfurt/frankfurt_000001_061682_gtFine_labelIds.png
frankfurt/frankfurt_000001_017459_gtFine_labelIds.png
frankfurt/frankfurt_000001_059789_gtFine_labelIds.png
frankfurt/frankfurt_000001_073464_gtFine_labelIds.png
frankfurt/frankfurt_000001_063045_gtFine_labelIds.png
frankfurt/frankfurt_000001_064651_gtFine_labelIds.png
frankfurt/frankfurt_000000_013382_gtFine_labelIds.png
frankfurt/frankfurt_000001_002512_gtFine_labelIds.png
frankfurt/frankfurt_000001_032942_gtFine_labelIds.png
frankfurt/frankfurt_000001_010600_gtFine_labelIds.png
frankfurt/frankfurt_000001_030067_gtFine_labelIds.png
frankfurt/frankfurt_000001_014741_gtFine_labelIds.png
frankfurt/frankfurt_000000_021667_gtFine_labelIds.png
frankfurt/frankfurt_000001_051807_gtFine_labelIds.png
frankfurt/frankfurt_000001_019854_gtFine_labelIds.png
frankfurt/frankfurt_000001_015768_gtFine_labelIds.png
frankfurt/frankfurt_000001_007857_gtFine_labelIds.png
frankfurt/frankfurt_000001_058914_gtFine_labelIds.png
frankfurt/frankfurt_000000_012868_gtFine_labelIds.png
frankfurt/frankfurt_000000_013942_gtFine_labelIds.png
frankfurt/frankfurt_000001_014406_gtFine_labelIds.png
frankfurt/frankfurt_000001_049298_gtFine_labelIds.png
frankfurt/frankfurt_000001_023769_gtFine_labelIds.png
frankfurt/frankfurt_000001_012519_gtFine_labelIds.png
frankfurt/frankfurt_000001_064925_gtFine_labelIds.png
frankfurt/frankfurt_000001_072295_gtFine_labelIds.png
frankfurt/frankfurt_000001_058504_gtFine_labelIds.png
frankfurt/frankfurt_000001_059119_gtFine_labelIds.png
frankfurt/frankfurt_000001_015091_gtFine_labelIds.png
frankfurt/frankfurt_000001_058057_gtFine_labelIds.png
frankfurt/frankfurt_000001_003056_gtFine_labelIds.png
frankfurt/frankfurt_000001_007622_gtFine_labelIds.png
frankfurt/frankfurt_000001_016273_gtFine_labelIds.png
frankfurt/frankfurt_000001_035864_gtFine_labelIds.png
frankfurt/frankfurt_000001_067092_gtFine_labelIds.png
frankfurt/frankfurt_000000_013067_gtFine_labelIds.png
frankfurt/frankfurt_000001_067474_gtFine_labelIds.png
frankfurt/frankfurt_000001_060135_gtFine_labelIds.png
frankfurt/frankfurt_000000_018797_gtFine_labelIds.png
frankfurt/frankfurt_000000_005898_gtFine_labelIds.png
frankfurt/frankfurt_000001_055603_gtFine_labelIds.png
frankfurt/frankfurt_000001_060906_gtFine_labelIds.png
frankfurt/frankfurt_000001_062653_gtFine_labelIds.png
frankfurt/frankfurt_000000_004617_gtFine_labelIds.png
frankfurt/frankfurt_000001_055538_gtFine_labelIds.png
frankfurt/frankfurt_000000_008451_gtFine_labelIds.png
frankfurt/frankfurt_000001_052594_gtFine_labelIds.png
frankfurt/frankfurt_000001_004327_gtFine_labelIds.png
frankfurt/frankfurt_000001_075296_gtFine_labelIds.png
frankfurt/frankfurt_000001_073088_gtFine_labelIds.png
frankfurt/frankfurt_000001_005184_gtFine_labelIds.png
frankfurt/frankfurt_000000_016286_gtFine_labelIds.png
frankfurt/frankfurt_000001_008688_gtFine_labelIds.png
frankfurt/frankfurt_000000_011074_gtFine_labelIds.png
frankfurt/frankfurt_000001_056580_gtFine_labelIds.png
frankfurt/frankfurt_000001_067735_gtFine_labelIds.png
frankfurt/frankfurt_000001_034047_gtFine_labelIds.png
frankfurt/frankfurt_000001_076502_gtFine_labelIds.png
frankfurt/frankfurt_000001_071288_gtFine_labelIds.png
frankfurt/frankfurt_000001_067295_gtFine_labelIds.png
frankfurt/frankfurt_000001_071781_gtFine_labelIds.png
frankfurt/frankfurt_000000_012121_gtFine_labelIds.png
frankfurt/frankfurt_000001_004859_gtFine_labelIds.png
frankfurt/frankfurt_000001_073911_gtFine_labelIds.png
frankfurt/frankfurt_000001_047552_gtFine_labelIds.png
frankfurt/frankfurt_000001_037705_gtFine_labelIds.png
frankfurt/frankfurt_000001_025512_gtFine_labelIds.png
frankfurt/frankfurt_000001_047178_gtFine_labelIds.png
frankfurt/frankfurt_000001_014221_gtFine_labelIds.png
frankfurt/frankfurt_000000_007365_gtFine_labelIds.png
frankfurt/frankfurt_000001_049698_gtFine_labelIds.png
frankfurt/frankfurt_000001_065160_gtFine_labelIds.png
frankfurt/frankfurt_000001_061763_gtFine_labelIds.png
frankfurt/frankfurt_000000_010351_gtFine_labelIds.png
frankfurt/frankfurt_000001_072155_gtFine_labelIds.png
frankfurt/frankfurt_000001_023235_gtFine_labelIds.png
frankfurt/frankfurt_000000_015389_gtFine_labelIds.png
frankfurt/frankfurt_000000_009688_gtFine_labelIds.png
frankfurt/frankfurt_000000_016005_gtFine_labelIds.png
frankfurt/frankfurt_000001_054640_gtFine_labelIds.png
frankfurt/frankfurt_000001_029600_gtFine_labelIds.png
frankfurt/frankfurt_000001_028232_gtFine_labelIds.png
frankfurt/frankfurt_000001_050686_gtFine_labelIds.png
frankfurt/frankfurt_000001_013496_gtFine_labelIds.png
frankfurt/frankfurt_000001_066092_gtFine_labelIds.png
frankfurt/frankfurt_000001_009854_gtFine_labelIds.png
frankfurt/frankfurt_000001_067178_gtFine_labelIds.png
frankfurt/frankfurt_000001_028854_gtFine_labelIds.png
frankfurt/frankfurt_000001_083199_gtFine_labelIds.png
frankfurt/frankfurt_000001_064798_gtFine_labelIds.png
frankfurt/frankfurt_000001_018113_gtFine_labelIds.png
frankfurt/frankfurt_000001_050149_gtFine_labelIds.png
frankfurt/frankfurt_000001_048196_gtFine_labelIds.png
frankfurt/frankfurt_000000_001236_gtFine_labelIds.png
frankfurt/frankfurt_000000_017476_gtFine_labelIds.png
frankfurt/frankfurt_000001_003588_gtFine_labelIds.png
frankfurt/frankfurt_000001_021825_gtFine_labelIds.png
frankfurt/frankfurt_000000_010763_gtFine_labelIds.png
frankfurt/frankfurt_000001_062793_gtFine_labelIds.png
frankfurt/frankfurt_000001_029236_gtFine_labelIds.png
frankfurt/frankfurt_000001_075984_gtFine_labelIds.png
frankfurt/frankfurt_000001_031266_gtFine_labelIds.png
frankfurt/frankfurt_000001_043395_gtFine_labelIds.png
frankfurt/frankfurt_000001_040732_gtFine_labelIds.png
frankfurt/frankfurt_000001_011162_gtFine_labelIds.png
frankfurt/frankfurt_000000_012009_gtFine_labelIds.png
frankfurt/frankfurt_000001_042733_gtFine_labelIds.png
lindau/lindau_000052_000019_gtFine_labelIds.png
lindau/lindau_000009_000019_gtFine_labelIds.png
lindau/lindau_000037_000019_gtFine_labelIds.png
lindau/lindau_000047_000019_gtFine_labelIds.png
lindau/lindau_000015_000019_gtFine_labelIds.png
lindau/lindau_000030_000019_gtFine_labelIds.png
lindau/lindau_000012_000019_gtFine_labelIds.png
lindau/lindau_000032_000019_gtFine_labelIds.png
lindau/lindau_000046_000019_gtFine_labelIds.png
lindau/lindau_000000_000019_gtFine_labelIds.png
lindau/lindau_000031_000019_gtFine_labelIds.png
lindau/lindau_000011_000019_gtFine_labelIds.png
lindau/lindau_000027_000019_gtFine_labelIds.png
lindau/lindau_000054_000019_gtFine_labelIds.png
lindau/lindau_000026_000019_gtFine_labelIds.png
lindau/lindau_000017_000019_gtFine_labelIds.png
lindau/lindau_000023_000019_gtFine_labelIds.png
lindau/lindau_000005_000019_gtFine_labelIds.png
lindau/lindau_000056_000019_gtFine_labelIds.png
lindau/lindau_000025_000019_gtFine_labelIds.png
lindau/lindau_000045_000019_gtFine_labelIds.png
lindau/lindau_000014_000019_gtFine_labelIds.png
lindau/lindau_000004_000019_gtFine_labelIds.png
lindau/lindau_000021_000019_gtFine_labelIds.png
lindau/lindau_000049_000019_gtFine_labelIds.png
lindau/lindau_000033_000019_gtFine_labelIds.png
lindau/lindau_000042_000019_gtFine_labelIds.png
lindau/lindau_000013_000019_gtFine_labelIds.png
lindau/lindau_000024_000019_gtFine_labelIds.png
lindau/lindau_000002_000019_gtFine_labelIds.png
lindau/lindau_000043_000019_gtFine_labelIds.png
lindau/lindau_000016_000019_gtFine_labelIds.png
lindau/lindau_000050_000019_gtFine_labelIds.png
lindau/lindau_000018_000019_gtFine_labelIds.png
lindau/lindau_000007_000019_gtFine_labelIds.png
lindau/lindau_000048_000019_gtFine_labelIds.png
lindau/lindau_000022_000019_gtFine_labelIds.png
lindau/lindau_000053_000019_gtFine_labelIds.png
lindau/lindau_000038_000019_gtFine_labelIds.png
lindau/lindau_000001_000019_gtFine_labelIds.png
lindau/lindau_000036_000019_gtFine_labelIds.png
lindau/lindau_000035_000019_gtFine_labelIds.png
lindau/lindau_000003_000019_gtFine_labelIds.png
lindau/lindau_000034_000019_gtFine_labelIds.png
lindau/lindau_000010_000019_gtFine_labelIds.png
lindau/lindau_000055_000019_gtFine_labelIds.png
lindau/lindau_000006_000019_gtFine_labelIds.png
lindau/lindau_000019_000019_gtFine_labelIds.png
lindau/lindau_000029_000019_gtFine_labelIds.png
lindau/lindau_000039_000019_gtFine_labelIds.png
lindau/lindau_000051_000019_gtFine_labelIds.png
lindau/lindau_000020_000019_gtFine_labelIds.png
lindau/lindau_000057_000019_gtFine_labelIds.png
lindau/lindau_000041_000019_gtFine_labelIds.png
lindau/lindau_000040_000019_gtFine_labelIds.png
lindau/lindau_000044_000019_gtFine_labelIds.png
lindau/lindau_000028_000019_gtFine_labelIds.png
lindau/lindau_000058_000019_gtFine_labelIds.png
lindau/lindau_000008_000019_gtFine_labelIds.png
munster/munster_000000_000019_gtFine_labelIds.png
munster/munster_000012_000019_gtFine_labelIds.png
munster/munster_000032_000019_gtFine_labelIds.png
munster/munster_000068_000019_gtFine_labelIds.png
munster/munster_000101_000019_gtFine_labelIds.png
munster/munster_000153_000019_gtFine_labelIds.png
munster/munster_000115_000019_gtFine_labelIds.png
munster/munster_000029_000019_gtFine_labelIds.png
munster/munster_000019_000019_gtFine_labelIds.png
munster/munster_000156_000019_gtFine_labelIds.png
munster/munster_000129_000019_gtFine_labelIds.png
munster/munster_000169_000019_gtFine_labelIds.png
munster/munster_000150_000019_gtFine_labelIds.png
munster/munster_000165_000019_gtFine_labelIds.png
munster/munster_000050_000019_gtFine_labelIds.png
munster/munster_000025_000019_gtFine_labelIds.png
munster/munster_000116_000019_gtFine_labelIds.png
munster/munster_000132_000019_gtFine_labelIds.png
munster/munster_000066_000019_gtFine_labelIds.png
munster/munster_000096_000019_gtFine_labelIds.png
munster/munster_000030_000019_gtFine_labelIds.png
munster/munster_000146_000019_gtFine_labelIds.png
munster/munster_000098_000019_gtFine_labelIds.png
munster/munster_000059_000019_gtFine_labelIds.png
munster/munster_000093_000019_gtFine_labelIds.png
munster/munster_000122_000019_gtFine_labelIds.png
munster/munster_000024_000019_gtFine_labelIds.png
munster/munster_000036_000019_gtFine_labelIds.png
munster/munster_000086_000019_gtFine_labelIds.png
munster/munster_000163_000019_gtFine_labelIds.png
munster/munster_000001_000019_gtFine_labelIds.png
munster/munster_000053_000019_gtFine_labelIds.png
munster/munster_000071_000019_gtFine_labelIds.png
munster/munster_000079_000019_gtFine_labelIds.png
munster/munster_000159_000019_gtFine_labelIds.png
munster/munster_000038_000019_gtFine_labelIds.png
munster/munster_000138_000019_gtFine_labelIds.png
munster/munster_000135_000019_gtFine_labelIds.png
munster/munster_000065_000019_gtFine_labelIds.png
munster/munster_000139_000019_gtFine_labelIds.png
munster/munster_000108_000019_gtFine_labelIds.png
munster/munster_000020_000019_gtFine_labelIds.png
munster/munster_000074_000019_gtFine_labelIds.png
munster/munster_000035_000019_gtFine_labelIds.png
munster/munster_000067_000019_gtFine_labelIds.png
munster/munster_000151_000019_gtFine_labelIds.png
munster/munster_000083_000019_gtFine_labelIds.png
munster/munster_000118_000019_gtFine_labelIds.png
munster/munster_000046_000019_gtFine_labelIds.png
munster/munster_000147_000019_gtFine_labelIds.png
munster/munster_000047_000019_gtFine_labelIds.png
munster/munster_000043_000019_gtFine_labelIds.png
munster/munster_000168_000019_gtFine_labelIds.png
munster/munster_000167_000019_gtFine_labelIds.png
munster/munster_000021_000019_gtFine_labelIds.png
munster/munster_000073_000019_gtFine_labelIds.png
munster/munster_000089_000019_gtFine_labelIds.png
munster/munster_000060_000019_gtFine_labelIds.png
munster/munster_000155_000019_gtFine_labelIds.png
munster/munster_000140_000019_gtFine_labelIds.png
munster/munster_000145_000019_gtFine_labelIds.png
munster/munster_000077_000019_gtFine_labelIds.png
munster/munster_000018_000019_gtFine_labelIds.png
munster/munster_000045_000019_gtFine_labelIds.png
munster/munster_000166_000019_gtFine_labelIds.png
munster/munster_000037_000019_gtFine_labelIds.png
munster/munster_000112_000019_gtFine_labelIds.png
munster/munster_000080_000019_gtFine_labelIds.png
munster/munster_000144_000019_gtFine_labelIds.png
munster/munster_000142_000019_gtFine_labelIds.png
munster/munster_000070_000019_gtFine_labelIds.png
munster/munster_000044_000019_gtFine_labelIds.png
munster/munster_000137_000019_gtFine_labelIds.png
munster/munster_000041_000019_gtFine_labelIds.png
munster/munster_000113_000019_gtFine_labelIds.png
munster/munster_000075_000019_gtFine_labelIds.png
munster/munster_000157_000019_gtFine_labelIds.png
munster/munster_000158_000019_gtFine_labelIds.png
munster/munster_000109_000019_gtFine_labelIds.png
munster/munster_000033_000019_gtFine_labelIds.png
munster/munster_000088_000019_gtFine_labelIds.png
munster/munster_000090_000019_gtFine_labelIds.png
munster/munster_000114_000019_gtFine_labelIds.png
munster/munster_000171_000019_gtFine_labelIds.png
munster/munster_000013_000019_gtFine_labelIds.png
munster/munster_000130_000019_gtFine_labelIds.png
munster/munster_000016_000019_gtFine_labelIds.png
munster/munster_000136_000019_gtFine_labelIds.png
munster/munster_000007_000019_gtFine_labelIds.png
munster/munster_000014_000019_gtFine_labelIds.png
munster/munster_000052_000019_gtFine_labelIds.png
munster/munster_000104_000019_gtFine_labelIds.png
munster/munster_000173_000019_gtFine_labelIds.png
munster/munster_000057_000019_gtFine_labelIds.png
munster/munster_000072_000019_gtFine_labelIds.png
munster/munster_000003_000019_gtFine_labelIds.png
munster/munster_000161_000019_gtFine_labelIds.png
munster/munster_000002_000019_gtFine_labelIds.png
munster/munster_000028_000019_gtFine_labelIds.png
munster/munster_000051_000019_gtFine_labelIds.png
munster/munster_000105_000019_gtFine_labelIds.png
munster/munster_000061_000019_gtFine_labelIds.png
munster/munster_000058_000019_gtFine_labelIds.png
munster/munster_000094_000019_gtFine_labelIds.png
munster/munster_000027_000019_gtFine_labelIds.png
munster/munster_000062_000019_gtFine_labelIds.png
munster/munster_000127_000019_gtFine_labelIds.png
munster/munster_000110_000019_gtFine_labelIds.png
munster/munster_000170_000019_gtFine_labelIds.png
munster/munster_000023_000019_gtFine_labelIds.png
munster/munster_000084_000019_gtFine_labelIds.png
munster/munster_000121_000019_gtFine_labelIds.png
munster/munster_000087_000019_gtFine_labelIds.png
munster/munster_000097_000019_gtFine_labelIds.png
munster/munster_000119_000019_gtFine_labelIds.png
munster/munster_000128_000019_gtFine_labelIds.png
munster/munster_000078_000019_gtFine_labelIds.png
munster/munster_000010_000019_gtFine_labelIds.png
munster/munster_000015_000019_gtFine_labelIds.png
munster/munster_000048_000019_gtFine_labelIds.png
munster/munster_000085_000019_gtFine_labelIds.png
munster/munster_000164_000019_gtFine_labelIds.png
munster/munster_000111_000019_gtFine_labelIds.png
munster/munster_000099_000019_gtFine_labelIds.png
munster/munster_000117_000019_gtFine_labelIds.png
munster/munster_000009_000019_gtFine_labelIds.png
munster/munster_000049_000019_gtFine_labelIds.png
munster/munster_000148_000019_gtFine_labelIds.png
munster/munster_000022_000019_gtFine_labelIds.png
munster/munster_000131_000019_gtFine_labelIds.png
munster/munster_000006_000019_gtFine_labelIds.png
munster/munster_000005_000019_gtFine_labelIds.png
munster/munster_000102_000019_gtFine_labelIds.png
munster/munster_000160_000019_gtFine_labelIds.png
munster/munster_000107_000019_gtFine_labelIds.png
munster/munster_000095_000019_gtFine_labelIds.png
munster/munster_000106_000019_gtFine_labelIds.png
munster/munster_000034_000019_gtFine_labelIds.png
munster/munster_000143_000019_gtFine_labelIds.png
munster/munster_000017_000019_gtFine_labelIds.png
munster/munster_000040_000019_gtFine_labelIds.png
munster/munster_000152_000019_gtFine_labelIds.png
munster/munster_000154_000019_gtFine_labelIds.png
munster/munster_000100_000019_gtFine_labelIds.png
munster/munster_000004_000019_gtFine_labelIds.png
munster/munster_000141_000019_gtFine_labelIds.png
munster/munster_000011_000019_gtFine_labelIds.png
munster/munster_000055_000019_gtFine_labelIds.png
munster/munster_000134_000019_gtFine_labelIds.png
munster/munster_000054_000019_gtFine_labelIds.png
munster/munster_000064_000019_gtFine_labelIds.png
munster/munster_000039_000019_gtFine_labelIds.png
munster/munster_000103_000019_gtFine_labelIds.png
munster/munster_000092_000019_gtFine_labelIds.png
munster/munster_000172_000019_gtFine_labelIds.png
munster/munster_000042_000019_gtFine_labelIds.png
munster/munster_000124_000019_gtFine_labelIds.png
munster/munster_000069_000019_gtFine_labelIds.png
munster/munster_000026_000019_gtFine_labelIds.png
munster/munster_000120_000019_gtFine_labelIds.png
munster/munster_000031_000019_gtFine_labelIds.png
munster/munster_000162_000019_gtFine_labelIds.png
munster/munster_000056_000019_gtFine_labelIds.png
munster/munster_000081_000019_gtFine_labelIds.png
munster/munster_000123_000019_gtFine_labelIds.png
munster/munster_000125_000019_gtFine_labelIds.png
munster/munster_000082_000019_gtFine_labelIds.png
munster/munster_000133_000019_gtFine_labelIds.png
munster/munster_000126_000019_gtFine_labelIds.png
munster/munster_000063_000019_gtFine_labelIds.png
munster/munster_000008_000019_gtFine_labelIds.png
munster/munster_000149_000019_gtFine_labelIds.png
munster/munster_000076_000019_gtFine_labelIds.png
munster/munster_000091_000019_gtFine_labelIds.png

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,18 @@
aachen/aachen_000000_000019_leftImg8bit.png
aachen/aachen_000001_000019_leftImg8bit.png
aachen/aachen_000002_000019_leftImg8bit.png
aachen/aachen_000003_000019_leftImg8bit.png
aachen/aachen_000004_000019_leftImg8bit.png
aachen/aachen_000005_000019_leftImg8bit.png
aachen/aachen_000006_000019_leftImg8bit.png
aachen/aachen_000007_000019_leftImg8bit.png
aachen/aachen_000008_000019_leftImg8bit.png
aachen/aachen_000009_000019_leftImg8bit.png
aachen/aachen_000010_000019_leftImg8bit.png
aachen/aachen_000011_000019_leftImg8bit.png
aachen/aachen_000012_000019_leftImg8bit.png
aachen/aachen_000013_000019_leftImg8bit.png
aachen/aachen_000014_000019_leftImg8bit.png
aachen/aachen_000015_000019_leftImg8bit.png
aachen/aachen_000016_000019_leftImg8bit.png
aachen/aachen_000017_000019_leftImg8bit.png

View File

@ -0,0 +1,18 @@
aachen/aachen_000000_000019_leftImg8bit.png
aachen/aachen_000001_000019_leftImg8bit.png
aachen/aachen_000002_000019_leftImg8bit.png
aachen/aachen_000003_000019_leftImg8bit.png
aachen/aachen_000004_000019_leftImg8bit.png
aachen/aachen_000005_000019_leftImg8bit.png
aachen/aachen_000006_000019_leftImg8bit.png
aachen/aachen_000007_000019_leftImg8bit.png
aachen/aachen_000008_000019_leftImg8bit.png
aachen/aachen_000009_000019_leftImg8bit.png
aachen/aachen_000010_000019_leftImg8bit.png
aachen/aachen_000011_000019_leftImg8bit.png
aachen/aachen_000012_000019_leftImg8bit.png
aachen/aachen_000013_000019_leftImg8bit.png
aachen/aachen_000014_000019_leftImg8bit.png
aachen/aachen_000015_000019_leftImg8bit.png
aachen/aachen_000016_000019_leftImg8bit.png
aachen/aachen_000017_000019_leftImg8bit.png

View File

@ -0,0 +1,18 @@
aachen/aachen_000000_000019_leftImg8bit.png
aachen/aachen_000001_000019_leftImg8bit.png
aachen/aachen_000002_000019_leftImg8bit.png
aachen/aachen_000003_000019_leftImg8bit.png
aachen/aachen_000004_000019_leftImg8bit.png
aachen/aachen_000005_000019_leftImg8bit.png
aachen/aachen_000006_000019_leftImg8bit.png
aachen/aachen_000007_000019_leftImg8bit.png
aachen/aachen_000008_000019_leftImg8bit.png
aachen/aachen_000009_000019_leftImg8bit.png
aachen/aachen_000010_000019_leftImg8bit.png
aachen/aachen_000011_000019_leftImg8bit.png
aachen/aachen_000012_000019_leftImg8bit.png
aachen/aachen_000013_000019_leftImg8bit.png
aachen/aachen_000014_000019_leftImg8bit.png
aachen/aachen_000015_000019_leftImg8bit.png
aachen/aachen_000016_000019_leftImg8bit.png
aachen/aachen_000017_000019_leftImg8bit.png

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,500 @@
frankfurt/frankfurt_000001_007973_leftImg8bit.png
frankfurt/frankfurt_000001_025921_leftImg8bit.png
frankfurt/frankfurt_000001_062016_leftImg8bit.png
frankfurt/frankfurt_000001_049078_leftImg8bit.png
frankfurt/frankfurt_000000_009561_leftImg8bit.png
frankfurt/frankfurt_000001_013710_leftImg8bit.png
frankfurt/frankfurt_000001_041664_leftImg8bit.png
frankfurt/frankfurt_000000_013240_leftImg8bit.png
frankfurt/frankfurt_000001_044787_leftImg8bit.png
frankfurt/frankfurt_000001_015328_leftImg8bit.png
frankfurt/frankfurt_000001_073243_leftImg8bit.png
frankfurt/frankfurt_000001_034816_leftImg8bit.png
frankfurt/frankfurt_000001_041074_leftImg8bit.png
frankfurt/frankfurt_000001_005898_leftImg8bit.png
frankfurt/frankfurt_000000_022254_leftImg8bit.png
frankfurt/frankfurt_000001_044658_leftImg8bit.png
frankfurt/frankfurt_000001_009504_leftImg8bit.png
frankfurt/frankfurt_000001_024927_leftImg8bit.png
frankfurt/frankfurt_000001_017842_leftImg8bit.png
frankfurt/frankfurt_000001_068208_leftImg8bit.png
frankfurt/frankfurt_000001_013016_leftImg8bit.png
frankfurt/frankfurt_000001_010156_leftImg8bit.png
frankfurt/frankfurt_000000_002963_leftImg8bit.png
frankfurt/frankfurt_000001_020693_leftImg8bit.png
frankfurt/frankfurt_000001_078803_leftImg8bit.png
frankfurt/frankfurt_000001_025713_leftImg8bit.png
frankfurt/frankfurt_000001_007285_leftImg8bit.png
frankfurt/frankfurt_000001_070099_leftImg8bit.png
frankfurt/frankfurt_000000_009291_leftImg8bit.png
frankfurt/frankfurt_000000_019607_leftImg8bit.png
frankfurt/frankfurt_000001_068063_leftImg8bit.png
frankfurt/frankfurt_000000_003920_leftImg8bit.png
frankfurt/frankfurt_000001_077233_leftImg8bit.png
frankfurt/frankfurt_000001_029086_leftImg8bit.png
frankfurt/frankfurt_000001_060545_leftImg8bit.png
frankfurt/frankfurt_000001_001464_leftImg8bit.png
frankfurt/frankfurt_000001_028590_leftImg8bit.png
frankfurt/frankfurt_000001_016462_leftImg8bit.png
frankfurt/frankfurt_000001_060422_leftImg8bit.png
frankfurt/frankfurt_000001_009058_leftImg8bit.png
frankfurt/frankfurt_000001_080830_leftImg8bit.png
frankfurt/frankfurt_000001_012870_leftImg8bit.png
frankfurt/frankfurt_000001_077434_leftImg8bit.png
frankfurt/frankfurt_000001_033655_leftImg8bit.png
frankfurt/frankfurt_000001_051516_leftImg8bit.png
frankfurt/frankfurt_000001_044413_leftImg8bit.png
frankfurt/frankfurt_000001_055172_leftImg8bit.png
frankfurt/frankfurt_000001_040575_leftImg8bit.png
frankfurt/frankfurt_000000_020215_leftImg8bit.png
frankfurt/frankfurt_000000_017228_leftImg8bit.png
frankfurt/frankfurt_000001_041354_leftImg8bit.png
frankfurt/frankfurt_000000_008206_leftImg8bit.png
frankfurt/frankfurt_000001_043564_leftImg8bit.png
frankfurt/frankfurt_000001_032711_leftImg8bit.png
frankfurt/frankfurt_000001_064130_leftImg8bit.png
frankfurt/frankfurt_000001_053102_leftImg8bit.png
frankfurt/frankfurt_000001_082087_leftImg8bit.png
frankfurt/frankfurt_000001_057478_leftImg8bit.png
frankfurt/frankfurt_000001_007407_leftImg8bit.png
frankfurt/frankfurt_000001_008200_leftImg8bit.png
frankfurt/frankfurt_000001_038844_leftImg8bit.png
frankfurt/frankfurt_000001_016029_leftImg8bit.png
frankfurt/frankfurt_000001_058176_leftImg8bit.png
frankfurt/frankfurt_000001_057181_leftImg8bit.png
frankfurt/frankfurt_000001_039895_leftImg8bit.png
frankfurt/frankfurt_000000_000294_leftImg8bit.png
frankfurt/frankfurt_000001_055062_leftImg8bit.png
frankfurt/frankfurt_000001_083029_leftImg8bit.png
frankfurt/frankfurt_000001_010444_leftImg8bit.png
frankfurt/frankfurt_000001_041517_leftImg8bit.png
frankfurt/frankfurt_000001_069633_leftImg8bit.png
frankfurt/frankfurt_000001_020287_leftImg8bit.png
frankfurt/frankfurt_000001_012038_leftImg8bit.png
frankfurt/frankfurt_000001_046504_leftImg8bit.png
frankfurt/frankfurt_000001_032556_leftImg8bit.png
frankfurt/frankfurt_000000_001751_leftImg8bit.png
frankfurt/frankfurt_000001_000538_leftImg8bit.png
frankfurt/frankfurt_000001_083852_leftImg8bit.png
frankfurt/frankfurt_000001_077092_leftImg8bit.png
frankfurt/frankfurt_000001_017101_leftImg8bit.png
frankfurt/frankfurt_000001_044525_leftImg8bit.png
frankfurt/frankfurt_000001_005703_leftImg8bit.png
frankfurt/frankfurt_000001_080391_leftImg8bit.png
frankfurt/frankfurt_000001_038418_leftImg8bit.png
frankfurt/frankfurt_000001_066832_leftImg8bit.png
frankfurt/frankfurt_000000_003357_leftImg8bit.png
frankfurt/frankfurt_000000_020880_leftImg8bit.png
frankfurt/frankfurt_000001_062396_leftImg8bit.png
frankfurt/frankfurt_000001_046272_leftImg8bit.png
frankfurt/frankfurt_000001_062509_leftImg8bit.png
frankfurt/frankfurt_000001_054415_leftImg8bit.png
frankfurt/frankfurt_000001_021406_leftImg8bit.png
frankfurt/frankfurt_000001_030310_leftImg8bit.png
frankfurt/frankfurt_000000_014480_leftImg8bit.png
frankfurt/frankfurt_000001_005410_leftImg8bit.png
frankfurt/frankfurt_000000_022797_leftImg8bit.png
frankfurt/frankfurt_000001_035144_leftImg8bit.png
frankfurt/frankfurt_000001_014565_leftImg8bit.png
frankfurt/frankfurt_000001_065850_leftImg8bit.png
frankfurt/frankfurt_000000_000576_leftImg8bit.png
frankfurt/frankfurt_000001_065617_leftImg8bit.png
frankfurt/frankfurt_000000_005543_leftImg8bit.png
frankfurt/frankfurt_000001_055709_leftImg8bit.png
frankfurt/frankfurt_000001_027325_leftImg8bit.png
frankfurt/frankfurt_000001_011835_leftImg8bit.png
frankfurt/frankfurt_000001_046779_leftImg8bit.png
frankfurt/frankfurt_000001_064305_leftImg8bit.png
frankfurt/frankfurt_000001_012738_leftImg8bit.png
frankfurt/frankfurt_000001_048355_leftImg8bit.png
frankfurt/frankfurt_000001_019969_leftImg8bit.png
frankfurt/frankfurt_000001_080091_leftImg8bit.png
frankfurt/frankfurt_000000_011007_leftImg8bit.png
frankfurt/frankfurt_000000_015676_leftImg8bit.png
frankfurt/frankfurt_000001_044227_leftImg8bit.png
frankfurt/frankfurt_000001_055387_leftImg8bit.png
frankfurt/frankfurt_000001_038245_leftImg8bit.png
frankfurt/frankfurt_000001_059642_leftImg8bit.png
frankfurt/frankfurt_000001_030669_leftImg8bit.png
frankfurt/frankfurt_000001_068772_leftImg8bit.png
frankfurt/frankfurt_000001_079206_leftImg8bit.png
frankfurt/frankfurt_000001_055306_leftImg8bit.png
frankfurt/frankfurt_000001_012699_leftImg8bit.png
frankfurt/frankfurt_000001_042384_leftImg8bit.png
frankfurt/frankfurt_000001_054077_leftImg8bit.png
frankfurt/frankfurt_000001_010830_leftImg8bit.png
frankfurt/frankfurt_000001_052120_leftImg8bit.png
frankfurt/frankfurt_000001_032018_leftImg8bit.png
frankfurt/frankfurt_000001_051737_leftImg8bit.png
frankfurt/frankfurt_000001_028335_leftImg8bit.png
frankfurt/frankfurt_000001_049770_leftImg8bit.png
frankfurt/frankfurt_000001_054884_leftImg8bit.png
frankfurt/frankfurt_000001_019698_leftImg8bit.png
frankfurt/frankfurt_000000_011461_leftImg8bit.png
frankfurt/frankfurt_000000_001016_leftImg8bit.png
frankfurt/frankfurt_000001_062250_leftImg8bit.png
frankfurt/frankfurt_000001_004736_leftImg8bit.png
frankfurt/frankfurt_000001_068682_leftImg8bit.png
frankfurt/frankfurt_000000_006589_leftImg8bit.png
frankfurt/frankfurt_000000_011810_leftImg8bit.png
frankfurt/frankfurt_000001_066574_leftImg8bit.png
frankfurt/frankfurt_000001_048654_leftImg8bit.png
frankfurt/frankfurt_000001_049209_leftImg8bit.png
frankfurt/frankfurt_000001_042098_leftImg8bit.png
frankfurt/frankfurt_000001_031416_leftImg8bit.png
frankfurt/frankfurt_000000_009969_leftImg8bit.png
frankfurt/frankfurt_000001_038645_leftImg8bit.png
frankfurt/frankfurt_000001_020046_leftImg8bit.png
frankfurt/frankfurt_000001_054219_leftImg8bit.png
frankfurt/frankfurt_000001_002759_leftImg8bit.png
frankfurt/frankfurt_000001_066438_leftImg8bit.png
frankfurt/frankfurt_000000_020321_leftImg8bit.png
frankfurt/frankfurt_000001_002646_leftImg8bit.png
frankfurt/frankfurt_000001_046126_leftImg8bit.png
frankfurt/frankfurt_000000_002196_leftImg8bit.png
frankfurt/frankfurt_000001_057954_leftImg8bit.png
frankfurt/frankfurt_000001_011715_leftImg8bit.png
frankfurt/frankfurt_000000_021879_leftImg8bit.png
frankfurt/frankfurt_000001_082466_leftImg8bit.png
frankfurt/frankfurt_000000_003025_leftImg8bit.png
frankfurt/frankfurt_000001_023369_leftImg8bit.png
frankfurt/frankfurt_000001_061682_leftImg8bit.png
frankfurt/frankfurt_000001_017459_leftImg8bit.png
frankfurt/frankfurt_000001_059789_leftImg8bit.png
frankfurt/frankfurt_000001_073464_leftImg8bit.png
frankfurt/frankfurt_000001_063045_leftImg8bit.png
frankfurt/frankfurt_000001_064651_leftImg8bit.png
frankfurt/frankfurt_000000_013382_leftImg8bit.png
frankfurt/frankfurt_000001_002512_leftImg8bit.png
frankfurt/frankfurt_000001_032942_leftImg8bit.png
frankfurt/frankfurt_000001_010600_leftImg8bit.png
frankfurt/frankfurt_000001_030067_leftImg8bit.png
frankfurt/frankfurt_000001_014741_leftImg8bit.png
frankfurt/frankfurt_000000_021667_leftImg8bit.png
frankfurt/frankfurt_000001_051807_leftImg8bit.png
frankfurt/frankfurt_000001_019854_leftImg8bit.png
frankfurt/frankfurt_000001_015768_leftImg8bit.png
frankfurt/frankfurt_000001_007857_leftImg8bit.png
frankfurt/frankfurt_000001_058914_leftImg8bit.png
frankfurt/frankfurt_000000_012868_leftImg8bit.png
frankfurt/frankfurt_000000_013942_leftImg8bit.png
frankfurt/frankfurt_000001_014406_leftImg8bit.png
frankfurt/frankfurt_000001_049298_leftImg8bit.png
frankfurt/frankfurt_000001_023769_leftImg8bit.png
frankfurt/frankfurt_000001_012519_leftImg8bit.png
frankfurt/frankfurt_000001_064925_leftImg8bit.png
frankfurt/frankfurt_000001_072295_leftImg8bit.png
frankfurt/frankfurt_000001_058504_leftImg8bit.png
frankfurt/frankfurt_000001_059119_leftImg8bit.png
frankfurt/frankfurt_000001_015091_leftImg8bit.png
frankfurt/frankfurt_000001_058057_leftImg8bit.png
frankfurt/frankfurt_000001_003056_leftImg8bit.png
frankfurt/frankfurt_000001_007622_leftImg8bit.png
frankfurt/frankfurt_000001_016273_leftImg8bit.png
frankfurt/frankfurt_000001_035864_leftImg8bit.png
frankfurt/frankfurt_000001_067092_leftImg8bit.png
frankfurt/frankfurt_000000_013067_leftImg8bit.png
frankfurt/frankfurt_000001_067474_leftImg8bit.png
frankfurt/frankfurt_000001_060135_leftImg8bit.png
frankfurt/frankfurt_000000_018797_leftImg8bit.png
frankfurt/frankfurt_000000_005898_leftImg8bit.png
frankfurt/frankfurt_000001_055603_leftImg8bit.png
frankfurt/frankfurt_000001_060906_leftImg8bit.png
frankfurt/frankfurt_000001_062653_leftImg8bit.png
frankfurt/frankfurt_000000_004617_leftImg8bit.png
frankfurt/frankfurt_000001_055538_leftImg8bit.png
frankfurt/frankfurt_000000_008451_leftImg8bit.png
frankfurt/frankfurt_000001_052594_leftImg8bit.png
frankfurt/frankfurt_000001_004327_leftImg8bit.png
frankfurt/frankfurt_000001_075296_leftImg8bit.png
frankfurt/frankfurt_000001_073088_leftImg8bit.png
frankfurt/frankfurt_000001_005184_leftImg8bit.png
frankfurt/frankfurt_000000_016286_leftImg8bit.png
frankfurt/frankfurt_000001_008688_leftImg8bit.png
frankfurt/frankfurt_000000_011074_leftImg8bit.png
frankfurt/frankfurt_000001_056580_leftImg8bit.png
frankfurt/frankfurt_000001_067735_leftImg8bit.png
frankfurt/frankfurt_000001_034047_leftImg8bit.png
frankfurt/frankfurt_000001_076502_leftImg8bit.png
frankfurt/frankfurt_000001_071288_leftImg8bit.png
frankfurt/frankfurt_000001_067295_leftImg8bit.png
frankfurt/frankfurt_000001_071781_leftImg8bit.png
frankfurt/frankfurt_000000_012121_leftImg8bit.png
frankfurt/frankfurt_000001_004859_leftImg8bit.png
frankfurt/frankfurt_000001_073911_leftImg8bit.png
frankfurt/frankfurt_000001_047552_leftImg8bit.png
frankfurt/frankfurt_000001_037705_leftImg8bit.png
frankfurt/frankfurt_000001_025512_leftImg8bit.png
frankfurt/frankfurt_000001_047178_leftImg8bit.png
frankfurt/frankfurt_000001_014221_leftImg8bit.png
frankfurt/frankfurt_000000_007365_leftImg8bit.png
frankfurt/frankfurt_000001_049698_leftImg8bit.png
frankfurt/frankfurt_000001_065160_leftImg8bit.png
frankfurt/frankfurt_000001_061763_leftImg8bit.png
frankfurt/frankfurt_000000_010351_leftImg8bit.png
frankfurt/frankfurt_000001_072155_leftImg8bit.png
frankfurt/frankfurt_000001_023235_leftImg8bit.png
frankfurt/frankfurt_000000_015389_leftImg8bit.png
frankfurt/frankfurt_000000_009688_leftImg8bit.png
frankfurt/frankfurt_000000_016005_leftImg8bit.png
frankfurt/frankfurt_000001_054640_leftImg8bit.png
frankfurt/frankfurt_000001_029600_leftImg8bit.png
frankfurt/frankfurt_000001_028232_leftImg8bit.png
frankfurt/frankfurt_000001_050686_leftImg8bit.png
frankfurt/frankfurt_000001_013496_leftImg8bit.png
frankfurt/frankfurt_000001_066092_leftImg8bit.png
frankfurt/frankfurt_000001_009854_leftImg8bit.png
frankfurt/frankfurt_000001_067178_leftImg8bit.png
frankfurt/frankfurt_000001_028854_leftImg8bit.png
frankfurt/frankfurt_000001_083199_leftImg8bit.png
frankfurt/frankfurt_000001_064798_leftImg8bit.png
frankfurt/frankfurt_000001_018113_leftImg8bit.png
frankfurt/frankfurt_000001_050149_leftImg8bit.png
frankfurt/frankfurt_000001_048196_leftImg8bit.png
frankfurt/frankfurt_000000_001236_leftImg8bit.png
frankfurt/frankfurt_000000_017476_leftImg8bit.png
frankfurt/frankfurt_000001_003588_leftImg8bit.png
frankfurt/frankfurt_000001_021825_leftImg8bit.png
frankfurt/frankfurt_000000_010763_leftImg8bit.png
frankfurt/frankfurt_000001_062793_leftImg8bit.png
frankfurt/frankfurt_000001_029236_leftImg8bit.png
frankfurt/frankfurt_000001_075984_leftImg8bit.png
frankfurt/frankfurt_000001_031266_leftImg8bit.png
frankfurt/frankfurt_000001_043395_leftImg8bit.png
frankfurt/frankfurt_000001_040732_leftImg8bit.png
frankfurt/frankfurt_000001_011162_leftImg8bit.png
frankfurt/frankfurt_000000_012009_leftImg8bit.png
frankfurt/frankfurt_000001_042733_leftImg8bit.png
lindau/lindau_000052_000019_leftImg8bit.png
lindau/lindau_000009_000019_leftImg8bit.png
lindau/lindau_000037_000019_leftImg8bit.png
lindau/lindau_000047_000019_leftImg8bit.png
lindau/lindau_000015_000019_leftImg8bit.png
lindau/lindau_000030_000019_leftImg8bit.png
lindau/lindau_000012_000019_leftImg8bit.png
lindau/lindau_000032_000019_leftImg8bit.png
lindau/lindau_000046_000019_leftImg8bit.png
lindau/lindau_000000_000019_leftImg8bit.png
lindau/lindau_000031_000019_leftImg8bit.png
lindau/lindau_000011_000019_leftImg8bit.png
lindau/lindau_000027_000019_leftImg8bit.png
lindau/lindau_000054_000019_leftImg8bit.png
lindau/lindau_000026_000019_leftImg8bit.png
lindau/lindau_000017_000019_leftImg8bit.png
lindau/lindau_000023_000019_leftImg8bit.png
lindau/lindau_000005_000019_leftImg8bit.png
lindau/lindau_000056_000019_leftImg8bit.png
lindau/lindau_000025_000019_leftImg8bit.png
lindau/lindau_000045_000019_leftImg8bit.png
lindau/lindau_000014_000019_leftImg8bit.png
lindau/lindau_000004_000019_leftImg8bit.png
lindau/lindau_000021_000019_leftImg8bit.png
lindau/lindau_000049_000019_leftImg8bit.png
lindau/lindau_000033_000019_leftImg8bit.png
lindau/lindau_000042_000019_leftImg8bit.png
lindau/lindau_000013_000019_leftImg8bit.png
lindau/lindau_000024_000019_leftImg8bit.png
lindau/lindau_000002_000019_leftImg8bit.png
lindau/lindau_000043_000019_leftImg8bit.png
lindau/lindau_000016_000019_leftImg8bit.png
lindau/lindau_000050_000019_leftImg8bit.png
lindau/lindau_000018_000019_leftImg8bit.png
lindau/lindau_000007_000019_leftImg8bit.png
lindau/lindau_000048_000019_leftImg8bit.png
lindau/lindau_000022_000019_leftImg8bit.png
lindau/lindau_000053_000019_leftImg8bit.png
lindau/lindau_000038_000019_leftImg8bit.png
lindau/lindau_000001_000019_leftImg8bit.png
lindau/lindau_000036_000019_leftImg8bit.png
lindau/lindau_000035_000019_leftImg8bit.png
lindau/lindau_000003_000019_leftImg8bit.png
lindau/lindau_000034_000019_leftImg8bit.png
lindau/lindau_000010_000019_leftImg8bit.png
lindau/lindau_000055_000019_leftImg8bit.png
lindau/lindau_000006_000019_leftImg8bit.png
lindau/lindau_000019_000019_leftImg8bit.png
lindau/lindau_000029_000019_leftImg8bit.png
lindau/lindau_000039_000019_leftImg8bit.png
lindau/lindau_000051_000019_leftImg8bit.png
lindau/lindau_000020_000019_leftImg8bit.png
lindau/lindau_000057_000019_leftImg8bit.png
lindau/lindau_000041_000019_leftImg8bit.png
lindau/lindau_000040_000019_leftImg8bit.png
lindau/lindau_000044_000019_leftImg8bit.png
lindau/lindau_000028_000019_leftImg8bit.png
lindau/lindau_000058_000019_leftImg8bit.png
lindau/lindau_000008_000019_leftImg8bit.png
munster/munster_000000_000019_leftImg8bit.png
munster/munster_000012_000019_leftImg8bit.png
munster/munster_000032_000019_leftImg8bit.png
munster/munster_000068_000019_leftImg8bit.png
munster/munster_000101_000019_leftImg8bit.png
munster/munster_000153_000019_leftImg8bit.png
munster/munster_000115_000019_leftImg8bit.png
munster/munster_000029_000019_leftImg8bit.png
munster/munster_000019_000019_leftImg8bit.png
munster/munster_000156_000019_leftImg8bit.png
munster/munster_000129_000019_leftImg8bit.png
munster/munster_000169_000019_leftImg8bit.png
munster/munster_000150_000019_leftImg8bit.png
munster/munster_000165_000019_leftImg8bit.png
munster/munster_000050_000019_leftImg8bit.png
munster/munster_000025_000019_leftImg8bit.png
munster/munster_000116_000019_leftImg8bit.png
munster/munster_000132_000019_leftImg8bit.png
munster/munster_000066_000019_leftImg8bit.png
munster/munster_000096_000019_leftImg8bit.png
munster/munster_000030_000019_leftImg8bit.png
munster/munster_000146_000019_leftImg8bit.png
munster/munster_000098_000019_leftImg8bit.png
munster/munster_000059_000019_leftImg8bit.png
munster/munster_000093_000019_leftImg8bit.png
munster/munster_000122_000019_leftImg8bit.png
munster/munster_000024_000019_leftImg8bit.png
munster/munster_000036_000019_leftImg8bit.png
munster/munster_000086_000019_leftImg8bit.png
munster/munster_000163_000019_leftImg8bit.png
munster/munster_000001_000019_leftImg8bit.png
munster/munster_000053_000019_leftImg8bit.png
munster/munster_000071_000019_leftImg8bit.png
munster/munster_000079_000019_leftImg8bit.png
munster/munster_000159_000019_leftImg8bit.png
munster/munster_000038_000019_leftImg8bit.png
munster/munster_000138_000019_leftImg8bit.png
munster/munster_000135_000019_leftImg8bit.png
munster/munster_000065_000019_leftImg8bit.png
munster/munster_000139_000019_leftImg8bit.png
munster/munster_000108_000019_leftImg8bit.png
munster/munster_000020_000019_leftImg8bit.png
munster/munster_000074_000019_leftImg8bit.png
munster/munster_000035_000019_leftImg8bit.png
munster/munster_000067_000019_leftImg8bit.png
munster/munster_000151_000019_leftImg8bit.png
munster/munster_000083_000019_leftImg8bit.png
munster/munster_000118_000019_leftImg8bit.png
munster/munster_000046_000019_leftImg8bit.png
munster/munster_000147_000019_leftImg8bit.png
munster/munster_000047_000019_leftImg8bit.png
munster/munster_000043_000019_leftImg8bit.png
munster/munster_000168_000019_leftImg8bit.png
munster/munster_000167_000019_leftImg8bit.png
munster/munster_000021_000019_leftImg8bit.png
munster/munster_000073_000019_leftImg8bit.png
munster/munster_000089_000019_leftImg8bit.png
munster/munster_000060_000019_leftImg8bit.png
munster/munster_000155_000019_leftImg8bit.png
munster/munster_000140_000019_leftImg8bit.png
munster/munster_000145_000019_leftImg8bit.png
munster/munster_000077_000019_leftImg8bit.png
munster/munster_000018_000019_leftImg8bit.png
munster/munster_000045_000019_leftImg8bit.png
munster/munster_000166_000019_leftImg8bit.png
munster/munster_000037_000019_leftImg8bit.png
munster/munster_000112_000019_leftImg8bit.png
munster/munster_000080_000019_leftImg8bit.png
munster/munster_000144_000019_leftImg8bit.png
munster/munster_000142_000019_leftImg8bit.png
munster/munster_000070_000019_leftImg8bit.png
munster/munster_000044_000019_leftImg8bit.png
munster/munster_000137_000019_leftImg8bit.png
munster/munster_000041_000019_leftImg8bit.png
munster/munster_000113_000019_leftImg8bit.png
munster/munster_000075_000019_leftImg8bit.png
munster/munster_000157_000019_leftImg8bit.png
munster/munster_000158_000019_leftImg8bit.png
munster/munster_000109_000019_leftImg8bit.png
munster/munster_000033_000019_leftImg8bit.png
munster/munster_000088_000019_leftImg8bit.png
munster/munster_000090_000019_leftImg8bit.png
munster/munster_000114_000019_leftImg8bit.png
munster/munster_000171_000019_leftImg8bit.png
munster/munster_000013_000019_leftImg8bit.png
munster/munster_000130_000019_leftImg8bit.png
munster/munster_000016_000019_leftImg8bit.png
munster/munster_000136_000019_leftImg8bit.png
munster/munster_000007_000019_leftImg8bit.png
munster/munster_000014_000019_leftImg8bit.png
munster/munster_000052_000019_leftImg8bit.png
munster/munster_000104_000019_leftImg8bit.png
munster/munster_000173_000019_leftImg8bit.png
munster/munster_000057_000019_leftImg8bit.png
munster/munster_000072_000019_leftImg8bit.png
munster/munster_000003_000019_leftImg8bit.png
munster/munster_000161_000019_leftImg8bit.png
munster/munster_000002_000019_leftImg8bit.png
munster/munster_000028_000019_leftImg8bit.png
munster/munster_000051_000019_leftImg8bit.png
munster/munster_000105_000019_leftImg8bit.png
munster/munster_000061_000019_leftImg8bit.png
munster/munster_000058_000019_leftImg8bit.png
munster/munster_000094_000019_leftImg8bit.png
munster/munster_000027_000019_leftImg8bit.png
munster/munster_000062_000019_leftImg8bit.png
munster/munster_000127_000019_leftImg8bit.png
munster/munster_000110_000019_leftImg8bit.png
munster/munster_000170_000019_leftImg8bit.png
munster/munster_000023_000019_leftImg8bit.png
munster/munster_000084_000019_leftImg8bit.png
munster/munster_000121_000019_leftImg8bit.png
munster/munster_000087_000019_leftImg8bit.png
munster/munster_000097_000019_leftImg8bit.png
munster/munster_000119_000019_leftImg8bit.png
munster/munster_000128_000019_leftImg8bit.png
munster/munster_000078_000019_leftImg8bit.png
munster/munster_000010_000019_leftImg8bit.png
munster/munster_000015_000019_leftImg8bit.png
munster/munster_000048_000019_leftImg8bit.png
munster/munster_000085_000019_leftImg8bit.png
munster/munster_000164_000019_leftImg8bit.png
munster/munster_000111_000019_leftImg8bit.png
munster/munster_000099_000019_leftImg8bit.png
munster/munster_000117_000019_leftImg8bit.png
munster/munster_000009_000019_leftImg8bit.png
munster/munster_000049_000019_leftImg8bit.png
munster/munster_000148_000019_leftImg8bit.png
munster/munster_000022_000019_leftImg8bit.png
munster/munster_000131_000019_leftImg8bit.png
munster/munster_000006_000019_leftImg8bit.png
munster/munster_000005_000019_leftImg8bit.png
munster/munster_000102_000019_leftImg8bit.png
munster/munster_000160_000019_leftImg8bit.png
munster/munster_000107_000019_leftImg8bit.png
munster/munster_000095_000019_leftImg8bit.png
munster/munster_000106_000019_leftImg8bit.png
munster/munster_000034_000019_leftImg8bit.png
munster/munster_000143_000019_leftImg8bit.png
munster/munster_000017_000019_leftImg8bit.png
munster/munster_000040_000019_leftImg8bit.png
munster/munster_000152_000019_leftImg8bit.png
munster/munster_000154_000019_leftImg8bit.png
munster/munster_000100_000019_leftImg8bit.png
munster/munster_000004_000019_leftImg8bit.png
munster/munster_000141_000019_leftImg8bit.png
munster/munster_000011_000019_leftImg8bit.png
munster/munster_000055_000019_leftImg8bit.png
munster/munster_000134_000019_leftImg8bit.png
munster/munster_000054_000019_leftImg8bit.png
munster/munster_000064_000019_leftImg8bit.png
munster/munster_000039_000019_leftImg8bit.png
munster/munster_000103_000019_leftImg8bit.png
munster/munster_000092_000019_leftImg8bit.png
munster/munster_000172_000019_leftImg8bit.png
munster/munster_000042_000019_leftImg8bit.png
munster/munster_000124_000019_leftImg8bit.png
munster/munster_000069_000019_leftImg8bit.png
munster/munster_000026_000019_leftImg8bit.png
munster/munster_000120_000019_leftImg8bit.png
munster/munster_000031_000019_leftImg8bit.png
munster/munster_000162_000019_leftImg8bit.png
munster/munster_000056_000019_leftImg8bit.png
munster/munster_000081_000019_leftImg8bit.png
munster/munster_000123_000019_leftImg8bit.png
munster/munster_000125_000019_leftImg8bit.png
munster/munster_000082_000019_leftImg8bit.png
munster/munster_000133_000019_leftImg8bit.png
munster/munster_000126_000019_leftImg8bit.png
munster/munster_000063_000019_leftImg8bit.png
munster/munster_000008_000019_leftImg8bit.png
munster/munster_000149_000019_leftImg8bit.png
munster/munster_000076_000019_leftImg8bit.png
munster/munster_000091_000019_leftImg8bit.png

View File

@ -0,0 +1,114 @@
# Copyright 2021 Huawei Technologies Co., Ltd
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ============================================================================
"""
######################## eval DDM example ########################
eval DDM according to model file:
python eval.py --data_path /YourDataPath --pretrained Your.ckpt
"""
import os
import argparse
import numpy as np
import mindspore.dataset as ds
from mindspore.ops import ResizeBilinear
from mindspore.train.serialization import load_checkpoint, load_param_into_net
from mindspore import context, Tensor
import mindspore.common.dtype as mstype
from dataset import init_vid_dataset
from config import cfg
from net import deeplabv2_mindspore
from utils.func import per_class_iu, fast_hist
parser = argparse.ArgumentParser(description='Check_Point File Path')
parser.add_argument('--pretrained', type=str)
parser.add_argument("--data_path", type=str)
args = parser.parse_known_args()[0]
net = deeplabv2_mindspore.get_deeplab_v2()
param_dict = load_checkpoint(args.pretrained)
load_param_into_net(net, param_dict)
test_dataset = init_vid_dataset(name=cfg.TEST.DATA,
root=args.data_path,
list_path=cfg.TEST.DATA_LIST,
num_classes=cfg.NUM_CLASSES,
set_name=cfg.TEST.SET,
info_path=cfg.TEST.INFO,
crop_size=cfg.TEST.INPUT_SIZE,
mean=cfg.TEST.IMG_MEAN,
labels_size=cfg.TEST.OUTPUT_SIZE)
test_loader = ds.GeneratorDataset(test_dataset,
num_parallel_workers=1,
shuffle=False,
column_names=["data", "label"])
test_loader = test_loader.batch(cfg.TEST.BATCH_SIZE, drop_remainder=True)
def evaluate(model, testloader, num_class, fixed_test_size=True, verbose=True):
"""
Evaluation during training.
"""
hist = np.zeros((cfg.NUM_CLASSES, cfg.NUM_CLASSES))
test_iter = testloader.create_dict_iterator(output_numpy=True)
nt = 0
for ti in test_iter:
image, label = Tensor(ti["data"], mstype.float32), Tensor(ti["label"], mstype.float32)
if not fixed_test_size:
interp = ResizeBilinear(size=(label.shape[1], label.shape[2]), align_corners=True)
else:
interp = ResizeBilinear(size=(cfg.TEST.OUTPUT_SIZE[1], cfg.TEST.OUTPUT_SIZE[0]), align_corners=True)
pred_main = model(Tensor(image, mstype.float32))[1]
output = interp(pred_main).asnumpy()[0]
output = output.transpose((1, 2, 0))
output = np.argmax(output, axis=2)
label = label.asnumpy()[0]
hist += fast_hist(label.flatten(), output.flatten(), cfg.NUM_CLASSES)
if verbose and nt > 0 and nt % 100 == 0:
print('{:d} : {:0.2f}'.format(
nt, 100 * np.nanmean(per_class_iu(hist))))
nt += 1
inters_over_union_classes = per_class_iu(hist)
# pickle_dump(all_res, cache_path)
if cfg.NUM_CLASSES == 19:
computed_miou_19 = round(np.nanmean(inters_over_union_classes) * 100, 2)
computed_miou_16 = round(np.mean(inters_over_union_classes[[0, 1, 2, 3, 4, 5,\
6, 7, 8, 10, 11, 12, 13, 15, 17, 18]]) * 100, 2)
computed_miou_13 = round(np.mean(inters_over_union_classes[[0, 1, 2, 6, 7, 8,\
10, 11, 12, 13, 15, 17, 18]]) * 100, 2)
elif cfg.NUM_CLASSES == 16:
computed_miou_19 = 0
computed_miou_16 = round(np.nanmean(inters_over_union_classes) * 100, 2)
computed_miou_13 = round(np.mean(inters_over_union_classes[[0, 1, 2, 6, 7, 8,\
9, 10, 11, 12, 13, 14, 15]]) * 100, 2)
print('==>Current mIoUs: \n', 'Class 19: ', computed_miou_19, '\n', 'Class 16: ', computed_miou_16,
'\n', 'Class 13: ', computed_miou_13)
if verbose:
display_stats(num_class, inters_over_union_classes)
return [computed_miou_19, computed_miou_16, computed_miou_13], inters_over_union_classes
def display_stats(num_class, inters_over_union_classes):
"""print classes' performance"""
for ind_class in range(num_class):
print(str(ind_class) + '\t' + str(round(inters_over_union_classes[ind_class] * 100, 2)))
context.set_context(mode=context.GRAPH_MODE,
device_target="Ascend",
save_graphs=False,
device_id=int(os.getenv("DEVICE_ID")))
evaluate(net, test_loader, cfg.NUM_CLASSES, fixed_test_size=True, verbose=True)

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

View File

@ -0,0 +1,202 @@
# Copyright 2021 Huawei Technologies Co., Ltd
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ============================================================================
""" architecture of deeplabv2. """
import mindspore.nn as nn
from mindspore.common.initializer import Normal
from mindspore.ops import operations as P
from mindspore.ops import Shape
AFFINE_PAR = True
class Bottleneck(nn.Cell):
"""build bottleneck module"""
expansion = 4
def __init__(self, inplanes, planes, stride=1, dilation=1, downsample=None, freeze_bn_affine=True):
super(Bottleneck, self).__init__()
self.conv1 = nn.Conv2d(inplanes, planes, kernel_size=1, stride=stride,
has_bias=False, weight_init=Normal(0.01))
self.bn1 = nn.BatchNorm2d(planes, affine=AFFINE_PAR, use_batch_statistics=None)
if freeze_bn_affine:
for i in self.bn1.parameters_dict().values():
i.requires_grad = False
padding = dilation
self.conv2 = nn.Conv2d(planes, planes, kernel_size=3, stride=1,
padding=padding, has_bias=False, dilation=dilation,
weight_init=Normal(0.01), pad_mode="pad")
self.bn2 = nn.BatchNorm2d(planes, affine=AFFINE_PAR, use_batch_statistics=None)
if freeze_bn_affine:
for i in self.bn2.parameters_dict().values():
i.requires_grad = False
self.conv3 = nn.Conv2d(planes, planes * 4, kernel_size=1, has_bias=False, weight_init=Normal(0.01))
self.bn3 = nn.BatchNorm2d(planes * 4, affine=AFFINE_PAR, use_batch_statistics=None)
if freeze_bn_affine:
for i in self.bn3.parameters_dict().values():
i.requires_grad = False
self.relu = nn.ReLU()
self.downsample = downsample
self.stride = stride
self.add = P.Add()
def construct(self, x):
"""construct bottleneck module"""
residual = x
out = self.conv1(x)
out = self.bn1(out)
out = self.relu(out)
out = self.conv2(out)
out = self.bn2(out)
out = self.relu(out)
out = self.conv3(out)
out = self.bn3(out)
if self.downsample is not None:
residual = self.downsample(x)
out = self.add(out, residual)
out = self.relu(out)
return out
class ClassifierModule(nn.Cell):
"""build classify module"""
def __init__(self, inplanes, dilation_series, padding_series, num_classes):
super(ClassifierModule, self).__init__()
self.conv2d_list = nn.CellList()
for dilation, padding in zip(dilation_series, padding_series):
self.conv2d_list.append(
nn.Conv2d(inplanes, num_classes, kernel_size=3, stride=1, padding=padding, pad_mode="pad",
dilation=dilation, has_bias=True, weight_init=Normal(0.01)))
def construct(self, x):
"""construct classify module"""
out = self.conv2d_list[0](x)
for i in range(1, len(self.conv2d_list)):
out += self.conv2d_list[i](x)
return out
class ResNetMulti(nn.Cell):
"""build resnet"""
def __init__(self, block, layers, num_classes, multi_level, freeze_bn_affine=True):
self.multi_level = multi_level
self.inplanes = 64
super(ResNetMulti, self).__init__()
self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3,
has_bias=False, weight_init=Normal(0.01), pad_mode="pad")
self.bn1 = nn.BatchNorm2d(64, affine=AFFINE_PAR, use_batch_statistics=None)
self.freeze_bn_affine = freeze_bn_affine
if self.freeze_bn_affine:
for i in self.bn1.parameters_dict().values():
i.requires_grad = False
self.relu = nn.ReLU()
self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, pad_mode="same")
self.layer1 = self._make_layer(block, 64, layers[0])
self.layer2 = self._make_layer(block, 128, layers[1], stride=2)
self.layer3 = self._make_layer(block, 256, layers[2], stride=1, dilation=2)
self.layer4 = self._make_layer(block, 512, layers[3], stride=1, dilation=4)
if self.multi_level:
self.layer5 = ClassifierModule(1024, [6, 12, 18, 24], [6, 12, 18, 24], num_classes)
self.layer6 = ClassifierModule(2048, [6, 12, 18, 24], [6, 12, 18, 24], num_classes)
self.p = P.Print()
self.shape = Shape()
self.pad = nn.Pad(((0, 0), (0, 0), (1, 1), (1, 1)), "CONSTANT")
def _make_layer(self, block, planes, blocks, stride=1, dilation=1):
"""define layers"""
downsample = None
if (stride != 1
or self.inplanes != planes * block.expansion
or dilation == 2
or dilation == 4):
downsample = nn.SequentialCell([
nn.Conv2d(self.inplanes, planes * block.expansion,
kernel_size=1, stride=stride, has_bias=False, weight_init=Normal(0.01)),
nn.BatchNorm2d(planes * block.expansion, affine=AFFINE_PAR, use_batch_statistics=None)])
if self.freeze_bn_affine:
downsample = nn.SequentialCell([
nn.Conv2d(self.inplanes, planes * block.expansion,
kernel_size=1, stride=stride, has_bias=False, weight_init=Normal(0.01)),
nn.BatchNorm2d(planes * block.expansion, affine=False, use_batch_statistics=None)])
# for i in downsample._cells['1'].parameters_dict().values():
# i.requires_grad = False
layers = []
layers.append(
block(self.inplanes, planes, stride, dilation=dilation, downsample=downsample,
freeze_bn_affine=self.freeze_bn_affine))
self.inplanes = planes * block.expansion
for i in range(1, blocks):
layers.append(block(self.inplanes, planes, dilation=dilation,
freeze_bn_affine=self.freeze_bn_affine))
print(i)
return nn.SequentialCell(layers)
def construct(self, x):
"""construct resnet"""
x = self.conv1(x)
x = self.bn1(x)
x = self.relu(x)
x = self.pad(x)
x = self.maxpool(x)
x = self.layer1(x)
x = self.layer2(x)
x = self.layer3(x)
if self.multi_level:
x1 = self.layer5(x)
else:
x1 = None
x2 = self.layer4(x)
x2 = self.layer6(x2)
return x1, x2
def freeze_batchnorm(self):
"""freeze batchnorm"""
self.apply(freeze_bn_module)
def freeze_bn_module(m):
"""Freeze bn module.
param m: a torch module
"""
classname = type(m).__name__
if classname.find('BatchNorm') != -1:
m.eval()
def get_deeplab_v2(num_classes=19, multi_level=True, freeze_bn_affine=True):
"""get deeplabv2 net"""
model = ResNetMulti(Bottleneck, [3, 4, 23, 3], num_classes, multi_level,
freeze_bn_affine=freeze_bn_affine)
return model

View File

@ -0,0 +1,25 @@
# Copyright 2021 Huawei Technologies Co., Ltd
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ============================================================================
"""calculate mIou."""
import numpy as np
def fast_hist(a, b, n):
k = (a >= 0) & (a < n)
return np.bincount(n * a[k].astype(int) + b[k], minlength=n ** 2).reshape(n, n)
def per_class_iu(hist):
return np.diag(hist) / (hist.sum(1) + hist.sum(0) - np.diag(hist))

View File

@ -0,0 +1,27 @@
# Copyright 2021 Huawei Technologies Co., Ltd
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ============================================================================
"""load info."""
import json
import yaml
def json_load(file_path):
with open(file_path, 'r') as fp:
return json.load(fp)
def yaml_load(file_path):
with open(file_path, 'r') as f:
return yaml.load(f)