├── .gitignore
├── LICENSE
├── README.md
├── builders
├── __init__.py
├── dataset_builder.py
└── model_builder.py
├── dataset
├── __init__.py
├── camvid.py
├── camvid
│ ├── camvid_test_list.txt
│ ├── camvid_train_list.txt
│ ├── camvid_trainval_list.txt
│ └── camvid_val_list.txt
├── cityscapes.py
├── cityscapes
│ ├── cityscapes_test_list.txt
│ ├── cityscapes_train_list.txt
│ ├── cityscapes_trainval_list.txt
│ └── cityscapes_val_list.txt
└── inform
│ ├── camvid_inform.pkl
│ └── cityscapes_inform.pkl
├── eval_fps.py
├── image
├── DABNet_demo.png
├── architecture.png
├── iou_vs_epochs.png
└── loss_vs_epochs.png
├── model
└── DABNet.py
├── predict.py
├── test.py
├── train.py
└── utils
├── colorize_mask.py
├── convert_state.py
├── loss.py
├── lr_scheduler.py
├── metric.py
├── trainID2labelID.py
└── utils.py
/.gitignore:
--------------------------------------------------------------------------------
1 | __pycache__/
2 | *.py[cod]
3 | *.pyc
4 | *.pyo
5 | *.pth
6 | .idea/
7 | result/
8 | checkpoint/
9 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 Gen Li
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # DABNet: Depth-wise Asymmetric Bottleneck for Real-time Semantic Segmentation
2 | This project contains the Pytorch implementation for the proposed DABNet: [[arXiv]](https://arxiv.org/abs/1907.11357).
3 |
4 | ### Introduction
5 |
6 |
7 | As a pixel-level prediction task, semantic segmentation needs large computational cost with enormous parameters to obtain high performance. Recently, due to the increasing demand for autonomous systems and robots, it is significant to make a tradeoff between accuracy and inference speed. In this paper, we propose a novel Depthwise Asymmetric Bottleneck (DAB) module to address this dilemma, which efficiently adopts depth-wise asymmetric convolution and dilated convolution to build a bottleneck structure. Based on the DAB module, we design a Depth-wise Asymmetric Bottleneck Network (DABNet) especially for real-time semantic segmentation, which creates sufficient receptive field and densely utilizes the contextual information. Experiments on Cityscapes and CamVid datasets demonstrate that the proposed DABNet achieves a balance between speed and precision. Specifically, without any pretrained model and postprocessing, it achieves 70.1% Mean IoU on the Cityscapes test dataset with only 0.76 million parameters and a speed of 104 FPS on a single GTX 1080Ti card.
8 |
9 | ### Installation
10 | - Env: Python 3.6; PyTorch 1.0; CUDA 9.0; cuDNN V7
11 | - Install some packages
12 | ```
13 | pip install opencv-python pillow numpy matplotlib
14 | ```
15 | - Clone this repository
16 | ```
17 | git clone https://github.com/Reagan1311/DABNet
18 | cd DABNet
19 | ```
20 | - One GPU with 11GB is needed
21 |
22 | ### Dataset
23 | You need to download the two dataset——CamVid and Cityscapes, and put the files in the `dataset` folder with following structure.
24 | ```
25 | ├── camvid
26 | | ├── train
27 | | ├── test
28 | | ├── val
29 | | ├── trainannot
30 | | ├── testannot
31 | | ├── valannot
32 | | ├── camvid_trainval_list.txt
33 | | ├── camvid_train_list.txt
34 | | ├── camvid_test_list.txt
35 | | └── camvid_val_list.txt
36 | ├── cityscapes
37 | | ├── gtCoarse
38 | | ├── gtFine
39 | | ├── leftImg8bit
40 | | ├── cityscapes_trainval_list.txt
41 | | ├── cityscapes_train_list.txt
42 | | ├── cityscapes_test_list.txt
43 | | └── cityscapes_val_list.txt
44 | ```
45 |
46 | ### Training
47 |
48 | - You can run: `python train.py -h` to check the detail of optional arguments.
49 | Basically, in the `train.py`, you can set the dataset, train type, epochs and batch size, etc.
50 | ```
51 | python train.py --dataset ${camvid, cityscapes} --train_type ${train, trainval} --max_epochs ${EPOCHS} --batch_size ${BATCH_SIZE} --lr ${LR} --resume ${CHECKPOINT_FILE}
52 | ```
53 | - training on Cityscapes train set
54 | ```
55 | python train.py --dataset cityscapes
56 | ```
57 | - training on CamVid train and val set
58 | ```
59 | python train.py --dataset camvid --train_type trainval --max_epochs 1000 --lr 1e-3 --batch_size 16
60 | ```
61 | - During training course, every 50 epochs, we will record the mean IoU of train set, validation set and training loss to draw a plot, so you can check whether the training process is normal.
62 |
63 | Val mIoU vs Epochs | Train loss vs Epochs
64 | :-------------------------:|:-------------------------:
65 |  | 
66 |
67 | (PS: Based on the graphs, we think that training is not saturated yet, maybe the LR is too large, so you can change the hyper-parameter to get better result)
68 |
69 | ### Testing
70 | - After training, the checkpoint will be saved at `checkpoint` folder, you can use `test.py` to get the result.
71 | ```
72 | python test.py --dataset ${camvid, cityscapes} --checkpoint ${CHECKPOINT_FILE}
73 | ```
74 | ### Evaluation
75 | - For those dataset that do not provide label on the test set (e.g. Cityscapes), you can use `predict.py` to save all the output images, then submit to official webpage for evaluation.
76 | ```
77 | python predict.py --checkpoint ${CHECKPOINT_FILE}
78 | ```
79 |
80 |
81 | ### Inference Speed
82 | - You can run the `eval_fps.py` to test the model inference speed, input the image size such as `512,1024`.
83 | ```
84 | python eval_fps.py 512,1024
85 | ```
86 |
87 | ### Results
88 |
89 | - quantitative results:
90 |
91 | |Dataset|Pretrained|Train type|mIoU|FPS|model|
92 | |:-:|:-:|:-:|:-:|:-:|:-:|
93 | |Cityscapes(Fine)|from scratch|trainval|**70.07%**|104|[Detailed result](https://www.cityscapes-dataset.com/anonymous-results/?id=16896cc219a6d5af875f8aa3d528a0f7c4ce57644aece957938eae9062ed8070)|
94 | |Cityscapes(Fine)|from scratch|train|**69.57%**|104|[GoogleDrive](https://drive.google.com/open?id=1ZKGBQogSqxyKD-QIJgzyDXw2TR0HUePA)|
95 | |CamVid|from scratch|trainval|**66.72%**|146|[GoogleDrive](https://drive.google.com/open?id=1EPyv9-FUQwr_23w3kLwwiFKD13uRyFRk)|
96 |
97 | - qualitative segmentation examples:
98 |
99 |
100 |
101 | ### Citation
102 |
103 | Please consider citing the [DABNet](https://arxiv.org/abs/1907.11357) if it's helpful for your research.
104 | ```
105 | @inproceedings{li2019dabnet,
106 | title={DABNet: Depth-wise Asymmetric Bottleneck for Real-time Semantic Segmentation},
107 | author={Li, Gen and Kim, Joongkyu},
108 | booktitle={British Machine Vision Conference},
109 | year={2019}
110 | }
111 | ```
112 | ### Thanks to the Third Party Libs
113 | [Pytorch](https://github.com/pytorch/pytorch)
114 | [Pytorch-Deeplab](https://github.com/speedinghzl/Pytorch-Deeplab)
115 | [ERFNet](https://github.com/Eromera/erfnet_pytorch)
116 | [CGNet](https://github.com/wutianyiRosun/CGNet)
117 |
--------------------------------------------------------------------------------
/builders/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Reagan1311/DABNet/b8d62fe7f14ae4909a9e9aad1dd6e0ade98431cd/builders/__init__.py
--------------------------------------------------------------------------------
/builders/dataset_builder.py:
--------------------------------------------------------------------------------
1 | import os
2 | import pickle
3 | from torch.utils import data
4 | from dataset.cityscapes import CityscapesDataSet, CityscapesTrainInform, CityscapesValDataSet, CityscapesTestDataSet
5 | from dataset.camvid import CamVidDataSet, CamVidValDataSet, CamVidTrainInform, CamVidTestDataSet
6 |
7 |
8 | def build_dataset_train(dataset, input_size, batch_size, train_type, random_scale, random_mirror, num_workers):
9 | data_dir = os.path.join('./dataset/', dataset)
10 | dataset_list = os.path.join(dataset, '_trainval_list.txt')
11 | train_data_list = os.path.join(data_dir, dataset + '_' + train_type + '_list.txt')
12 | val_data_list = os.path.join(data_dir, dataset + '_val' + '_list.txt')
13 | inform_data_file = os.path.join('./dataset/inform/', dataset + '_inform.pkl')
14 |
15 | # inform_data_file collect the information of mean, std and weigth_class
16 | if not os.path.isfile(inform_data_file):
17 | print("%s is not found" % (inform_data_file))
18 | if dataset == "cityscapes":
19 | dataCollect = CityscapesTrainInform(data_dir, 19, train_set_file=dataset_list,
20 | inform_data_file=inform_data_file)
21 | elif dataset == 'camvid':
22 | dataCollect = CamVidTrainInform(data_dir, 11, train_set_file=dataset_list,
23 | inform_data_file=inform_data_file)
24 | else:
25 | raise NotImplementedError(
26 | "This repository now supports two datasets: cityscapes and camvid, %s is not included" % dataset)
27 |
28 | datas = dataCollect.collectDataAndSave()
29 | if datas is None:
30 | print("error while pickling data. Please check.")
31 | exit(-1)
32 | else:
33 | print("find file: ", str(inform_data_file))
34 | datas = pickle.load(open(inform_data_file, "rb"))
35 |
36 | if dataset == "cityscapes":
37 |
38 | trainLoader = data.DataLoader(
39 | CityscapesDataSet(data_dir, train_data_list, crop_size=input_size, scale=random_scale,
40 | mirror=random_mirror, mean=datas['mean']),
41 | batch_size=batch_size, shuffle=True, num_workers=num_workers,
42 | pin_memory=True, drop_last=True)
43 |
44 | valLoader = data.DataLoader(
45 | CityscapesValDataSet(data_dir, val_data_list, f_scale=1, mean=datas['mean']),
46 | batch_size=1, shuffle=True, num_workers=num_workers, pin_memory=True,
47 | drop_last=True)
48 |
49 | return datas, trainLoader, valLoader
50 |
51 | elif dataset == "camvid":
52 |
53 | trainLoader = data.DataLoader(
54 | CamVidDataSet(data_dir, train_data_list, crop_size=input_size, scale=random_scale,
55 | mirror=random_mirror, mean=datas['mean']),
56 | batch_size=batch_size, shuffle=True, num_workers=num_workers,
57 | pin_memory=True, drop_last=True)
58 |
59 | valLoader = data.DataLoader(
60 | CamVidValDataSet(data_dir, val_data_list, f_scale=1, mean=datas['mean']),
61 | batch_size=1, shuffle=True, num_workers=num_workers, pin_memory=True)
62 |
63 | return datas, trainLoader, valLoader
64 |
65 |
66 | def build_dataset_test(dataset, num_workers, none_gt=False):
67 | data_dir = os.path.join('./dataset/', dataset)
68 | dataset_list = os.path.join(dataset, '_trainval_list.txt')
69 | test_data_list = os.path.join(data_dir, dataset + '_test' + '_list.txt')
70 | inform_data_file = os.path.join('./dataset/inform/', dataset + '_inform.pkl')
71 |
72 | # inform_data_file collect the information of mean, std and weigth_class
73 | if not os.path.isfile(inform_data_file):
74 | print("%s is not found" % (inform_data_file))
75 | if dataset == "cityscapes":
76 | dataCollect = CityscapesTrainInform(data_dir, 19, train_set_file=dataset_list,
77 | inform_data_file=inform_data_file)
78 | elif dataset == 'camvid':
79 | dataCollect = CamVidTrainInform(data_dir, 11, train_set_file=dataset_list,
80 | inform_data_file=inform_data_file)
81 | else:
82 | raise NotImplementedError(
83 | "This repository now supports two datasets: cityscapes and camvid, %s is not included" % dataset)
84 |
85 | datas = dataCollect.collectDataAndSave()
86 | if datas is None:
87 | print("error while pickling data. Please check.")
88 | exit(-1)
89 | else:
90 | print("find file: ", str(inform_data_file))
91 | datas = pickle.load(open(inform_data_file, "rb"))
92 |
93 | if dataset == "cityscapes":
94 | # for cityscapes, if test on validation set, set none_gt to False
95 | # if test on the test set, set none_gt to True
96 | if none_gt:
97 | testLoader = data.DataLoader(
98 | CityscapesTestDataSet(data_dir, test_data_list, mean=datas['mean']),
99 | batch_size=1, shuffle=False, num_workers=num_workers, pin_memory=True)
100 | else:
101 | test_data_list = os.path.join(data_dir, dataset + '_val' + '_list.txt')
102 | testLoader = data.DataLoader(
103 | CityscapesValDataSet(data_dir, test_data_list, mean=datas['mean']),
104 | batch_size=1, shuffle=False, num_workers=num_workers, pin_memory=True)
105 |
106 | return datas, testLoader
107 |
108 | elif dataset == "camvid":
109 |
110 | testLoader = data.DataLoader(
111 | CamVidValDataSet(data_dir, test_data_list, mean=datas['mean']),
112 | batch_size=1, shuffle=False, num_workers=num_workers, pin_memory=True)
113 |
114 | return datas, testLoader
115 |
--------------------------------------------------------------------------------
/builders/model_builder.py:
--------------------------------------------------------------------------------
1 | from model.DABNet import DABNet
2 |
3 |
4 | def build_model(model_name, num_classes):
5 | if model_name == 'DABNet':
6 | return DABNet(classes=num_classes)
7 |
--------------------------------------------------------------------------------
/dataset/__init__.py:
--------------------------------------------------------------------------------
1 | from .camvid import *
2 | from .cityscapes import *
3 |
--------------------------------------------------------------------------------
/dataset/camvid.py:
--------------------------------------------------------------------------------
1 | import os.path as osp
2 | import numpy as np
3 | import random
4 | import cv2
5 | from torch.utils import data
6 | import pickle
7 |
8 | """
9 | CamVid is a road scene understanding dataset with 367 training images and 233 testing images of day and dusk scenes.
10 | The challenge is to segment 11 classes such as road, building, cars, pedestrians, signs, poles, side-walk etc. We
11 | resize images to 360x480 pixels for training and testing.
12 | """
13 |
14 |
15 | class CamVidDataSet(data.Dataset):
16 | """
17 | CamVidDataSet is employed to load train set
18 | Args:
19 | root: the CamVid dataset path,
20 | list_path: camvid_train_list.txt, include partial path
21 |
22 | """
23 |
24 | def __init__(self, root='', list_path='', max_iters=None, crop_size=(360, 360),
25 | mean=(128, 128, 128), scale=True, mirror=True, ignore_label=11):
26 | self.root = root
27 | self.list_path = list_path
28 | self.crop_h, self.crop_w = crop_size
29 | self.scale = scale
30 | self.ignore_label = ignore_label
31 | self.mean = mean
32 | self.is_mirror = mirror
33 | self.img_ids = [i_id.strip() for i_id in open(list_path)]
34 | if not max_iters == None:
35 | self.img_ids = self.img_ids * int(np.ceil(float(max_iters) / len(self.img_ids)))
36 | self.files = []
37 |
38 | # for split in ["train", "trainval", "val"]:
39 | for name in self.img_ids:
40 | img_file = osp.join(self.root, name.split()[0])
41 | # print(img_file)
42 | label_file = osp.join(self.root, name.split()[1])
43 | # print(label_file)
44 | self.files.append({
45 | "img": img_file,
46 | "label": label_file,
47 | "name": name
48 | })
49 |
50 | print("length of train set: ", len(self.files))
51 |
52 | def __len__(self):
53 | return len(self.files)
54 |
55 | def __getitem__(self, index):
56 | datafiles = self.files[index]
57 | image = cv2.imread(datafiles["img"], cv2.IMREAD_COLOR)
58 | label = cv2.imread(datafiles["label"], cv2.IMREAD_GRAYSCALE)
59 | size = image.shape
60 | name = datafiles["name"]
61 | if self.scale:
62 | scale = [0.75, 1.0, 1.25, 1.5, 1.75, 2.0] # random resize between 0.5 and 2
63 | f_scale = scale[random.randint(0, 5)]
64 | # f_scale = 0.5 + random.randint(0, 15) / 10.0 #random resize between 0.5 and 2
65 | image = cv2.resize(image, None, fx=f_scale, fy=f_scale, interpolation=cv2.INTER_LINEAR)
66 | label = cv2.resize(label, None, fx=f_scale, fy=f_scale, interpolation=cv2.INTER_NEAREST)
67 |
68 | image = np.asarray(image, np.float32)
69 |
70 | image -= self.mean
71 | # image = image.astype(np.float32) / 255.0
72 | image = image[:, :, ::-1] # change to RGB
73 | img_h, img_w = label.shape
74 | pad_h = max(self.crop_h - img_h, 0)
75 | pad_w = max(self.crop_w - img_w, 0)
76 | if pad_h > 0 or pad_w > 0:
77 | img_pad = cv2.copyMakeBorder(image, 0, pad_h, 0,
78 | pad_w, cv2.BORDER_CONSTANT,
79 | value=(0.0, 0.0, 0.0))
80 | label_pad = cv2.copyMakeBorder(label, 0, pad_h, 0,
81 | pad_w, cv2.BORDER_CONSTANT,
82 | value=(self.ignore_label,))
83 | else:
84 | img_pad, label_pad = image, label
85 |
86 | img_h, img_w = label_pad.shape
87 | h_off = random.randint(0, img_h - self.crop_h)
88 | w_off = random.randint(0, img_w - self.crop_w)
89 | # roi = cv2.Rect(w_off, h_off, self.crop_w, self.crop_h);
90 | image = np.asarray(img_pad[h_off: h_off + self.crop_h, w_off: w_off + self.crop_w], np.float32)
91 | label = np.asarray(label_pad[h_off: h_off + self.crop_h, w_off: w_off + self.crop_w], np.float32)
92 |
93 | image = image.transpose((2, 0, 1)) # NHWC -> NCHW
94 |
95 | if self.is_mirror:
96 | flip = np.random.choice(2) * 2 - 1
97 | image = image[:, :, ::flip]
98 | label = label[:, ::flip]
99 |
100 | return image.copy(), label.copy(), np.array(size), name
101 |
102 |
103 | class CamVidValDataSet(data.Dataset):
104 | """
105 | CamVidValDataSet is employed to load val set
106 | Args:
107 | root: the CamVid dataset path,
108 | list_path: camvid_val_list.txt, include partial path
109 |
110 | """
111 |
112 | def __init__(self, root='', list_path='',
113 | f_scale=1, mean=(128, 128, 128), ignore_label=11):
114 | self.root = root
115 | self.list_path = list_path
116 | self.ignore_label = ignore_label
117 | self.mean = mean
118 | self.f_scale = f_scale
119 | self.img_ids = [i_id.strip() for i_id in open(list_path)]
120 | self.files = []
121 | for name in self.img_ids:
122 | img_file = osp.join(self.root, name.split()[0])
123 | # print(img_file)
124 | label_file = osp.join(self.root, name.split()[1])
125 | # print(label_file)
126 | image_name = name.strip().split()[0].strip().split('/', 1)[1].split('.')[0]
127 | # print("image_name: ",image_name)
128 | self.files.append({
129 | "img": img_file,
130 | "label": label_file,
131 | "name": image_name
132 | })
133 |
134 | print("length of Validation set: ", len(self.files))
135 |
136 | def __len__(self):
137 | return len(self.files)
138 |
139 | def __getitem__(self, index):
140 | datafiles = self.files[index]
141 | image = cv2.imread(datafiles["img"], cv2.IMREAD_COLOR)
142 | label = cv2.imread(datafiles["label"], cv2.IMREAD_GRAYSCALE)
143 | size = image.shape
144 | name = datafiles["name"]
145 | if self.f_scale != 1:
146 | image = cv2.resize(image, None, fx=self.f_scale, fy=self.f_scale, interpolation=cv2.INTER_LINEAR)
147 | # label = cv2.resize(label, None, fx=self.f_scale, fy=self.f_scale, interpolation = cv2.INTER_NEAREST)
148 |
149 | image = np.asarray(image, np.float32)
150 |
151 | image -= self.mean
152 | # image = image.astype(np.float32) / 255.0
153 | image = image[:, :, ::-1] # revert to RGB
154 | image = image.transpose((2, 0, 1)) # HWC -> CHW
155 |
156 | # print('image.shape:',image.shape)
157 | return image.copy(), label.copy(), np.array(size), name
158 |
159 |
160 | class CamVidTestDataSet(data.Dataset):
161 | """
162 | CamVidTestDataSet is employed to load test set
163 | Args:
164 | root: the CamVid dataset path,
165 | list_path: camvid_test_list.txt, include partial path
166 |
167 | """
168 |
169 | def __init__(self, root='', list_path='',
170 | mean=(128, 128, 128), ignore_label=11):
171 | self.root = root
172 | self.list_path = list_path
173 | self.ignore_label = ignore_label
174 | self.mean = mean
175 | self.img_ids = [i_id.strip() for i_id in open(list_path)]
176 | self.files = []
177 | for name in self.img_ids:
178 | img_file = osp.join(self.root, name.split()[0])
179 | # print(img_file)
180 | image_name = name.strip().split()[0].strip().split('/', 1)[1].split('.')[0]
181 | # print(image_name)
182 | self.files.append({
183 | "img": img_file,
184 | "name": image_name
185 | })
186 | print("lenth of test set ", len(self.files))
187 |
188 | def __len__(self):
189 | return len(self.files)
190 |
191 | def __getitem__(self, index):
192 | datafiles = self.files[index]
193 |
194 | image = cv2.imread(datafiles["img"], cv2.IMREAD_COLOR)
195 | name = datafiles["name"]
196 |
197 | image = np.asarray(image, np.float32)
198 |
199 | size = image.shape
200 | image -= self.mean
201 | # image = image.astype(np.float32) / 255.0
202 | image = image[:, :, ::-1] # change to RGB
203 | image = image.transpose((2, 0, 1)) # HWC -> CHW
204 |
205 | return image.copy(), np.array(size), name
206 |
207 |
208 | class CamVidTrainInform:
209 | """ To get statistical information about the train set, such as mean, std, class distribution.
210 | The class is employed for tackle class imbalance.
211 | """
212 |
213 | def __init__(self, data_dir='', classes=11, train_set_file="",
214 | inform_data_file="", normVal=1.10):
215 | """
216 | Args:
217 | data_dir: directory where the dataset is kept
218 | classes: number of classes in the dataset
219 | inform_data_file: location where cached file has to be stored
220 | normVal: normalization value, as defined in ERFNet paper
221 | """
222 | self.data_dir = data_dir
223 | self.classes = classes
224 | self.classWeights = np.ones(self.classes, dtype=np.float32)
225 | self.normVal = normVal
226 | self.mean = np.zeros(3, dtype=np.float32)
227 | self.std = np.zeros(3, dtype=np.float32)
228 | self.train_set_file = train_set_file
229 | self.inform_data_file = inform_data_file
230 |
231 | def compute_class_weights(self, histogram):
232 | """to compute the class weights
233 | Args:
234 | histogram: distribution of class samples
235 | """
236 | normHist = histogram / np.sum(histogram)
237 | for i in range(self.classes):
238 | self.classWeights[i] = 1 / (np.log(self.normVal + normHist[i]))
239 |
240 | def readWholeTrainSet(self, fileName, train_flag=True):
241 | """to read the whole train set of current dataset.
242 | Args:
243 | fileName: train set file that stores the image locations
244 | trainStg: if processing training or validation data
245 |
246 | return: 0 if successful
247 | """
248 | global_hist = np.zeros(self.classes, dtype=np.float32)
249 |
250 | no_files = 0
251 | min_val_al = 0
252 | max_val_al = 0
253 | with open(self.data_dir + '/' + fileName, 'r') as textFile:
254 | # with open(fileName, 'r') as textFile:
255 | for line in textFile:
256 | # we expect the text file to contain the data in following format
257 | #
258 | line_arr = line.split()
259 | img_file = ((self.data_dir).strip() + '/' + line_arr[0].strip()).strip()
260 | label_file = ((self.data_dir).strip() + '/' + line_arr[1].strip()).strip()
261 |
262 | label_img = cv2.imread(label_file, 0)
263 | unique_values = np.unique(label_img)
264 | max_val = max(unique_values)
265 | min_val = min(unique_values)
266 |
267 | max_val_al = max(max_val, max_val_al)
268 | min_val_al = min(min_val, min_val_al)
269 |
270 | if train_flag == True:
271 | hist = np.histogram(label_img, self.classes, [0, self.classes - 1])
272 | global_hist += hist[0]
273 |
274 | rgb_img = cv2.imread(img_file)
275 | self.mean[0] += np.mean(rgb_img[:, :, 0])
276 | self.mean[1] += np.mean(rgb_img[:, :, 1])
277 | self.mean[2] += np.mean(rgb_img[:, :, 2])
278 |
279 | self.std[0] += np.std(rgb_img[:, :, 0])
280 | self.std[1] += np.std(rgb_img[:, :, 1])
281 | self.std[2] += np.std(rgb_img[:, :, 2])
282 |
283 | else:
284 | print("we can only collect statistical information of train set, please check")
285 |
286 | if max_val > (self.classes - 1) or min_val < 0:
287 | print('Labels can take value between 0 and number of classes.')
288 | print('Some problem with labels. Please check. label_set:', unique_values)
289 | print('Label Image ID: ' + label_file)
290 | no_files += 1
291 |
292 | # divide the mean and std values by the sample space size
293 | self.mean /= no_files
294 | self.std /= no_files
295 |
296 | # compute the class imbalance information
297 | self.compute_class_weights(global_hist)
298 | return 0
299 |
300 | def collectDataAndSave(self):
301 | """ To collect statistical information of train set and then save it.
302 | The file train.txt should be inside the data directory.
303 | """
304 | print('Processing training data')
305 | return_val = self.readWholeTrainSet(fileName=self.train_set_file)
306 |
307 | print('Pickling data')
308 | if return_val == 0:
309 | data_dict = dict()
310 | data_dict['mean'] = self.mean
311 | data_dict['std'] = self.std
312 | data_dict['classWeights'] = self.classWeights
313 | pickle.dump(data_dict, open(self.inform_data_file, "wb"))
314 | return data_dict
315 | return None
316 |
--------------------------------------------------------------------------------
/dataset/camvid/camvid_test_list.txt:
--------------------------------------------------------------------------------
1 | test/0001TP_008550.png testannot/0001TP_008550.png
2 | test/0001TP_008580.png testannot/0001TP_008580.png
3 | test/0001TP_008610.png testannot/0001TP_008610.png
4 | test/0001TP_008640.png testannot/0001TP_008640.png
5 | test/0001TP_008670.png testannot/0001TP_008670.png
6 | test/0001TP_008700.png testannot/0001TP_008700.png
7 | test/0001TP_008730.png testannot/0001TP_008730.png
8 | test/0001TP_008760.png testannot/0001TP_008760.png
9 | test/0001TP_008790.png testannot/0001TP_008790.png
10 | test/0001TP_008820.png testannot/0001TP_008820.png
11 | test/0001TP_008850.png testannot/0001TP_008850.png
12 | test/0001TP_008880.png testannot/0001TP_008880.png
13 | test/0001TP_008910.png testannot/0001TP_008910.png
14 | test/0001TP_008940.png testannot/0001TP_008940.png
15 | test/0001TP_008970.png testannot/0001TP_008970.png
16 | test/0001TP_009000.png testannot/0001TP_009000.png
17 | test/0001TP_009030.png testannot/0001TP_009030.png
18 | test/0001TP_009060.png testannot/0001TP_009060.png
19 | test/0001TP_009090.png testannot/0001TP_009090.png
20 | test/0001TP_009120.png testannot/0001TP_009120.png
21 | test/0001TP_009150.png testannot/0001TP_009150.png
22 | test/0001TP_009180.png testannot/0001TP_009180.png
23 | test/0001TP_009210.png testannot/0001TP_009210.png
24 | test/0001TP_009240.png testannot/0001TP_009240.png
25 | test/0001TP_009270.png testannot/0001TP_009270.png
26 | test/0001TP_009300.png testannot/0001TP_009300.png
27 | test/0001TP_009330.png testannot/0001TP_009330.png
28 | test/0001TP_009360.png testannot/0001TP_009360.png
29 | test/0001TP_009390.png testannot/0001TP_009390.png
30 | test/0001TP_009420.png testannot/0001TP_009420.png
31 | test/0001TP_009450.png testannot/0001TP_009450.png
32 | test/0001TP_009480.png testannot/0001TP_009480.png
33 | test/0001TP_009510.png testannot/0001TP_009510.png
34 | test/0001TP_009540.png testannot/0001TP_009540.png
35 | test/0001TP_009570.png testannot/0001TP_009570.png
36 | test/0001TP_009600.png testannot/0001TP_009600.png
37 | test/0001TP_009630.png testannot/0001TP_009630.png
38 | test/0001TP_009660.png testannot/0001TP_009660.png
39 | test/0001TP_009690.png testannot/0001TP_009690.png
40 | test/0001TP_009720.png testannot/0001TP_009720.png
41 | test/0001TP_009750.png testannot/0001TP_009750.png
42 | test/0001TP_009780.png testannot/0001TP_009780.png
43 | test/0001TP_009810.png testannot/0001TP_009810.png
44 | test/0001TP_009840.png testannot/0001TP_009840.png
45 | test/0001TP_009870.png testannot/0001TP_009870.png
46 | test/0001TP_009900.png testannot/0001TP_009900.png
47 | test/0001TP_009930.png testannot/0001TP_009930.png
48 | test/0001TP_009960.png testannot/0001TP_009960.png
49 | test/0001TP_009990.png testannot/0001TP_009990.png
50 | test/0001TP_010020.png testannot/0001TP_010020.png
51 | test/0001TP_010050.png testannot/0001TP_010050.png
52 | test/0001TP_010080.png testannot/0001TP_010080.png
53 | test/0001TP_010110.png testannot/0001TP_010110.png
54 | test/0001TP_010140.png testannot/0001TP_010140.png
55 | test/0001TP_010170.png testannot/0001TP_010170.png
56 | test/0001TP_010200.png testannot/0001TP_010200.png
57 | test/0001TP_010230.png testannot/0001TP_010230.png
58 | test/0001TP_010260.png testannot/0001TP_010260.png
59 | test/0001TP_010290.png testannot/0001TP_010290.png
60 | test/0001TP_010320.png testannot/0001TP_010320.png
61 | test/0001TP_010350.png testannot/0001TP_010350.png
62 | test/0001TP_010380.png testannot/0001TP_010380.png
63 | test/Seq05VD_f00000.png testannot/Seq05VD_f00000.png
64 | test/Seq05VD_f00030.png testannot/Seq05VD_f00030.png
65 | test/Seq05VD_f00060.png testannot/Seq05VD_f00060.png
66 | test/Seq05VD_f00090.png testannot/Seq05VD_f00090.png
67 | test/Seq05VD_f00120.png testannot/Seq05VD_f00120.png
68 | test/Seq05VD_f00150.png testannot/Seq05VD_f00150.png
69 | test/Seq05VD_f00180.png testannot/Seq05VD_f00180.png
70 | test/Seq05VD_f00210.png testannot/Seq05VD_f00210.png
71 | test/Seq05VD_f00240.png testannot/Seq05VD_f00240.png
72 | test/Seq05VD_f00270.png testannot/Seq05VD_f00270.png
73 | test/Seq05VD_f00300.png testannot/Seq05VD_f00300.png
74 | test/Seq05VD_f00330.png testannot/Seq05VD_f00330.png
75 | test/Seq05VD_f00360.png testannot/Seq05VD_f00360.png
76 | test/Seq05VD_f00390.png testannot/Seq05VD_f00390.png
77 | test/Seq05VD_f00420.png testannot/Seq05VD_f00420.png
78 | test/Seq05VD_f00450.png testannot/Seq05VD_f00450.png
79 | test/Seq05VD_f00480.png testannot/Seq05VD_f00480.png
80 | test/Seq05VD_f00510.png testannot/Seq05VD_f00510.png
81 | test/Seq05VD_f00540.png testannot/Seq05VD_f00540.png
82 | test/Seq05VD_f00570.png testannot/Seq05VD_f00570.png
83 | test/Seq05VD_f00600.png testannot/Seq05VD_f00600.png
84 | test/Seq05VD_f00630.png testannot/Seq05VD_f00630.png
85 | test/Seq05VD_f00660.png testannot/Seq05VD_f00660.png
86 | test/Seq05VD_f00690.png testannot/Seq05VD_f00690.png
87 | test/Seq05VD_f00720.png testannot/Seq05VD_f00720.png
88 | test/Seq05VD_f00750.png testannot/Seq05VD_f00750.png
89 | test/Seq05VD_f00780.png testannot/Seq05VD_f00780.png
90 | test/Seq05VD_f00810.png testannot/Seq05VD_f00810.png
91 | test/Seq05VD_f00840.png testannot/Seq05VD_f00840.png
92 | test/Seq05VD_f00870.png testannot/Seq05VD_f00870.png
93 | test/Seq05VD_f00900.png testannot/Seq05VD_f00900.png
94 | test/Seq05VD_f00930.png testannot/Seq05VD_f00930.png
95 | test/Seq05VD_f00960.png testannot/Seq05VD_f00960.png
96 | test/Seq05VD_f00990.png testannot/Seq05VD_f00990.png
97 | test/Seq05VD_f01020.png testannot/Seq05VD_f01020.png
98 | test/Seq05VD_f01050.png testannot/Seq05VD_f01050.png
99 | test/Seq05VD_f01080.png testannot/Seq05VD_f01080.png
100 | test/Seq05VD_f01110.png testannot/Seq05VD_f01110.png
101 | test/Seq05VD_f01140.png testannot/Seq05VD_f01140.png
102 | test/Seq05VD_f01170.png testannot/Seq05VD_f01170.png
103 | test/Seq05VD_f01200.png testannot/Seq05VD_f01200.png
104 | test/Seq05VD_f01230.png testannot/Seq05VD_f01230.png
105 | test/Seq05VD_f01260.png testannot/Seq05VD_f01260.png
106 | test/Seq05VD_f01290.png testannot/Seq05VD_f01290.png
107 | test/Seq05VD_f01320.png testannot/Seq05VD_f01320.png
108 | test/Seq05VD_f01350.png testannot/Seq05VD_f01350.png
109 | test/Seq05VD_f01380.png testannot/Seq05VD_f01380.png
110 | test/Seq05VD_f01410.png testannot/Seq05VD_f01410.png
111 | test/Seq05VD_f01440.png testannot/Seq05VD_f01440.png
112 | test/Seq05VD_f01470.png testannot/Seq05VD_f01470.png
113 | test/Seq05VD_f01500.png testannot/Seq05VD_f01500.png
114 | test/Seq05VD_f01530.png testannot/Seq05VD_f01530.png
115 | test/Seq05VD_f01560.png testannot/Seq05VD_f01560.png
116 | test/Seq05VD_f01590.png testannot/Seq05VD_f01590.png
117 | test/Seq05VD_f01620.png testannot/Seq05VD_f01620.png
118 | test/Seq05VD_f01650.png testannot/Seq05VD_f01650.png
119 | test/Seq05VD_f01680.png testannot/Seq05VD_f01680.png
120 | test/Seq05VD_f01710.png testannot/Seq05VD_f01710.png
121 | test/Seq05VD_f01740.png testannot/Seq05VD_f01740.png
122 | test/Seq05VD_f01770.png testannot/Seq05VD_f01770.png
123 | test/Seq05VD_f01800.png testannot/Seq05VD_f01800.png
124 | test/Seq05VD_f01830.png testannot/Seq05VD_f01830.png
125 | test/Seq05VD_f01860.png testannot/Seq05VD_f01860.png
126 | test/Seq05VD_f01890.png testannot/Seq05VD_f01890.png
127 | test/Seq05VD_f01920.png testannot/Seq05VD_f01920.png
128 | test/Seq05VD_f01950.png testannot/Seq05VD_f01950.png
129 | test/Seq05VD_f01980.png testannot/Seq05VD_f01980.png
130 | test/Seq05VD_f02010.png testannot/Seq05VD_f02010.png
131 | test/Seq05VD_f02040.png testannot/Seq05VD_f02040.png
132 | test/Seq05VD_f02070.png testannot/Seq05VD_f02070.png
133 | test/Seq05VD_f02100.png testannot/Seq05VD_f02100.png
134 | test/Seq05VD_f02130.png testannot/Seq05VD_f02130.png
135 | test/Seq05VD_f02160.png testannot/Seq05VD_f02160.png
136 | test/Seq05VD_f02190.png testannot/Seq05VD_f02190.png
137 | test/Seq05VD_f02220.png testannot/Seq05VD_f02220.png
138 | test/Seq05VD_f02250.png testannot/Seq05VD_f02250.png
139 | test/Seq05VD_f02280.png testannot/Seq05VD_f02280.png
140 | test/Seq05VD_f02310.png testannot/Seq05VD_f02310.png
141 | test/Seq05VD_f02340.png testannot/Seq05VD_f02340.png
142 | test/Seq05VD_f02370.png testannot/Seq05VD_f02370.png
143 | test/Seq05VD_f02400.png testannot/Seq05VD_f02400.png
144 | test/Seq05VD_f02430.png testannot/Seq05VD_f02430.png
145 | test/Seq05VD_f02460.png testannot/Seq05VD_f02460.png
146 | test/Seq05VD_f02490.png testannot/Seq05VD_f02490.png
147 | test/Seq05VD_f02520.png testannot/Seq05VD_f02520.png
148 | test/Seq05VD_f02550.png testannot/Seq05VD_f02550.png
149 | test/Seq05VD_f02580.png testannot/Seq05VD_f02580.png
150 | test/Seq05VD_f02610.png testannot/Seq05VD_f02610.png
151 | test/Seq05VD_f02640.png testannot/Seq05VD_f02640.png
152 | test/Seq05VD_f02670.png testannot/Seq05VD_f02670.png
153 | test/Seq05VD_f02700.png testannot/Seq05VD_f02700.png
154 | test/Seq05VD_f02730.png testannot/Seq05VD_f02730.png
155 | test/Seq05VD_f02760.png testannot/Seq05VD_f02760.png
156 | test/Seq05VD_f02790.png testannot/Seq05VD_f02790.png
157 | test/Seq05VD_f02820.png testannot/Seq05VD_f02820.png
158 | test/Seq05VD_f02850.png testannot/Seq05VD_f02850.png
159 | test/Seq05VD_f02880.png testannot/Seq05VD_f02880.png
160 | test/Seq05VD_f02910.png testannot/Seq05VD_f02910.png
161 | test/Seq05VD_f02940.png testannot/Seq05VD_f02940.png
162 | test/Seq05VD_f02970.png testannot/Seq05VD_f02970.png
163 | test/Seq05VD_f03000.png testannot/Seq05VD_f03000.png
164 | test/Seq05VD_f03030.png testannot/Seq05VD_f03030.png
165 | test/Seq05VD_f03060.png testannot/Seq05VD_f03060.png
166 | test/Seq05VD_f03090.png testannot/Seq05VD_f03090.png
167 | test/Seq05VD_f03120.png testannot/Seq05VD_f03120.png
168 | test/Seq05VD_f03150.png testannot/Seq05VD_f03150.png
169 | test/Seq05VD_f03180.png testannot/Seq05VD_f03180.png
170 | test/Seq05VD_f03210.png testannot/Seq05VD_f03210.png
171 | test/Seq05VD_f03240.png testannot/Seq05VD_f03240.png
172 | test/Seq05VD_f03270.png testannot/Seq05VD_f03270.png
173 | test/Seq05VD_f03300.png testannot/Seq05VD_f03300.png
174 | test/Seq05VD_f03330.png testannot/Seq05VD_f03330.png
175 | test/Seq05VD_f03360.png testannot/Seq05VD_f03360.png
176 | test/Seq05VD_f03390.png testannot/Seq05VD_f03390.png
177 | test/Seq05VD_f03420.png testannot/Seq05VD_f03420.png
178 | test/Seq05VD_f03450.png testannot/Seq05VD_f03450.png
179 | test/Seq05VD_f03480.png testannot/Seq05VD_f03480.png
180 | test/Seq05VD_f03510.png testannot/Seq05VD_f03510.png
181 | test/Seq05VD_f03540.png testannot/Seq05VD_f03540.png
182 | test/Seq05VD_f03570.png testannot/Seq05VD_f03570.png
183 | test/Seq05VD_f03600.png testannot/Seq05VD_f03600.png
184 | test/Seq05VD_f03630.png testannot/Seq05VD_f03630.png
185 | test/Seq05VD_f03660.png testannot/Seq05VD_f03660.png
186 | test/Seq05VD_f03690.png testannot/Seq05VD_f03690.png
187 | test/Seq05VD_f03720.png testannot/Seq05VD_f03720.png
188 | test/Seq05VD_f03750.png testannot/Seq05VD_f03750.png
189 | test/Seq05VD_f03780.png testannot/Seq05VD_f03780.png
190 | test/Seq05VD_f03810.png testannot/Seq05VD_f03810.png
191 | test/Seq05VD_f03840.png testannot/Seq05VD_f03840.png
192 | test/Seq05VD_f03870.png testannot/Seq05VD_f03870.png
193 | test/Seq05VD_f03900.png testannot/Seq05VD_f03900.png
194 | test/Seq05VD_f03930.png testannot/Seq05VD_f03930.png
195 | test/Seq05VD_f03960.png testannot/Seq05VD_f03960.png
196 | test/Seq05VD_f03990.png testannot/Seq05VD_f03990.png
197 | test/Seq05VD_f04020.png testannot/Seq05VD_f04020.png
198 | test/Seq05VD_f04050.png testannot/Seq05VD_f04050.png
199 | test/Seq05VD_f04080.png testannot/Seq05VD_f04080.png
200 | test/Seq05VD_f04110.png testannot/Seq05VD_f04110.png
201 | test/Seq05VD_f04140.png testannot/Seq05VD_f04140.png
202 | test/Seq05VD_f04170.png testannot/Seq05VD_f04170.png
203 | test/Seq05VD_f04200.png testannot/Seq05VD_f04200.png
204 | test/Seq05VD_f04230.png testannot/Seq05VD_f04230.png
205 | test/Seq05VD_f04260.png testannot/Seq05VD_f04260.png
206 | test/Seq05VD_f04290.png testannot/Seq05VD_f04290.png
207 | test/Seq05VD_f04320.png testannot/Seq05VD_f04320.png
208 | test/Seq05VD_f04350.png testannot/Seq05VD_f04350.png
209 | test/Seq05VD_f04380.png testannot/Seq05VD_f04380.png
210 | test/Seq05VD_f04410.png testannot/Seq05VD_f04410.png
211 | test/Seq05VD_f04440.png testannot/Seq05VD_f04440.png
212 | test/Seq05VD_f04470.png testannot/Seq05VD_f04470.png
213 | test/Seq05VD_f04500.png testannot/Seq05VD_f04500.png
214 | test/Seq05VD_f04530.png testannot/Seq05VD_f04530.png
215 | test/Seq05VD_f04560.png testannot/Seq05VD_f04560.png
216 | test/Seq05VD_f04590.png testannot/Seq05VD_f04590.png
217 | test/Seq05VD_f04620.png testannot/Seq05VD_f04620.png
218 | test/Seq05VD_f04650.png testannot/Seq05VD_f04650.png
219 | test/Seq05VD_f04680.png testannot/Seq05VD_f04680.png
220 | test/Seq05VD_f04710.png testannot/Seq05VD_f04710.png
221 | test/Seq05VD_f04740.png testannot/Seq05VD_f04740.png
222 | test/Seq05VD_f04770.png testannot/Seq05VD_f04770.png
223 | test/Seq05VD_f04800.png testannot/Seq05VD_f04800.png
224 | test/Seq05VD_f04830.png testannot/Seq05VD_f04830.png
225 | test/Seq05VD_f04860.png testannot/Seq05VD_f04860.png
226 | test/Seq05VD_f04890.png testannot/Seq05VD_f04890.png
227 | test/Seq05VD_f04920.png testannot/Seq05VD_f04920.png
228 | test/Seq05VD_f04950.png testannot/Seq05VD_f04950.png
229 | test/Seq05VD_f04980.png testannot/Seq05VD_f04980.png
230 | test/Seq05VD_f05010.png testannot/Seq05VD_f05010.png
231 | test/Seq05VD_f05040.png testannot/Seq05VD_f05040.png
232 | test/Seq05VD_f05070.png testannot/Seq05VD_f05070.png
233 | test/Seq05VD_f05100.png testannot/Seq05VD_f05100.png
234 |
--------------------------------------------------------------------------------
/dataset/camvid/camvid_train_list.txt:
--------------------------------------------------------------------------------
1 | train/0001TP_006690.png trainannot/0001TP_006690.png
2 | train/0001TP_006720.png trainannot/0001TP_006720.png
3 | train/0001TP_006750.png trainannot/0001TP_006750.png
4 | train/0001TP_006780.png trainannot/0001TP_006780.png
5 | train/0001TP_006810.png trainannot/0001TP_006810.png
6 | train/0001TP_006840.png trainannot/0001TP_006840.png
7 | train/0001TP_006870.png trainannot/0001TP_006870.png
8 | train/0001TP_006900.png trainannot/0001TP_006900.png
9 | train/0001TP_006930.png trainannot/0001TP_006930.png
10 | train/0001TP_006960.png trainannot/0001TP_006960.png
11 | train/0001TP_006990.png trainannot/0001TP_006990.png
12 | train/0001TP_007020.png trainannot/0001TP_007020.png
13 | train/0001TP_007050.png trainannot/0001TP_007050.png
14 | train/0001TP_007080.png trainannot/0001TP_007080.png
15 | train/0001TP_007110.png trainannot/0001TP_007110.png
16 | train/0001TP_007140.png trainannot/0001TP_007140.png
17 | train/0001TP_007170.png trainannot/0001TP_007170.png
18 | train/0001TP_007200.png trainannot/0001TP_007200.png
19 | train/0001TP_007230.png trainannot/0001TP_007230.png
20 | train/0001TP_007260.png trainannot/0001TP_007260.png
21 | train/0001TP_007290.png trainannot/0001TP_007290.png
22 | train/0001TP_007320.png trainannot/0001TP_007320.png
23 | train/0001TP_007350.png trainannot/0001TP_007350.png
24 | train/0001TP_007380.png trainannot/0001TP_007380.png
25 | train/0001TP_007410.png trainannot/0001TP_007410.png
26 | train/0001TP_007440.png trainannot/0001TP_007440.png
27 | train/0001TP_007470.png trainannot/0001TP_007470.png
28 | train/0001TP_007500.png trainannot/0001TP_007500.png
29 | train/0001TP_007530.png trainannot/0001TP_007530.png
30 | train/0001TP_007560.png trainannot/0001TP_007560.png
31 | train/0001TP_007590.png trainannot/0001TP_007590.png
32 | train/0001TP_007620.png trainannot/0001TP_007620.png
33 | train/0001TP_007650.png trainannot/0001TP_007650.png
34 | train/0001TP_007680.png trainannot/0001TP_007680.png
35 | train/0001TP_007710.png trainannot/0001TP_007710.png
36 | train/0001TP_007740.png trainannot/0001TP_007740.png
37 | train/0001TP_007770.png trainannot/0001TP_007770.png
38 | train/0001TP_007800.png trainannot/0001TP_007800.png
39 | train/0001TP_007830.png trainannot/0001TP_007830.png
40 | train/0001TP_007860.png trainannot/0001TP_007860.png
41 | train/0001TP_007890.png trainannot/0001TP_007890.png
42 | train/0001TP_007920.png trainannot/0001TP_007920.png
43 | train/0001TP_007950.png trainannot/0001TP_007950.png
44 | train/0001TP_007980.png trainannot/0001TP_007980.png
45 | train/0001TP_008010.png trainannot/0001TP_008010.png
46 | train/0001TP_008040.png trainannot/0001TP_008040.png
47 | train/0001TP_008070.png trainannot/0001TP_008070.png
48 | train/0001TP_008100.png trainannot/0001TP_008100.png
49 | train/0001TP_008130.png trainannot/0001TP_008130.png
50 | train/0001TP_008160.png trainannot/0001TP_008160.png
51 | train/0001TP_008190.png trainannot/0001TP_008190.png
52 | train/0001TP_008220.png trainannot/0001TP_008220.png
53 | train/0001TP_008250.png trainannot/0001TP_008250.png
54 | train/0001TP_008280.png trainannot/0001TP_008280.png
55 | train/0001TP_008310.png trainannot/0001TP_008310.png
56 | train/0001TP_008340.png trainannot/0001TP_008340.png
57 | train/0001TP_008370.png trainannot/0001TP_008370.png
58 | train/0001TP_008400.png trainannot/0001TP_008400.png
59 | train/0001TP_008430.png trainannot/0001TP_008430.png
60 | train/0001TP_008460.png trainannot/0001TP_008460.png
61 | train/0001TP_008490.png trainannot/0001TP_008490.png
62 | train/0001TP_008520.png trainannot/0001TP_008520.png
63 | train/0006R0_f00930.png trainannot/0006R0_f00930.png
64 | train/0006R0_f00960.png trainannot/0006R0_f00960.png
65 | train/0006R0_f00990.png trainannot/0006R0_f00990.png
66 | train/0006R0_f01020.png trainannot/0006R0_f01020.png
67 | train/0006R0_f01050.png trainannot/0006R0_f01050.png
68 | train/0006R0_f01080.png trainannot/0006R0_f01080.png
69 | train/0006R0_f01110.png trainannot/0006R0_f01110.png
70 | train/0006R0_f01140.png trainannot/0006R0_f01140.png
71 | train/0006R0_f01170.png trainannot/0006R0_f01170.png
72 | train/0006R0_f01200.png trainannot/0006R0_f01200.png
73 | train/0006R0_f01230.png trainannot/0006R0_f01230.png
74 | train/0006R0_f01260.png trainannot/0006R0_f01260.png
75 | train/0006R0_f01290.png trainannot/0006R0_f01290.png
76 | train/0006R0_f01320.png trainannot/0006R0_f01320.png
77 | train/0006R0_f01350.png trainannot/0006R0_f01350.png
78 | train/0006R0_f01380.png trainannot/0006R0_f01380.png
79 | train/0006R0_f01410.png trainannot/0006R0_f01410.png
80 | train/0006R0_f01440.png trainannot/0006R0_f01440.png
81 | train/0006R0_f01470.png trainannot/0006R0_f01470.png
82 | train/0006R0_f01500.png trainannot/0006R0_f01500.png
83 | train/0006R0_f01530.png trainannot/0006R0_f01530.png
84 | train/0006R0_f01560.png trainannot/0006R0_f01560.png
85 | train/0006R0_f01590.png trainannot/0006R0_f01590.png
86 | train/0006R0_f01620.png trainannot/0006R0_f01620.png
87 | train/0006R0_f01650.png trainannot/0006R0_f01650.png
88 | train/0006R0_f01680.png trainannot/0006R0_f01680.png
89 | train/0006R0_f01710.png trainannot/0006R0_f01710.png
90 | train/0006R0_f01740.png trainannot/0006R0_f01740.png
91 | train/0006R0_f01770.png trainannot/0006R0_f01770.png
92 | train/0006R0_f01800.png trainannot/0006R0_f01800.png
93 | train/0006R0_f01830.png trainannot/0006R0_f01830.png
94 | train/0006R0_f01860.png trainannot/0006R0_f01860.png
95 | train/0006R0_f01890.png trainannot/0006R0_f01890.png
96 | train/0006R0_f01920.png trainannot/0006R0_f01920.png
97 | train/0006R0_f01950.png trainannot/0006R0_f01950.png
98 | train/0006R0_f01980.png trainannot/0006R0_f01980.png
99 | train/0006R0_f02010.png trainannot/0006R0_f02010.png
100 | train/0006R0_f02040.png trainannot/0006R0_f02040.png
101 | train/0006R0_f02070.png trainannot/0006R0_f02070.png
102 | train/0006R0_f02100.png trainannot/0006R0_f02100.png
103 | train/0006R0_f02130.png trainannot/0006R0_f02130.png
104 | train/0006R0_f02160.png trainannot/0006R0_f02160.png
105 | train/0006R0_f02190.png trainannot/0006R0_f02190.png
106 | train/0006R0_f02220.png trainannot/0006R0_f02220.png
107 | train/0006R0_f02250.png trainannot/0006R0_f02250.png
108 | train/0006R0_f02280.png trainannot/0006R0_f02280.png
109 | train/0006R0_f02310.png trainannot/0006R0_f02310.png
110 | train/0006R0_f02340.png trainannot/0006R0_f02340.png
111 | train/0006R0_f02370.png trainannot/0006R0_f02370.png
112 | train/0006R0_f02400.png trainannot/0006R0_f02400.png
113 | train/0006R0_f02430.png trainannot/0006R0_f02430.png
114 | train/0006R0_f02460.png trainannot/0006R0_f02460.png
115 | train/0006R0_f02490.png trainannot/0006R0_f02490.png
116 | train/0006R0_f02520.png trainannot/0006R0_f02520.png
117 | train/0006R0_f02550.png trainannot/0006R0_f02550.png
118 | train/0006R0_f02580.png trainannot/0006R0_f02580.png
119 | train/0006R0_f02610.png trainannot/0006R0_f02610.png
120 | train/0006R0_f02640.png trainannot/0006R0_f02640.png
121 | train/0006R0_f02670.png trainannot/0006R0_f02670.png
122 | train/0006R0_f02700.png trainannot/0006R0_f02700.png
123 | train/0006R0_f02730.png trainannot/0006R0_f02730.png
124 | train/0006R0_f02760.png trainannot/0006R0_f02760.png
125 | train/0006R0_f02790.png trainannot/0006R0_f02790.png
126 | train/0006R0_f02820.png trainannot/0006R0_f02820.png
127 | train/0006R0_f02850.png trainannot/0006R0_f02850.png
128 | train/0006R0_f02880.png trainannot/0006R0_f02880.png
129 | train/0006R0_f02910.png trainannot/0006R0_f02910.png
130 | train/0006R0_f02940.png trainannot/0006R0_f02940.png
131 | train/0006R0_f02970.png trainannot/0006R0_f02970.png
132 | train/0006R0_f03000.png trainannot/0006R0_f03000.png
133 | train/0006R0_f03030.png trainannot/0006R0_f03030.png
134 | train/0006R0_f03060.png trainannot/0006R0_f03060.png
135 | train/0006R0_f03090.png trainannot/0006R0_f03090.png
136 | train/0006R0_f03120.png trainannot/0006R0_f03120.png
137 | train/0006R0_f03150.png trainannot/0006R0_f03150.png
138 | train/0006R0_f03180.png trainannot/0006R0_f03180.png
139 | train/0006R0_f03210.png trainannot/0006R0_f03210.png
140 | train/0006R0_f03240.png trainannot/0006R0_f03240.png
141 | train/0006R0_f03270.png trainannot/0006R0_f03270.png
142 | train/0006R0_f03300.png trainannot/0006R0_f03300.png
143 | train/0006R0_f03330.png trainannot/0006R0_f03330.png
144 | train/0006R0_f03360.png trainannot/0006R0_f03360.png
145 | train/0006R0_f03390.png trainannot/0006R0_f03390.png
146 | train/0006R0_f03420.png trainannot/0006R0_f03420.png
147 | train/0006R0_f03450.png trainannot/0006R0_f03450.png
148 | train/0006R0_f03480.png trainannot/0006R0_f03480.png
149 | train/0006R0_f03510.png trainannot/0006R0_f03510.png
150 | train/0006R0_f03540.png trainannot/0006R0_f03540.png
151 | train/0006R0_f03570.png trainannot/0006R0_f03570.png
152 | train/0006R0_f03600.png trainannot/0006R0_f03600.png
153 | train/0006R0_f03630.png trainannot/0006R0_f03630.png
154 | train/0006R0_f03660.png trainannot/0006R0_f03660.png
155 | train/0006R0_f03690.png trainannot/0006R0_f03690.png
156 | train/0006R0_f03720.png trainannot/0006R0_f03720.png
157 | train/0006R0_f03750.png trainannot/0006R0_f03750.png
158 | train/0006R0_f03780.png trainannot/0006R0_f03780.png
159 | train/0006R0_f03810.png trainannot/0006R0_f03810.png
160 | train/0006R0_f03840.png trainannot/0006R0_f03840.png
161 | train/0006R0_f03870.png trainannot/0006R0_f03870.png
162 | train/0006R0_f03900.png trainannot/0006R0_f03900.png
163 | train/0006R0_f03930.png trainannot/0006R0_f03930.png
164 | train/0016E5_00390.png trainannot/0016E5_00390.png
165 | train/0016E5_00420.png trainannot/0016E5_00420.png
166 | train/0016E5_00450.png trainannot/0016E5_00450.png
167 | train/0016E5_00480.png trainannot/0016E5_00480.png
168 | train/0016E5_00510.png trainannot/0016E5_00510.png
169 | train/0016E5_00540.png trainannot/0016E5_00540.png
170 | train/0016E5_00570.png trainannot/0016E5_00570.png
171 | train/0016E5_00600.png trainannot/0016E5_00600.png
172 | train/0016E5_00630.png trainannot/0016E5_00630.png
173 | train/0016E5_00660.png trainannot/0016E5_00660.png
174 | train/0016E5_00690.png trainannot/0016E5_00690.png
175 | train/0016E5_00720.png trainannot/0016E5_00720.png
176 | train/0016E5_00750.png trainannot/0016E5_00750.png
177 | train/0016E5_00780.png trainannot/0016E5_00780.png
178 | train/0016E5_00810.png trainannot/0016E5_00810.png
179 | train/0016E5_00840.png trainannot/0016E5_00840.png
180 | train/0016E5_00870.png trainannot/0016E5_00870.png
181 | train/0016E5_00901.png trainannot/0016E5_00901.png
182 | train/0016E5_00930.png trainannot/0016E5_00930.png
183 | train/0016E5_00960.png trainannot/0016E5_00960.png
184 | train/0016E5_00990.png trainannot/0016E5_00990.png
185 | train/0016E5_01020.png trainannot/0016E5_01020.png
186 | train/0016E5_01050.png trainannot/0016E5_01050.png
187 | train/0016E5_01080.png trainannot/0016E5_01080.png
188 | train/0016E5_01110.png trainannot/0016E5_01110.png
189 | train/0016E5_01140.png trainannot/0016E5_01140.png
190 | train/0016E5_01170.png trainannot/0016E5_01170.png
191 | train/0016E5_01200.png trainannot/0016E5_01200.png
192 | train/0016E5_01230.png trainannot/0016E5_01230.png
193 | train/0016E5_01260.png trainannot/0016E5_01260.png
194 | train/0016E5_01290.png trainannot/0016E5_01290.png
195 | train/0016E5_01320.png trainannot/0016E5_01320.png
196 | train/0016E5_01350.png trainannot/0016E5_01350.png
197 | train/0016E5_01380.png trainannot/0016E5_01380.png
198 | train/0016E5_01410.png trainannot/0016E5_01410.png
199 | train/0016E5_01440.png trainannot/0016E5_01440.png
200 | train/0016E5_01470.png trainannot/0016E5_01470.png
201 | train/0016E5_01500.png trainannot/0016E5_01500.png
202 | train/0016E5_01530.png trainannot/0016E5_01530.png
203 | train/0016E5_01560.png trainannot/0016E5_01560.png
204 | train/0016E5_01590.png trainannot/0016E5_01590.png
205 | train/0016E5_01620.png trainannot/0016E5_01620.png
206 | train/0016E5_01650.png trainannot/0016E5_01650.png
207 | train/0016E5_01680.png trainannot/0016E5_01680.png
208 | train/0016E5_01710.png trainannot/0016E5_01710.png
209 | train/0016E5_01740.png trainannot/0016E5_01740.png
210 | train/0016E5_01770.png trainannot/0016E5_01770.png
211 | train/0016E5_01800.png trainannot/0016E5_01800.png
212 | train/0016E5_01830.png trainannot/0016E5_01830.png
213 | train/0016E5_01860.png trainannot/0016E5_01860.png
214 | train/0016E5_01890.png trainannot/0016E5_01890.png
215 | train/0016E5_01920.png trainannot/0016E5_01920.png
216 | train/0016E5_01950.png trainannot/0016E5_01950.png
217 | train/0016E5_01980.png trainannot/0016E5_01980.png
218 | train/0016E5_02010.png trainannot/0016E5_02010.png
219 | train/0016E5_02040.png trainannot/0016E5_02040.png
220 | train/0016E5_02070.png trainannot/0016E5_02070.png
221 | train/0016E5_02100.png trainannot/0016E5_02100.png
222 | train/0016E5_02130.png trainannot/0016E5_02130.png
223 | train/0016E5_02160.png trainannot/0016E5_02160.png
224 | train/0016E5_02190.png trainannot/0016E5_02190.png
225 | train/0016E5_02220.png trainannot/0016E5_02220.png
226 | train/0016E5_02250.png trainannot/0016E5_02250.png
227 | train/0016E5_02280.png trainannot/0016E5_02280.png
228 | train/0016E5_02310.png trainannot/0016E5_02310.png
229 | train/0016E5_02340.png trainannot/0016E5_02340.png
230 | train/0016E5_02370.png trainannot/0016E5_02370.png
231 | train/0016E5_02400.png trainannot/0016E5_02400.png
232 | train/0016E5_04350.png trainannot/0016E5_04350.png
233 | train/0016E5_04380.png trainannot/0016E5_04380.png
234 | train/0016E5_04410.png trainannot/0016E5_04410.png
235 | train/0016E5_04440.png trainannot/0016E5_04440.png
236 | train/0016E5_04470.png trainannot/0016E5_04470.png
237 | train/0016E5_04500.png trainannot/0016E5_04500.png
238 | train/0016E5_04530.png trainannot/0016E5_04530.png
239 | train/0016E5_04560.png trainannot/0016E5_04560.png
240 | train/0016E5_04590.png trainannot/0016E5_04590.png
241 | train/0016E5_04620.png trainannot/0016E5_04620.png
242 | train/0016E5_04650.png trainannot/0016E5_04650.png
243 | train/0016E5_04680.png trainannot/0016E5_04680.png
244 | train/0016E5_04710.png trainannot/0016E5_04710.png
245 | train/0016E5_04740.png trainannot/0016E5_04740.png
246 | train/0016E5_04770.png trainannot/0016E5_04770.png
247 | train/0016E5_04800.png trainannot/0016E5_04800.png
248 | train/0016E5_04830.png trainannot/0016E5_04830.png
249 | train/0016E5_04860.png trainannot/0016E5_04860.png
250 | train/0016E5_04890.png trainannot/0016E5_04890.png
251 | train/0016E5_04920.png trainannot/0016E5_04920.png
252 | train/0016E5_04950.png trainannot/0016E5_04950.png
253 | train/0016E5_04980.png trainannot/0016E5_04980.png
254 | train/0016E5_05010.png trainannot/0016E5_05010.png
255 | train/0016E5_05040.png trainannot/0016E5_05040.png
256 | train/0016E5_05070.png trainannot/0016E5_05070.png
257 | train/0016E5_05100.png trainannot/0016E5_05100.png
258 | train/0016E5_05130.png trainannot/0016E5_05130.png
259 | train/0016E5_05160.png trainannot/0016E5_05160.png
260 | train/0016E5_05190.png trainannot/0016E5_05190.png
261 | train/0016E5_05220.png trainannot/0016E5_05220.png
262 | train/0016E5_05250.png trainannot/0016E5_05250.png
263 | train/0016E5_05280.png trainannot/0016E5_05280.png
264 | train/0016E5_05310.png trainannot/0016E5_05310.png
265 | train/0016E5_05340.png trainannot/0016E5_05340.png
266 | train/0016E5_05370.png trainannot/0016E5_05370.png
267 | train/0016E5_05400.png trainannot/0016E5_05400.png
268 | train/0016E5_05430.png trainannot/0016E5_05430.png
269 | train/0016E5_05460.png trainannot/0016E5_05460.png
270 | train/0016E5_05490.png trainannot/0016E5_05490.png
271 | train/0016E5_05520.png trainannot/0016E5_05520.png
272 | train/0016E5_05550.png trainannot/0016E5_05550.png
273 | train/0016E5_05580.png trainannot/0016E5_05580.png
274 | train/0016E5_05610.png trainannot/0016E5_05610.png
275 | train/0016E5_05640.png trainannot/0016E5_05640.png
276 | train/0016E5_05670.png trainannot/0016E5_05670.png
277 | train/0016E5_05700.png trainannot/0016E5_05700.png
278 | train/0016E5_05730.png trainannot/0016E5_05730.png
279 | train/0016E5_05760.png trainannot/0016E5_05760.png
280 | train/0016E5_05790.png trainannot/0016E5_05790.png
281 | train/0016E5_05820.png trainannot/0016E5_05820.png
282 | train/0016E5_05850.png trainannot/0016E5_05850.png
283 | train/0016E5_05880.png trainannot/0016E5_05880.png
284 | train/0016E5_05910.png trainannot/0016E5_05910.png
285 | train/0016E5_05940.png trainannot/0016E5_05940.png
286 | train/0016E5_05970.png trainannot/0016E5_05970.png
287 | train/0016E5_06000.png trainannot/0016E5_06000.png
288 | train/0016E5_06030.png trainannot/0016E5_06030.png
289 | train/0016E5_06060.png trainannot/0016E5_06060.png
290 | train/0016E5_06090.png trainannot/0016E5_06090.png
291 | train/0016E5_06120.png trainannot/0016E5_06120.png
292 | train/0016E5_06150.png trainannot/0016E5_06150.png
293 | train/0016E5_06180.png trainannot/0016E5_06180.png
294 | train/0016E5_06210.png trainannot/0016E5_06210.png
295 | train/0016E5_06240.png trainannot/0016E5_06240.png
296 | train/0016E5_06270.png trainannot/0016E5_06270.png
297 | train/0016E5_06300.png trainannot/0016E5_06300.png
298 | train/0016E5_06330.png trainannot/0016E5_06330.png
299 | train/0016E5_06360.png trainannot/0016E5_06360.png
300 | train/0016E5_06390.png trainannot/0016E5_06390.png
301 | train/0016E5_06420.png trainannot/0016E5_06420.png
302 | train/0016E5_06450.png trainannot/0016E5_06450.png
303 | train/0016E5_06480.png trainannot/0016E5_06480.png
304 | train/0016E5_06510.png trainannot/0016E5_06510.png
305 | train/0016E5_06540.png trainannot/0016E5_06540.png
306 | train/0016E5_06570.png trainannot/0016E5_06570.png
307 | train/0016E5_06600.png trainannot/0016E5_06600.png
308 | train/0016E5_06630.png trainannot/0016E5_06630.png
309 | train/0016E5_06660.png trainannot/0016E5_06660.png
310 | train/0016E5_06690.png trainannot/0016E5_06690.png
311 | train/0016E5_06720.png trainannot/0016E5_06720.png
312 | train/0016E5_06750.png trainannot/0016E5_06750.png
313 | train/0016E5_06780.png trainannot/0016E5_06780.png
314 | train/0016E5_06810.png trainannot/0016E5_06810.png
315 | train/0016E5_06840.png trainannot/0016E5_06840.png
316 | train/0016E5_06870.png trainannot/0016E5_06870.png
317 | train/0016E5_06900.png trainannot/0016E5_06900.png
318 | train/0016E5_06930.png trainannot/0016E5_06930.png
319 | train/0016E5_06960.png trainannot/0016E5_06960.png
320 | train/0016E5_06990.png trainannot/0016E5_06990.png
321 | train/0016E5_07020.png trainannot/0016E5_07020.png
322 | train/0016E5_07050.png trainannot/0016E5_07050.png
323 | train/0016E5_07080.png trainannot/0016E5_07080.png
324 | train/0016E5_07110.png trainannot/0016E5_07110.png
325 | train/0016E5_07140.png trainannot/0016E5_07140.png
326 | train/0016E5_07170.png trainannot/0016E5_07170.png
327 | train/0016E5_07200.png trainannot/0016E5_07200.png
328 | train/0016E5_07230.png trainannot/0016E5_07230.png
329 | train/0016E5_07260.png trainannot/0016E5_07260.png
330 | train/0016E5_07290.png trainannot/0016E5_07290.png
331 | train/0016E5_07320.png trainannot/0016E5_07320.png
332 | train/0016E5_07350.png trainannot/0016E5_07350.png
333 | train/0016E5_07380.png trainannot/0016E5_07380.png
334 | train/0016E5_07410.png trainannot/0016E5_07410.png
335 | train/0016E5_07440.png trainannot/0016E5_07440.png
336 | train/0016E5_07470.png trainannot/0016E5_07470.png
337 | train/0016E5_07500.png trainannot/0016E5_07500.png
338 | train/0016E5_07530.png trainannot/0016E5_07530.png
339 | train/0016E5_07560.png trainannot/0016E5_07560.png
340 | train/0016E5_07590.png trainannot/0016E5_07590.png
341 | train/0016E5_07620.png trainannot/0016E5_07620.png
342 | train/0016E5_07650.png trainannot/0016E5_07650.png
343 | train/0016E5_07680.png trainannot/0016E5_07680.png
344 | train/0016E5_07710.png trainannot/0016E5_07710.png
345 | train/0016E5_07740.png trainannot/0016E5_07740.png
346 | train/0016E5_07770.png trainannot/0016E5_07770.png
347 | train/0016E5_07800.png trainannot/0016E5_07800.png
348 | train/0016E5_07830.png trainannot/0016E5_07830.png
349 | train/0016E5_07860.png trainannot/0016E5_07860.png
350 | train/0016E5_07890.png trainannot/0016E5_07890.png
351 | train/0016E5_07920.png trainannot/0016E5_07920.png
352 | train/0016E5_08190.png trainannot/0016E5_08190.png
353 | train/0016E5_08220.png trainannot/0016E5_08220.png
354 | train/0016E5_08250.png trainannot/0016E5_08250.png
355 | train/0016E5_08280.png trainannot/0016E5_08280.png
356 | train/0016E5_08310.png trainannot/0016E5_08310.png
357 | train/0016E5_08340.png trainannot/0016E5_08340.png
358 | train/0016E5_08370.png trainannot/0016E5_08370.png
359 | train/0016E5_08400.png trainannot/0016E5_08400.png
360 | train/0016E5_08430.png trainannot/0016E5_08430.png
361 | train/0016E5_08460.png trainannot/0016E5_08460.png
362 | train/0016E5_08490.png trainannot/0016E5_08490.png
363 | train/0016E5_08520.png trainannot/0016E5_08520.png
364 | train/0016E5_08550.png trainannot/0016E5_08550.png
365 | train/0016E5_08580.png trainannot/0016E5_08580.png
366 | train/0016E5_08610.png trainannot/0016E5_08610.png
367 | train/0016E5_08640.png trainannot/0016E5_08640.png
368 |
--------------------------------------------------------------------------------
/dataset/camvid/camvid_trainval_list.txt:
--------------------------------------------------------------------------------
1 | train/0001TP_006690.png trainannot/0001TP_006690.png
2 | train/0001TP_006720.png trainannot/0001TP_006720.png
3 | train/0001TP_006750.png trainannot/0001TP_006750.png
4 | train/0001TP_006780.png trainannot/0001TP_006780.png
5 | train/0001TP_006810.png trainannot/0001TP_006810.png
6 | train/0001TP_006840.png trainannot/0001TP_006840.png
7 | train/0001TP_006870.png trainannot/0001TP_006870.png
8 | train/0001TP_006900.png trainannot/0001TP_006900.png
9 | train/0001TP_006930.png trainannot/0001TP_006930.png
10 | train/0001TP_006960.png trainannot/0001TP_006960.png
11 | train/0001TP_006990.png trainannot/0001TP_006990.png
12 | train/0001TP_007020.png trainannot/0001TP_007020.png
13 | train/0001TP_007050.png trainannot/0001TP_007050.png
14 | train/0001TP_007080.png trainannot/0001TP_007080.png
15 | train/0001TP_007110.png trainannot/0001TP_007110.png
16 | train/0001TP_007140.png trainannot/0001TP_007140.png
17 | train/0001TP_007170.png trainannot/0001TP_007170.png
18 | train/0001TP_007200.png trainannot/0001TP_007200.png
19 | train/0001TP_007230.png trainannot/0001TP_007230.png
20 | train/0001TP_007260.png trainannot/0001TP_007260.png
21 | train/0001TP_007290.png trainannot/0001TP_007290.png
22 | train/0001TP_007320.png trainannot/0001TP_007320.png
23 | train/0001TP_007350.png trainannot/0001TP_007350.png
24 | train/0001TP_007380.png trainannot/0001TP_007380.png
25 | train/0001TP_007410.png trainannot/0001TP_007410.png
26 | train/0001TP_007440.png trainannot/0001TP_007440.png
27 | train/0001TP_007470.png trainannot/0001TP_007470.png
28 | train/0001TP_007500.png trainannot/0001TP_007500.png
29 | train/0001TP_007530.png trainannot/0001TP_007530.png
30 | train/0001TP_007560.png trainannot/0001TP_007560.png
31 | train/0001TP_007590.png trainannot/0001TP_007590.png
32 | train/0001TP_007620.png trainannot/0001TP_007620.png
33 | train/0001TP_007650.png trainannot/0001TP_007650.png
34 | train/0001TP_007680.png trainannot/0001TP_007680.png
35 | train/0001TP_007710.png trainannot/0001TP_007710.png
36 | train/0001TP_007740.png trainannot/0001TP_007740.png
37 | train/0001TP_007770.png trainannot/0001TP_007770.png
38 | train/0001TP_007800.png trainannot/0001TP_007800.png
39 | train/0001TP_007830.png trainannot/0001TP_007830.png
40 | train/0001TP_007860.png trainannot/0001TP_007860.png
41 | train/0001TP_007890.png trainannot/0001TP_007890.png
42 | train/0001TP_007920.png trainannot/0001TP_007920.png
43 | train/0001TP_007950.png trainannot/0001TP_007950.png
44 | train/0001TP_007980.png trainannot/0001TP_007980.png
45 | train/0001TP_008010.png trainannot/0001TP_008010.png
46 | train/0001TP_008040.png trainannot/0001TP_008040.png
47 | train/0001TP_008070.png trainannot/0001TP_008070.png
48 | train/0001TP_008100.png trainannot/0001TP_008100.png
49 | train/0001TP_008130.png trainannot/0001TP_008130.png
50 | train/0001TP_008160.png trainannot/0001TP_008160.png
51 | train/0001TP_008190.png trainannot/0001TP_008190.png
52 | train/0001TP_008220.png trainannot/0001TP_008220.png
53 | train/0001TP_008250.png trainannot/0001TP_008250.png
54 | train/0001TP_008280.png trainannot/0001TP_008280.png
55 | train/0001TP_008310.png trainannot/0001TP_008310.png
56 | train/0001TP_008340.png trainannot/0001TP_008340.png
57 | train/0001TP_008370.png trainannot/0001TP_008370.png
58 | train/0001TP_008400.png trainannot/0001TP_008400.png
59 | train/0001TP_008430.png trainannot/0001TP_008430.png
60 | train/0001TP_008460.png trainannot/0001TP_008460.png
61 | train/0001TP_008490.png trainannot/0001TP_008490.png
62 | train/0001TP_008520.png trainannot/0001TP_008520.png
63 | train/0006R0_f00930.png trainannot/0006R0_f00930.png
64 | train/0006R0_f00960.png trainannot/0006R0_f00960.png
65 | train/0006R0_f00990.png trainannot/0006R0_f00990.png
66 | train/0006R0_f01020.png trainannot/0006R0_f01020.png
67 | train/0006R0_f01050.png trainannot/0006R0_f01050.png
68 | train/0006R0_f01080.png trainannot/0006R0_f01080.png
69 | train/0006R0_f01110.png trainannot/0006R0_f01110.png
70 | train/0006R0_f01140.png trainannot/0006R0_f01140.png
71 | train/0006R0_f01170.png trainannot/0006R0_f01170.png
72 | train/0006R0_f01200.png trainannot/0006R0_f01200.png
73 | train/0006R0_f01230.png trainannot/0006R0_f01230.png
74 | train/0006R0_f01260.png trainannot/0006R0_f01260.png
75 | train/0006R0_f01290.png trainannot/0006R0_f01290.png
76 | train/0006R0_f01320.png trainannot/0006R0_f01320.png
77 | train/0006R0_f01350.png trainannot/0006R0_f01350.png
78 | train/0006R0_f01380.png trainannot/0006R0_f01380.png
79 | train/0006R0_f01410.png trainannot/0006R0_f01410.png
80 | train/0006R0_f01440.png trainannot/0006R0_f01440.png
81 | train/0006R0_f01470.png trainannot/0006R0_f01470.png
82 | train/0006R0_f01500.png trainannot/0006R0_f01500.png
83 | train/0006R0_f01530.png trainannot/0006R0_f01530.png
84 | train/0006R0_f01560.png trainannot/0006R0_f01560.png
85 | train/0006R0_f01590.png trainannot/0006R0_f01590.png
86 | train/0006R0_f01620.png trainannot/0006R0_f01620.png
87 | train/0006R0_f01650.png trainannot/0006R0_f01650.png
88 | train/0006R0_f01680.png trainannot/0006R0_f01680.png
89 | train/0006R0_f01710.png trainannot/0006R0_f01710.png
90 | train/0006R0_f01740.png trainannot/0006R0_f01740.png
91 | train/0006R0_f01770.png trainannot/0006R0_f01770.png
92 | train/0006R0_f01800.png trainannot/0006R0_f01800.png
93 | train/0006R0_f01830.png trainannot/0006R0_f01830.png
94 | train/0006R0_f01860.png trainannot/0006R0_f01860.png
95 | train/0006R0_f01890.png trainannot/0006R0_f01890.png
96 | train/0006R0_f01920.png trainannot/0006R0_f01920.png
97 | train/0006R0_f01950.png trainannot/0006R0_f01950.png
98 | train/0006R0_f01980.png trainannot/0006R0_f01980.png
99 | train/0006R0_f02010.png trainannot/0006R0_f02010.png
100 | train/0006R0_f02040.png trainannot/0006R0_f02040.png
101 | train/0006R0_f02070.png trainannot/0006R0_f02070.png
102 | train/0006R0_f02100.png trainannot/0006R0_f02100.png
103 | train/0006R0_f02130.png trainannot/0006R0_f02130.png
104 | train/0006R0_f02160.png trainannot/0006R0_f02160.png
105 | train/0006R0_f02190.png trainannot/0006R0_f02190.png
106 | train/0006R0_f02220.png trainannot/0006R0_f02220.png
107 | train/0006R0_f02250.png trainannot/0006R0_f02250.png
108 | train/0006R0_f02280.png trainannot/0006R0_f02280.png
109 | train/0006R0_f02310.png trainannot/0006R0_f02310.png
110 | train/0006R0_f02340.png trainannot/0006R0_f02340.png
111 | train/0006R0_f02370.png trainannot/0006R0_f02370.png
112 | train/0006R0_f02400.png trainannot/0006R0_f02400.png
113 | train/0006R0_f02430.png trainannot/0006R0_f02430.png
114 | train/0006R0_f02460.png trainannot/0006R0_f02460.png
115 | train/0006R0_f02490.png trainannot/0006R0_f02490.png
116 | train/0006R0_f02520.png trainannot/0006R0_f02520.png
117 | train/0006R0_f02550.png trainannot/0006R0_f02550.png
118 | train/0006R0_f02580.png trainannot/0006R0_f02580.png
119 | train/0006R0_f02610.png trainannot/0006R0_f02610.png
120 | train/0006R0_f02640.png trainannot/0006R0_f02640.png
121 | train/0006R0_f02670.png trainannot/0006R0_f02670.png
122 | train/0006R0_f02700.png trainannot/0006R0_f02700.png
123 | train/0006R0_f02730.png trainannot/0006R0_f02730.png
124 | train/0006R0_f02760.png trainannot/0006R0_f02760.png
125 | train/0006R0_f02790.png trainannot/0006R0_f02790.png
126 | train/0006R0_f02820.png trainannot/0006R0_f02820.png
127 | train/0006R0_f02850.png trainannot/0006R0_f02850.png
128 | train/0006R0_f02880.png trainannot/0006R0_f02880.png
129 | train/0006R0_f02910.png trainannot/0006R0_f02910.png
130 | train/0006R0_f02940.png trainannot/0006R0_f02940.png
131 | train/0006R0_f02970.png trainannot/0006R0_f02970.png
132 | train/0006R0_f03000.png trainannot/0006R0_f03000.png
133 | train/0006R0_f03030.png trainannot/0006R0_f03030.png
134 | train/0006R0_f03060.png trainannot/0006R0_f03060.png
135 | train/0006R0_f03090.png trainannot/0006R0_f03090.png
136 | train/0006R0_f03120.png trainannot/0006R0_f03120.png
137 | train/0006R0_f03150.png trainannot/0006R0_f03150.png
138 | train/0006R0_f03180.png trainannot/0006R0_f03180.png
139 | train/0006R0_f03210.png trainannot/0006R0_f03210.png
140 | train/0006R0_f03240.png trainannot/0006R0_f03240.png
141 | train/0006R0_f03270.png trainannot/0006R0_f03270.png
142 | train/0006R0_f03300.png trainannot/0006R0_f03300.png
143 | train/0006R0_f03330.png trainannot/0006R0_f03330.png
144 | train/0006R0_f03360.png trainannot/0006R0_f03360.png
145 | train/0006R0_f03390.png trainannot/0006R0_f03390.png
146 | train/0006R0_f03420.png trainannot/0006R0_f03420.png
147 | train/0006R0_f03450.png trainannot/0006R0_f03450.png
148 | train/0006R0_f03480.png trainannot/0006R0_f03480.png
149 | train/0006R0_f03510.png trainannot/0006R0_f03510.png
150 | train/0006R0_f03540.png trainannot/0006R0_f03540.png
151 | train/0006R0_f03570.png trainannot/0006R0_f03570.png
152 | train/0006R0_f03600.png trainannot/0006R0_f03600.png
153 | train/0006R0_f03630.png trainannot/0006R0_f03630.png
154 | train/0006R0_f03660.png trainannot/0006R0_f03660.png
155 | train/0006R0_f03690.png trainannot/0006R0_f03690.png
156 | train/0006R0_f03720.png trainannot/0006R0_f03720.png
157 | train/0006R0_f03750.png trainannot/0006R0_f03750.png
158 | train/0006R0_f03780.png trainannot/0006R0_f03780.png
159 | train/0006R0_f03810.png trainannot/0006R0_f03810.png
160 | train/0006R0_f03840.png trainannot/0006R0_f03840.png
161 | train/0006R0_f03870.png trainannot/0006R0_f03870.png
162 | train/0006R0_f03900.png trainannot/0006R0_f03900.png
163 | train/0006R0_f03930.png trainannot/0006R0_f03930.png
164 | train/0016E5_00390.png trainannot/0016E5_00390.png
165 | train/0016E5_00420.png trainannot/0016E5_00420.png
166 | train/0016E5_00450.png trainannot/0016E5_00450.png
167 | train/0016E5_00480.png trainannot/0016E5_00480.png
168 | train/0016E5_00510.png trainannot/0016E5_00510.png
169 | train/0016E5_00540.png trainannot/0016E5_00540.png
170 | train/0016E5_00570.png trainannot/0016E5_00570.png
171 | train/0016E5_00600.png trainannot/0016E5_00600.png
172 | train/0016E5_00630.png trainannot/0016E5_00630.png
173 | train/0016E5_00660.png trainannot/0016E5_00660.png
174 | train/0016E5_00690.png trainannot/0016E5_00690.png
175 | train/0016E5_00720.png trainannot/0016E5_00720.png
176 | train/0016E5_00750.png trainannot/0016E5_00750.png
177 | train/0016E5_00780.png trainannot/0016E5_00780.png
178 | train/0016E5_00810.png trainannot/0016E5_00810.png
179 | train/0016E5_00840.png trainannot/0016E5_00840.png
180 | train/0016E5_00870.png trainannot/0016E5_00870.png
181 | train/0016E5_00901.png trainannot/0016E5_00901.png
182 | train/0016E5_00930.png trainannot/0016E5_00930.png
183 | train/0016E5_00960.png trainannot/0016E5_00960.png
184 | train/0016E5_00990.png trainannot/0016E5_00990.png
185 | train/0016E5_01020.png trainannot/0016E5_01020.png
186 | train/0016E5_01050.png trainannot/0016E5_01050.png
187 | train/0016E5_01080.png trainannot/0016E5_01080.png
188 | train/0016E5_01110.png trainannot/0016E5_01110.png
189 | train/0016E5_01140.png trainannot/0016E5_01140.png
190 | train/0016E5_01170.png trainannot/0016E5_01170.png
191 | train/0016E5_01200.png trainannot/0016E5_01200.png
192 | train/0016E5_01230.png trainannot/0016E5_01230.png
193 | train/0016E5_01260.png trainannot/0016E5_01260.png
194 | train/0016E5_01290.png trainannot/0016E5_01290.png
195 | train/0016E5_01320.png trainannot/0016E5_01320.png
196 | train/0016E5_01350.png trainannot/0016E5_01350.png
197 | train/0016E5_01380.png trainannot/0016E5_01380.png
198 | train/0016E5_01410.png trainannot/0016E5_01410.png
199 | train/0016E5_01440.png trainannot/0016E5_01440.png
200 | train/0016E5_01470.png trainannot/0016E5_01470.png
201 | train/0016E5_01500.png trainannot/0016E5_01500.png
202 | train/0016E5_01530.png trainannot/0016E5_01530.png
203 | train/0016E5_01560.png trainannot/0016E5_01560.png
204 | train/0016E5_01590.png trainannot/0016E5_01590.png
205 | train/0016E5_01620.png trainannot/0016E5_01620.png
206 | train/0016E5_01650.png trainannot/0016E5_01650.png
207 | train/0016E5_01680.png trainannot/0016E5_01680.png
208 | train/0016E5_01710.png trainannot/0016E5_01710.png
209 | train/0016E5_01740.png trainannot/0016E5_01740.png
210 | train/0016E5_01770.png trainannot/0016E5_01770.png
211 | train/0016E5_01800.png trainannot/0016E5_01800.png
212 | train/0016E5_01830.png trainannot/0016E5_01830.png
213 | train/0016E5_01860.png trainannot/0016E5_01860.png
214 | train/0016E5_01890.png trainannot/0016E5_01890.png
215 | train/0016E5_01920.png trainannot/0016E5_01920.png
216 | train/0016E5_01950.png trainannot/0016E5_01950.png
217 | train/0016E5_01980.png trainannot/0016E5_01980.png
218 | train/0016E5_02010.png trainannot/0016E5_02010.png
219 | train/0016E5_02040.png trainannot/0016E5_02040.png
220 | train/0016E5_02070.png trainannot/0016E5_02070.png
221 | train/0016E5_02100.png trainannot/0016E5_02100.png
222 | train/0016E5_02130.png trainannot/0016E5_02130.png
223 | train/0016E5_02160.png trainannot/0016E5_02160.png
224 | train/0016E5_02190.png trainannot/0016E5_02190.png
225 | train/0016E5_02220.png trainannot/0016E5_02220.png
226 | train/0016E5_02250.png trainannot/0016E5_02250.png
227 | train/0016E5_02280.png trainannot/0016E5_02280.png
228 | train/0016E5_02310.png trainannot/0016E5_02310.png
229 | train/0016E5_02340.png trainannot/0016E5_02340.png
230 | train/0016E5_02370.png trainannot/0016E5_02370.png
231 | train/0016E5_02400.png trainannot/0016E5_02400.png
232 | train/0016E5_04350.png trainannot/0016E5_04350.png
233 | train/0016E5_04380.png trainannot/0016E5_04380.png
234 | train/0016E5_04410.png trainannot/0016E5_04410.png
235 | train/0016E5_04440.png trainannot/0016E5_04440.png
236 | train/0016E5_04470.png trainannot/0016E5_04470.png
237 | train/0016E5_04500.png trainannot/0016E5_04500.png
238 | train/0016E5_04530.png trainannot/0016E5_04530.png
239 | train/0016E5_04560.png trainannot/0016E5_04560.png
240 | train/0016E5_04590.png trainannot/0016E5_04590.png
241 | train/0016E5_04620.png trainannot/0016E5_04620.png
242 | train/0016E5_04650.png trainannot/0016E5_04650.png
243 | train/0016E5_04680.png trainannot/0016E5_04680.png
244 | train/0016E5_04710.png trainannot/0016E5_04710.png
245 | train/0016E5_04740.png trainannot/0016E5_04740.png
246 | train/0016E5_04770.png trainannot/0016E5_04770.png
247 | train/0016E5_04800.png trainannot/0016E5_04800.png
248 | train/0016E5_04830.png trainannot/0016E5_04830.png
249 | train/0016E5_04860.png trainannot/0016E5_04860.png
250 | train/0016E5_04890.png trainannot/0016E5_04890.png
251 | train/0016E5_04920.png trainannot/0016E5_04920.png
252 | train/0016E5_04950.png trainannot/0016E5_04950.png
253 | train/0016E5_04980.png trainannot/0016E5_04980.png
254 | train/0016E5_05010.png trainannot/0016E5_05010.png
255 | train/0016E5_05040.png trainannot/0016E5_05040.png
256 | train/0016E5_05070.png trainannot/0016E5_05070.png
257 | train/0016E5_05100.png trainannot/0016E5_05100.png
258 | train/0016E5_05130.png trainannot/0016E5_05130.png
259 | train/0016E5_05160.png trainannot/0016E5_05160.png
260 | train/0016E5_05190.png trainannot/0016E5_05190.png
261 | train/0016E5_05220.png trainannot/0016E5_05220.png
262 | train/0016E5_05250.png trainannot/0016E5_05250.png
263 | train/0016E5_05280.png trainannot/0016E5_05280.png
264 | train/0016E5_05310.png trainannot/0016E5_05310.png
265 | train/0016E5_05340.png trainannot/0016E5_05340.png
266 | train/0016E5_05370.png trainannot/0016E5_05370.png
267 | train/0016E5_05400.png trainannot/0016E5_05400.png
268 | train/0016E5_05430.png trainannot/0016E5_05430.png
269 | train/0016E5_05460.png trainannot/0016E5_05460.png
270 | train/0016E5_05490.png trainannot/0016E5_05490.png
271 | train/0016E5_05520.png trainannot/0016E5_05520.png
272 | train/0016E5_05550.png trainannot/0016E5_05550.png
273 | train/0016E5_05580.png trainannot/0016E5_05580.png
274 | train/0016E5_05610.png trainannot/0016E5_05610.png
275 | train/0016E5_05640.png trainannot/0016E5_05640.png
276 | train/0016E5_05670.png trainannot/0016E5_05670.png
277 | train/0016E5_05700.png trainannot/0016E5_05700.png
278 | train/0016E5_05730.png trainannot/0016E5_05730.png
279 | train/0016E5_05760.png trainannot/0016E5_05760.png
280 | train/0016E5_05790.png trainannot/0016E5_05790.png
281 | train/0016E5_05820.png trainannot/0016E5_05820.png
282 | train/0016E5_05850.png trainannot/0016E5_05850.png
283 | train/0016E5_05880.png trainannot/0016E5_05880.png
284 | train/0016E5_05910.png trainannot/0016E5_05910.png
285 | train/0016E5_05940.png trainannot/0016E5_05940.png
286 | train/0016E5_05970.png trainannot/0016E5_05970.png
287 | train/0016E5_06000.png trainannot/0016E5_06000.png
288 | train/0016E5_06030.png trainannot/0016E5_06030.png
289 | train/0016E5_06060.png trainannot/0016E5_06060.png
290 | train/0016E5_06090.png trainannot/0016E5_06090.png
291 | train/0016E5_06120.png trainannot/0016E5_06120.png
292 | train/0016E5_06150.png trainannot/0016E5_06150.png
293 | train/0016E5_06180.png trainannot/0016E5_06180.png
294 | train/0016E5_06210.png trainannot/0016E5_06210.png
295 | train/0016E5_06240.png trainannot/0016E5_06240.png
296 | train/0016E5_06270.png trainannot/0016E5_06270.png
297 | train/0016E5_06300.png trainannot/0016E5_06300.png
298 | train/0016E5_06330.png trainannot/0016E5_06330.png
299 | train/0016E5_06360.png trainannot/0016E5_06360.png
300 | train/0016E5_06390.png trainannot/0016E5_06390.png
301 | train/0016E5_06420.png trainannot/0016E5_06420.png
302 | train/0016E5_06450.png trainannot/0016E5_06450.png
303 | train/0016E5_06480.png trainannot/0016E5_06480.png
304 | train/0016E5_06510.png trainannot/0016E5_06510.png
305 | train/0016E5_06540.png trainannot/0016E5_06540.png
306 | train/0016E5_06570.png trainannot/0016E5_06570.png
307 | train/0016E5_06600.png trainannot/0016E5_06600.png
308 | train/0016E5_06630.png trainannot/0016E5_06630.png
309 | train/0016E5_06660.png trainannot/0016E5_06660.png
310 | train/0016E5_06690.png trainannot/0016E5_06690.png
311 | train/0016E5_06720.png trainannot/0016E5_06720.png
312 | train/0016E5_06750.png trainannot/0016E5_06750.png
313 | train/0016E5_06780.png trainannot/0016E5_06780.png
314 | train/0016E5_06810.png trainannot/0016E5_06810.png
315 | train/0016E5_06840.png trainannot/0016E5_06840.png
316 | train/0016E5_06870.png trainannot/0016E5_06870.png
317 | train/0016E5_06900.png trainannot/0016E5_06900.png
318 | train/0016E5_06930.png trainannot/0016E5_06930.png
319 | train/0016E5_06960.png trainannot/0016E5_06960.png
320 | train/0016E5_06990.png trainannot/0016E5_06990.png
321 | train/0016E5_07020.png trainannot/0016E5_07020.png
322 | train/0016E5_07050.png trainannot/0016E5_07050.png
323 | train/0016E5_07080.png trainannot/0016E5_07080.png
324 | train/0016E5_07110.png trainannot/0016E5_07110.png
325 | train/0016E5_07140.png trainannot/0016E5_07140.png
326 | train/0016E5_07170.png trainannot/0016E5_07170.png
327 | train/0016E5_07200.png trainannot/0016E5_07200.png
328 | train/0016E5_07230.png trainannot/0016E5_07230.png
329 | train/0016E5_07260.png trainannot/0016E5_07260.png
330 | train/0016E5_07290.png trainannot/0016E5_07290.png
331 | train/0016E5_07320.png trainannot/0016E5_07320.png
332 | train/0016E5_07350.png trainannot/0016E5_07350.png
333 | train/0016E5_07380.png trainannot/0016E5_07380.png
334 | train/0016E5_07410.png trainannot/0016E5_07410.png
335 | train/0016E5_07440.png trainannot/0016E5_07440.png
336 | train/0016E5_07470.png trainannot/0016E5_07470.png
337 | train/0016E5_07500.png trainannot/0016E5_07500.png
338 | train/0016E5_07530.png trainannot/0016E5_07530.png
339 | train/0016E5_07560.png trainannot/0016E5_07560.png
340 | train/0016E5_07590.png trainannot/0016E5_07590.png
341 | train/0016E5_07620.png trainannot/0016E5_07620.png
342 | train/0016E5_07650.png trainannot/0016E5_07650.png
343 | train/0016E5_07680.png trainannot/0016E5_07680.png
344 | train/0016E5_07710.png trainannot/0016E5_07710.png
345 | train/0016E5_07740.png trainannot/0016E5_07740.png
346 | train/0016E5_07770.png trainannot/0016E5_07770.png
347 | train/0016E5_07800.png trainannot/0016E5_07800.png
348 | train/0016E5_07830.png trainannot/0016E5_07830.png
349 | train/0016E5_07860.png trainannot/0016E5_07860.png
350 | train/0016E5_07890.png trainannot/0016E5_07890.png
351 | train/0016E5_07920.png trainannot/0016E5_07920.png
352 | train/0016E5_08190.png trainannot/0016E5_08190.png
353 | train/0016E5_08220.png trainannot/0016E5_08220.png
354 | train/0016E5_08250.png trainannot/0016E5_08250.png
355 | train/0016E5_08280.png trainannot/0016E5_08280.png
356 | train/0016E5_08310.png trainannot/0016E5_08310.png
357 | train/0016E5_08340.png trainannot/0016E5_08340.png
358 | train/0016E5_08370.png trainannot/0016E5_08370.png
359 | train/0016E5_08400.png trainannot/0016E5_08400.png
360 | train/0016E5_08430.png trainannot/0016E5_08430.png
361 | train/0016E5_08460.png trainannot/0016E5_08460.png
362 | train/0016E5_08490.png trainannot/0016E5_08490.png
363 | train/0016E5_08520.png trainannot/0016E5_08520.png
364 | train/0016E5_08550.png trainannot/0016E5_08550.png
365 | train/0016E5_08580.png trainannot/0016E5_08580.png
366 | train/0016E5_08610.png trainannot/0016E5_08610.png
367 | train/0016E5_08640.png trainannot/0016E5_08640.png
368 | val/0016E5_07959.png valannot/0016E5_07959.png
369 | val/0016E5_07961.png valannot/0016E5_07961.png
370 | val/0016E5_07963.png valannot/0016E5_07963.png
371 | val/0016E5_07965.png valannot/0016E5_07965.png
372 | val/0016E5_07967.png valannot/0016E5_07967.png
373 | val/0016E5_07969.png valannot/0016E5_07969.png
374 | val/0016E5_07971.png valannot/0016E5_07971.png
375 | val/0016E5_07973.png valannot/0016E5_07973.png
376 | val/0016E5_07975.png valannot/0016E5_07975.png
377 | val/0016E5_07977.png valannot/0016E5_07977.png
378 | val/0016E5_07979.png valannot/0016E5_07979.png
379 | val/0016E5_07981.png valannot/0016E5_07981.png
380 | val/0016E5_07983.png valannot/0016E5_07983.png
381 | val/0016E5_07985.png valannot/0016E5_07985.png
382 | val/0016E5_07987.png valannot/0016E5_07987.png
383 | val/0016E5_07989.png valannot/0016E5_07989.png
384 | val/0016E5_07991.png valannot/0016E5_07991.png
385 | val/0016E5_07993.png valannot/0016E5_07993.png
386 | val/0016E5_07995.png valannot/0016E5_07995.png
387 | val/0016E5_07997.png valannot/0016E5_07997.png
388 | val/0016E5_07999.png valannot/0016E5_07999.png
389 | val/0016E5_08001.png valannot/0016E5_08001.png
390 | val/0016E5_08003.png valannot/0016E5_08003.png
391 | val/0016E5_08005.png valannot/0016E5_08005.png
392 | val/0016E5_08007.png valannot/0016E5_08007.png
393 | val/0016E5_08009.png valannot/0016E5_08009.png
394 | val/0016E5_08011.png valannot/0016E5_08011.png
395 | val/0016E5_08013.png valannot/0016E5_08013.png
396 | val/0016E5_08015.png valannot/0016E5_08015.png
397 | val/0016E5_08017.png valannot/0016E5_08017.png
398 | val/0016E5_08019.png valannot/0016E5_08019.png
399 | val/0016E5_08021.png valannot/0016E5_08021.png
400 | val/0016E5_08023.png valannot/0016E5_08023.png
401 | val/0016E5_08025.png valannot/0016E5_08025.png
402 | val/0016E5_08027.png valannot/0016E5_08027.png
403 | val/0016E5_08029.png valannot/0016E5_08029.png
404 | val/0016E5_08031.png valannot/0016E5_08031.png
405 | val/0016E5_08033.png valannot/0016E5_08033.png
406 | val/0016E5_08035.png valannot/0016E5_08035.png
407 | val/0016E5_08037.png valannot/0016E5_08037.png
408 | val/0016E5_08039.png valannot/0016E5_08039.png
409 | val/0016E5_08041.png valannot/0016E5_08041.png
410 | val/0016E5_08043.png valannot/0016E5_08043.png
411 | val/0016E5_08045.png valannot/0016E5_08045.png
412 | val/0016E5_08047.png valannot/0016E5_08047.png
413 | val/0016E5_08049.png valannot/0016E5_08049.png
414 | val/0016E5_08051.png valannot/0016E5_08051.png
415 | val/0016E5_08053.png valannot/0016E5_08053.png
416 | val/0016E5_08055.png valannot/0016E5_08055.png
417 | val/0016E5_08057.png valannot/0016E5_08057.png
418 | val/0016E5_08059.png valannot/0016E5_08059.png
419 | val/0016E5_08061.png valannot/0016E5_08061.png
420 | val/0016E5_08063.png valannot/0016E5_08063.png
421 | val/0016E5_08065.png valannot/0016E5_08065.png
422 | val/0016E5_08067.png valannot/0016E5_08067.png
423 | val/0016E5_08069.png valannot/0016E5_08069.png
424 | val/0016E5_08071.png valannot/0016E5_08071.png
425 | val/0016E5_08073.png valannot/0016E5_08073.png
426 | val/0016E5_08075.png valannot/0016E5_08075.png
427 | val/0016E5_08077.png valannot/0016E5_08077.png
428 | val/0016E5_08079.png valannot/0016E5_08079.png
429 | val/0016E5_08081.png valannot/0016E5_08081.png
430 | val/0016E5_08083.png valannot/0016E5_08083.png
431 | val/0016E5_08085.png valannot/0016E5_08085.png
432 | val/0016E5_08087.png valannot/0016E5_08087.png
433 | val/0016E5_08089.png valannot/0016E5_08089.png
434 | val/0016E5_08091.png valannot/0016E5_08091.png
435 | val/0016E5_08093.png valannot/0016E5_08093.png
436 | val/0016E5_08095.png valannot/0016E5_08095.png
437 | val/0016E5_08097.png valannot/0016E5_08097.png
438 | val/0016E5_08099.png valannot/0016E5_08099.png
439 | val/0016E5_08101.png valannot/0016E5_08101.png
440 | val/0016E5_08103.png valannot/0016E5_08103.png
441 | val/0016E5_08105.png valannot/0016E5_08105.png
442 | val/0016E5_08107.png valannot/0016E5_08107.png
443 | val/0016E5_08109.png valannot/0016E5_08109.png
444 | val/0016E5_08111.png valannot/0016E5_08111.png
445 | val/0016E5_08113.png valannot/0016E5_08113.png
446 | val/0016E5_08115.png valannot/0016E5_08115.png
447 | val/0016E5_08117.png valannot/0016E5_08117.png
448 | val/0016E5_08119.png valannot/0016E5_08119.png
449 | val/0016E5_08121.png valannot/0016E5_08121.png
450 | val/0016E5_08123.png valannot/0016E5_08123.png
451 | val/0016E5_08125.png valannot/0016E5_08125.png
452 | val/0016E5_08127.png valannot/0016E5_08127.png
453 | val/0016E5_08129.png valannot/0016E5_08129.png
454 | val/0016E5_08131.png valannot/0016E5_08131.png
455 | val/0016E5_08133.png valannot/0016E5_08133.png
456 | val/0016E5_08135.png valannot/0016E5_08135.png
457 | val/0016E5_08137.png valannot/0016E5_08137.png
458 | val/0016E5_08139.png valannot/0016E5_08139.png
459 | val/0016E5_08141.png valannot/0016E5_08141.png
460 | val/0016E5_08143.png valannot/0016E5_08143.png
461 | val/0016E5_08145.png valannot/0016E5_08145.png
462 | val/0016E5_08147.png valannot/0016E5_08147.png
463 | val/0016E5_08149.png valannot/0016E5_08149.png
464 | val/0016E5_08151.png valannot/0016E5_08151.png
465 | val/0016E5_08153.png valannot/0016E5_08153.png
466 | val/0016E5_08155.png valannot/0016E5_08155.png
467 | val/0016E5_08157.png valannot/0016E5_08157.png
468 | val/0016E5_08159.png valannot/0016E5_08159.png
469 |
--------------------------------------------------------------------------------
/dataset/camvid/camvid_val_list.txt:
--------------------------------------------------------------------------------
1 | val/0016E5_07959.png valannot/0016E5_07959.png
2 | val/0016E5_07961.png valannot/0016E5_07961.png
3 | val/0016E5_07963.png valannot/0016E5_07963.png
4 | val/0016E5_07965.png valannot/0016E5_07965.png
5 | val/0016E5_07967.png valannot/0016E5_07967.png
6 | val/0016E5_07969.png valannot/0016E5_07969.png
7 | val/0016E5_07971.png valannot/0016E5_07971.png
8 | val/0016E5_07973.png valannot/0016E5_07973.png
9 | val/0016E5_07975.png valannot/0016E5_07975.png
10 | val/0016E5_07977.png valannot/0016E5_07977.png
11 | val/0016E5_07979.png valannot/0016E5_07979.png
12 | val/0016E5_07981.png valannot/0016E5_07981.png
13 | val/0016E5_07983.png valannot/0016E5_07983.png
14 | val/0016E5_07985.png valannot/0016E5_07985.png
15 | val/0016E5_07987.png valannot/0016E5_07987.png
16 | val/0016E5_07989.png valannot/0016E5_07989.png
17 | val/0016E5_07991.png valannot/0016E5_07991.png
18 | val/0016E5_07993.png valannot/0016E5_07993.png
19 | val/0016E5_07995.png valannot/0016E5_07995.png
20 | val/0016E5_07997.png valannot/0016E5_07997.png
21 | val/0016E5_07999.png valannot/0016E5_07999.png
22 | val/0016E5_08001.png valannot/0016E5_08001.png
23 | val/0016E5_08003.png valannot/0016E5_08003.png
24 | val/0016E5_08005.png valannot/0016E5_08005.png
25 | val/0016E5_08007.png valannot/0016E5_08007.png
26 | val/0016E5_08009.png valannot/0016E5_08009.png
27 | val/0016E5_08011.png valannot/0016E5_08011.png
28 | val/0016E5_08013.png valannot/0016E5_08013.png
29 | val/0016E5_08015.png valannot/0016E5_08015.png
30 | val/0016E5_08017.png valannot/0016E5_08017.png
31 | val/0016E5_08019.png valannot/0016E5_08019.png
32 | val/0016E5_08021.png valannot/0016E5_08021.png
33 | val/0016E5_08023.png valannot/0016E5_08023.png
34 | val/0016E5_08025.png valannot/0016E5_08025.png
35 | val/0016E5_08027.png valannot/0016E5_08027.png
36 | val/0016E5_08029.png valannot/0016E5_08029.png
37 | val/0016E5_08031.png valannot/0016E5_08031.png
38 | val/0016E5_08033.png valannot/0016E5_08033.png
39 | val/0016E5_08035.png valannot/0016E5_08035.png
40 | val/0016E5_08037.png valannot/0016E5_08037.png
41 | val/0016E5_08039.png valannot/0016E5_08039.png
42 | val/0016E5_08041.png valannot/0016E5_08041.png
43 | val/0016E5_08043.png valannot/0016E5_08043.png
44 | val/0016E5_08045.png valannot/0016E5_08045.png
45 | val/0016E5_08047.png valannot/0016E5_08047.png
46 | val/0016E5_08049.png valannot/0016E5_08049.png
47 | val/0016E5_08051.png valannot/0016E5_08051.png
48 | val/0016E5_08053.png valannot/0016E5_08053.png
49 | val/0016E5_08055.png valannot/0016E5_08055.png
50 | val/0016E5_08057.png valannot/0016E5_08057.png
51 | val/0016E5_08059.png valannot/0016E5_08059.png
52 | val/0016E5_08061.png valannot/0016E5_08061.png
53 | val/0016E5_08063.png valannot/0016E5_08063.png
54 | val/0016E5_08065.png valannot/0016E5_08065.png
55 | val/0016E5_08067.png valannot/0016E5_08067.png
56 | val/0016E5_08069.png valannot/0016E5_08069.png
57 | val/0016E5_08071.png valannot/0016E5_08071.png
58 | val/0016E5_08073.png valannot/0016E5_08073.png
59 | val/0016E5_08075.png valannot/0016E5_08075.png
60 | val/0016E5_08077.png valannot/0016E5_08077.png
61 | val/0016E5_08079.png valannot/0016E5_08079.png
62 | val/0016E5_08081.png valannot/0016E5_08081.png
63 | val/0016E5_08083.png valannot/0016E5_08083.png
64 | val/0016E5_08085.png valannot/0016E5_08085.png
65 | val/0016E5_08087.png valannot/0016E5_08087.png
66 | val/0016E5_08089.png valannot/0016E5_08089.png
67 | val/0016E5_08091.png valannot/0016E5_08091.png
68 | val/0016E5_08093.png valannot/0016E5_08093.png
69 | val/0016E5_08095.png valannot/0016E5_08095.png
70 | val/0016E5_08097.png valannot/0016E5_08097.png
71 | val/0016E5_08099.png valannot/0016E5_08099.png
72 | val/0016E5_08101.png valannot/0016E5_08101.png
73 | val/0016E5_08103.png valannot/0016E5_08103.png
74 | val/0016E5_08105.png valannot/0016E5_08105.png
75 | val/0016E5_08107.png valannot/0016E5_08107.png
76 | val/0016E5_08109.png valannot/0016E5_08109.png
77 | val/0016E5_08111.png valannot/0016E5_08111.png
78 | val/0016E5_08113.png valannot/0016E5_08113.png
79 | val/0016E5_08115.png valannot/0016E5_08115.png
80 | val/0016E5_08117.png valannot/0016E5_08117.png
81 | val/0016E5_08119.png valannot/0016E5_08119.png
82 | val/0016E5_08121.png valannot/0016E5_08121.png
83 | val/0016E5_08123.png valannot/0016E5_08123.png
84 | val/0016E5_08125.png valannot/0016E5_08125.png
85 | val/0016E5_08127.png valannot/0016E5_08127.png
86 | val/0016E5_08129.png valannot/0016E5_08129.png
87 | val/0016E5_08131.png valannot/0016E5_08131.png
88 | val/0016E5_08133.png valannot/0016E5_08133.png
89 | val/0016E5_08135.png valannot/0016E5_08135.png
90 | val/0016E5_08137.png valannot/0016E5_08137.png
91 | val/0016E5_08139.png valannot/0016E5_08139.png
92 | val/0016E5_08141.png valannot/0016E5_08141.png
93 | val/0016E5_08143.png valannot/0016E5_08143.png
94 | val/0016E5_08145.png valannot/0016E5_08145.png
95 | val/0016E5_08147.png valannot/0016E5_08147.png
96 | val/0016E5_08149.png valannot/0016E5_08149.png
97 | val/0016E5_08151.png valannot/0016E5_08151.png
98 | val/0016E5_08153.png valannot/0016E5_08153.png
99 | val/0016E5_08155.png valannot/0016E5_08155.png
100 | val/0016E5_08157.png valannot/0016E5_08157.png
101 | val/0016E5_08159.png valannot/0016E5_08159.png
102 |
--------------------------------------------------------------------------------
/dataset/cityscapes.py:
--------------------------------------------------------------------------------
1 | import os.path as osp
2 | import numpy as np
3 | import random
4 | import cv2
5 | from torch.utils import data
6 | import pickle
7 |
8 |
9 | class CityscapesDataSet(data.Dataset):
10 | """
11 | CityscapesDataSet is employed to load train set
12 | Args:
13 | root: the Cityscapes dataset path,
14 | cityscapes
15 | ├── gtFine
16 | ├── leftImg8bit
17 | list_path: cityscapes_train_list.txt, include partial path
18 | mean: bgr_mean (73.15835921, 82.90891754, 72.39239876)
19 |
20 | """
21 |
22 | def __init__(self, root='', list_path='', max_iters=None,
23 | crop_size=(512, 1024), mean=(128, 128, 128), scale=True, mirror=True, ignore_label=255):
24 | self.root = root
25 | self.list_path = list_path
26 | self.crop_h, self.crop_w = crop_size
27 | self.scale = scale
28 | self.ignore_label = ignore_label
29 | self.mean = mean
30 | self.is_mirror = mirror
31 | self.img_ids = [i_id.strip() for i_id in open(list_path)]
32 | if not max_iters == None:
33 | self.img_ids = self.img_ids * int(np.ceil(float(max_iters) / len(self.img_ids)))
34 | self.files = []
35 |
36 | # for split in ["train", "trainval", "val"]:
37 | for name in self.img_ids:
38 | img_file = osp.join(self.root, name.split()[0])
39 | # print(img_file)
40 | label_file = osp.join(self.root, name.split()[1])
41 | # print(label_file)
42 | self.files.append({
43 | "img": img_file,
44 | "label": label_file,
45 | "name": name
46 | })
47 |
48 | print("length of dataset: ", len(self.files))
49 |
50 | def __len__(self):
51 | return len(self.files)
52 |
53 | def __getitem__(self, index):
54 | datafiles = self.files[index]
55 | image = cv2.imread(datafiles["img"], cv2.IMREAD_COLOR)
56 | label = cv2.imread(datafiles["label"], cv2.IMREAD_GRAYSCALE)
57 | size = image.shape
58 | name = datafiles["name"]
59 | if self.scale:
60 | scale = [0.75, 1.0, 1.25, 1.5, 1.75, 2.0]
61 | f_scale = scale[random.randint(0, 5)]
62 | # f_scale = 0.5 + random.randint(0, 15) / 10.0 # random resize between 0.5 and 2
63 | image = cv2.resize(image, None, fx=f_scale, fy=f_scale, interpolation=cv2.INTER_LINEAR)
64 | label = cv2.resize(label, None, fx=f_scale, fy=f_scale, interpolation=cv2.INTER_NEAREST)
65 |
66 | image = np.asarray(image, np.float32)
67 |
68 | image -= self.mean
69 | # image = image.astype(np.float32) / 255.0
70 | image = image[:, :, ::-1] # change to RGB
71 | img_h, img_w = label.shape
72 | pad_h = max(self.crop_h - img_h, 0)
73 | pad_w = max(self.crop_w - img_w, 0)
74 | if pad_h > 0 or pad_w > 0:
75 | img_pad = cv2.copyMakeBorder(image, 0, pad_h, 0,
76 | pad_w, cv2.BORDER_CONSTANT,
77 | value=(0.0, 0.0, 0.0))
78 | label_pad = cv2.copyMakeBorder(label, 0, pad_h, 0,
79 | pad_w, cv2.BORDER_CONSTANT,
80 | value=(self.ignore_label,))
81 | else:
82 | img_pad, label_pad = image, label
83 |
84 | img_h, img_w = label_pad.shape
85 | h_off = random.randint(0, img_h - self.crop_h)
86 | w_off = random.randint(0, img_w - self.crop_w)
87 | # roi = cv2.Rect(w_off, h_off, self.crop_w, self.crop_h);
88 | image = np.asarray(img_pad[h_off: h_off + self.crop_h, w_off: w_off + self.crop_w], np.float32)
89 | label = np.asarray(label_pad[h_off: h_off + self.crop_h, w_off: w_off + self.crop_w], np.float32)
90 |
91 | image = image.transpose((2, 0, 1)) # NHWC -> NCHW
92 |
93 | if self.is_mirror:
94 | flip = np.random.choice(2) * 2 - 1
95 | image = image[:, :, ::flip]
96 | label = label[:, ::flip]
97 |
98 | return image.copy(), label.copy(), np.array(size), name
99 |
100 |
101 | class CityscapesValDataSet(data.Dataset):
102 | """
103 | CityscapesDataSet is employed to load val set
104 | Args:
105 | root: the Cityscapes dataset path,
106 | cityscapes
107 | ├── gtFine
108 | ├── leftImg8bit
109 | list_path: cityscapes_val_list.txt, include partial path
110 |
111 | """
112 |
113 | def __init__(self, root='',
114 | list_path='',
115 | f_scale=1, mean=(128, 128, 128), ignore_label=255):
116 | self.root = root
117 | self.list_path = list_path
118 | self.ignore_label = ignore_label
119 | self.mean = mean
120 | self.f_scale = f_scale
121 | self.img_ids = [i_id.strip() for i_id in open(list_path)]
122 | self.files = []
123 | for name in self.img_ids:
124 | img_file = osp.join(self.root, name.split()[0])
125 | # print(img_file)
126 | label_file = osp.join(self.root, name.split()[1])
127 | # print(label_file)
128 | image_name = name.strip().split()[0].strip().split('/', 3)[3].split('.')[0]
129 | # print("image_name: ",image_name)
130 | self.files.append({
131 | "img": img_file,
132 | "label": label_file,
133 | "name": image_name
134 | })
135 |
136 | print("length of dataset: ", len(self.files))
137 |
138 | def __len__(self):
139 | return len(self.files)
140 |
141 | def __getitem__(self, index):
142 | datafiles = self.files[index]
143 | image = cv2.imread(datafiles["img"], cv2.IMREAD_COLOR)
144 | label = cv2.imread(datafiles["label"], cv2.IMREAD_GRAYSCALE)
145 |
146 | size = image.shape
147 | name = datafiles["name"]
148 | if self.f_scale != 1:
149 | image = cv2.resize(image, None, fx=self.f_scale, fy=self.f_scale, interpolation=cv2.INTER_LINEAR)
150 | label = cv2.resize(label, None, fx=self.f_scale, fy=self.f_scale, interpolation=cv2.INTER_NEAREST)
151 |
152 | image = np.asarray(image, np.float32)
153 |
154 | image -= self.mean
155 | # image = image.astype(np.float32) / 255.0
156 | image = image[:, :, ::-1] # change to RGB
157 | image = image.transpose((2, 0, 1)) # HWC -> CHW
158 |
159 | # print('image.shape:',image.shape)
160 | return image.copy(), label.copy(), np.array(size), name
161 |
162 |
163 | class CityscapesTestDataSet(data.Dataset):
164 | """
165 | CityscapesDataSet is employed to load test set
166 | Args:
167 | root: the Cityscapes dataset path,
168 | list_path: cityscapes_test_list.txt, include partial path
169 |
170 | """
171 |
172 | def __init__(self, root='',
173 | list_path='', mean=(128, 128, 128),
174 | ignore_label=255):
175 | self.root = root
176 | self.list_path = list_path
177 | self.ignore_label = ignore_label
178 | self.mean = mean
179 | self.img_ids = [i_id.strip() for i_id in open(list_path)]
180 | self.files = []
181 | for name in self.img_ids:
182 | img_file = osp.join(self.root, name.split()[0])
183 | # print(img_file)
184 | image_name = name.strip().split()[0].strip().split('/', 3)[3].split('.')[0]
185 | # print(image_name)
186 | self.files.append({
187 | "img": img_file,
188 | "name": image_name
189 | })
190 | print("lenth of dataset: ", len(self.files))
191 |
192 | def __len__(self):
193 | return len(self.files)
194 |
195 | def __getitem__(self, index):
196 | datafiles = self.files[index]
197 |
198 | image = cv2.imread(datafiles["img"], cv2.IMREAD_COLOR)
199 | name = datafiles["name"]
200 | image = np.asarray(image, np.float32)
201 | size = image.shape
202 |
203 | image -= self.mean
204 | # image = image.astype(np.float32) / 255.0
205 | image = image[:, :, ::-1] # change to RGB
206 | image = image.transpose((2, 0, 1)) # HWC -> CHW
207 | return image.copy(), np.array(size), name
208 |
209 |
210 | class CityscapesTrainInform:
211 | """ To get statistical information about the train set, such as mean, std, class distribution.
212 | The class is employed for tackle class imbalance.
213 | """
214 |
215 | def __init__(self, data_dir='', classes=19,
216 | train_set_file="", inform_data_file="", normVal=1.10):
217 | """
218 | Args:
219 | data_dir: directory where the dataset is kept
220 | classes: number of classes in the dataset
221 | inform_data_file: location where cached file has to be stored
222 | normVal: normalization value, as defined in ERFNet paper
223 | """
224 | self.data_dir = data_dir
225 | self.classes = classes
226 | self.classWeights = np.ones(self.classes, dtype=np.float32)
227 | self.normVal = normVal
228 | self.mean = np.zeros(3, dtype=np.float32)
229 | self.std = np.zeros(3, dtype=np.float32)
230 | self.train_set_file = train_set_file
231 | self.inform_data_file = inform_data_file
232 |
233 | def compute_class_weights(self, histogram):
234 | """to compute the class weights
235 | Args:
236 | histogram: distribution of class samples
237 | """
238 | normHist = histogram / np.sum(histogram)
239 | for i in range(self.classes):
240 | self.classWeights[i] = 1 / (np.log(self.normVal + normHist[i]))
241 |
242 | def readWholeTrainSet(self, fileName, train_flag=True):
243 | """to read the whole train set of current dataset.
244 | Args:
245 | fileName: train set file that stores the image locations
246 | trainStg: if processing training or validation data
247 |
248 | return: 0 if successful
249 | """
250 | global_hist = np.zeros(self.classes, dtype=np.float32)
251 |
252 | no_files = 0
253 | min_val_al = 0
254 | max_val_al = 0
255 | with open(self.data_dir + '/' + fileName, 'r') as textFile:
256 | # with open(fileName, 'r') as textFile:
257 | for line in textFile:
258 | # we expect the text file to contain the data in following format
259 | #
260 | line_arr = line.split()
261 | img_file = ((self.data_dir).strip() + '/' + line_arr[0].strip()).strip()
262 | label_file = ((self.data_dir).strip() + '/' + line_arr[1].strip()).strip()
263 |
264 | label_img = cv2.imread(label_file, 0)
265 | unique_values = np.unique(label_img)
266 | max_val = max(unique_values)
267 | min_val = min(unique_values)
268 |
269 | max_val_al = max(max_val, max_val_al)
270 | min_val_al = min(min_val, min_val_al)
271 |
272 | if train_flag == True:
273 | hist = np.histogram(label_img, self.classes, range=(0, 18))
274 | global_hist += hist[0]
275 |
276 | rgb_img = cv2.imread(img_file)
277 | self.mean[0] += np.mean(rgb_img[:, :, 0])
278 | self.mean[1] += np.mean(rgb_img[:, :, 1])
279 | self.mean[2] += np.mean(rgb_img[:, :, 2])
280 |
281 | self.std[0] += np.std(rgb_img[:, :, 0])
282 | self.std[1] += np.std(rgb_img[:, :, 1])
283 | self.std[2] += np.std(rgb_img[:, :, 2])
284 |
285 | else:
286 | print("we can only collect statistical information of train set, please check")
287 |
288 | if max_val > (self.classes - 1) or min_val < 0:
289 | print('Labels can take value between 0 and number of classes.')
290 | print('Some problem with labels. Please check. label_set:', unique_values)
291 | print('Label Image ID: ' + label_file)
292 | no_files += 1
293 |
294 | # divide the mean and std values by the sample space size
295 | self.mean /= no_files
296 | self.std /= no_files
297 |
298 | # compute the class imbalance information
299 | self.compute_class_weights(global_hist)
300 | return 0
301 |
302 | def collectDataAndSave(self):
303 | """ To collect statistical information of train set and then save it.
304 | The file train.txt should be inside the data directory.
305 | """
306 | print('Processing training data')
307 | return_val = self.readWholeTrainSet(fileName=self.train_set_file)
308 |
309 | print('Pickling data')
310 | if return_val == 0:
311 | data_dict = dict()
312 | data_dict['mean'] = self.mean
313 | data_dict['std'] = self.std
314 | data_dict['classWeights'] = self.classWeights
315 | pickle.dump(data_dict, open(self.inform_data_file, "wb"))
316 | return data_dict
317 | return None
318 |
--------------------------------------------------------------------------------
/dataset/cityscapes/cityscapes_val_list.txt:
--------------------------------------------------------------------------------
1 | leftImg8bit/val/lindau/lindau_000000_000019_leftImg8bit.png gtFine/val/lindau/lindau_000000_000019_gtFine_labelTrainIds.png
2 | leftImg8bit/val/lindau/lindau_000001_000019_leftImg8bit.png gtFine/val/lindau/lindau_000001_000019_gtFine_labelTrainIds.png
3 | leftImg8bit/val/lindau/lindau_000002_000019_leftImg8bit.png gtFine/val/lindau/lindau_000002_000019_gtFine_labelTrainIds.png
4 | leftImg8bit/val/lindau/lindau_000003_000019_leftImg8bit.png gtFine/val/lindau/lindau_000003_000019_gtFine_labelTrainIds.png
5 | leftImg8bit/val/lindau/lindau_000004_000019_leftImg8bit.png gtFine/val/lindau/lindau_000004_000019_gtFine_labelTrainIds.png
6 | leftImg8bit/val/lindau/lindau_000005_000019_leftImg8bit.png gtFine/val/lindau/lindau_000005_000019_gtFine_labelTrainIds.png
7 | leftImg8bit/val/lindau/lindau_000006_000019_leftImg8bit.png gtFine/val/lindau/lindau_000006_000019_gtFine_labelTrainIds.png
8 | leftImg8bit/val/lindau/lindau_000007_000019_leftImg8bit.png gtFine/val/lindau/lindau_000007_000019_gtFine_labelTrainIds.png
9 | leftImg8bit/val/lindau/lindau_000008_000019_leftImg8bit.png gtFine/val/lindau/lindau_000008_000019_gtFine_labelTrainIds.png
10 | leftImg8bit/val/lindau/lindau_000009_000019_leftImg8bit.png gtFine/val/lindau/lindau_000009_000019_gtFine_labelTrainIds.png
11 | leftImg8bit/val/lindau/lindau_000010_000019_leftImg8bit.png gtFine/val/lindau/lindau_000010_000019_gtFine_labelTrainIds.png
12 | leftImg8bit/val/lindau/lindau_000011_000019_leftImg8bit.png gtFine/val/lindau/lindau_000011_000019_gtFine_labelTrainIds.png
13 | leftImg8bit/val/lindau/lindau_000012_000019_leftImg8bit.png gtFine/val/lindau/lindau_000012_000019_gtFine_labelTrainIds.png
14 | leftImg8bit/val/lindau/lindau_000013_000019_leftImg8bit.png gtFine/val/lindau/lindau_000013_000019_gtFine_labelTrainIds.png
15 | leftImg8bit/val/lindau/lindau_000014_000019_leftImg8bit.png gtFine/val/lindau/lindau_000014_000019_gtFine_labelTrainIds.png
16 | leftImg8bit/val/lindau/lindau_000015_000019_leftImg8bit.png gtFine/val/lindau/lindau_000015_000019_gtFine_labelTrainIds.png
17 | leftImg8bit/val/lindau/lindau_000016_000019_leftImg8bit.png gtFine/val/lindau/lindau_000016_000019_gtFine_labelTrainIds.png
18 | leftImg8bit/val/lindau/lindau_000017_000019_leftImg8bit.png gtFine/val/lindau/lindau_000017_000019_gtFine_labelTrainIds.png
19 | leftImg8bit/val/lindau/lindau_000018_000019_leftImg8bit.png gtFine/val/lindau/lindau_000018_000019_gtFine_labelTrainIds.png
20 | leftImg8bit/val/lindau/lindau_000019_000019_leftImg8bit.png gtFine/val/lindau/lindau_000019_000019_gtFine_labelTrainIds.png
21 | leftImg8bit/val/lindau/lindau_000020_000019_leftImg8bit.png gtFine/val/lindau/lindau_000020_000019_gtFine_labelTrainIds.png
22 | leftImg8bit/val/lindau/lindau_000021_000019_leftImg8bit.png gtFine/val/lindau/lindau_000021_000019_gtFine_labelTrainIds.png
23 | leftImg8bit/val/lindau/lindau_000022_000019_leftImg8bit.png gtFine/val/lindau/lindau_000022_000019_gtFine_labelTrainIds.png
24 | leftImg8bit/val/lindau/lindau_000023_000019_leftImg8bit.png gtFine/val/lindau/lindau_000023_000019_gtFine_labelTrainIds.png
25 | leftImg8bit/val/lindau/lindau_000024_000019_leftImg8bit.png gtFine/val/lindau/lindau_000024_000019_gtFine_labelTrainIds.png
26 | leftImg8bit/val/lindau/lindau_000025_000019_leftImg8bit.png gtFine/val/lindau/lindau_000025_000019_gtFine_labelTrainIds.png
27 | leftImg8bit/val/lindau/lindau_000026_000019_leftImg8bit.png gtFine/val/lindau/lindau_000026_000019_gtFine_labelTrainIds.png
28 | leftImg8bit/val/lindau/lindau_000027_000019_leftImg8bit.png gtFine/val/lindau/lindau_000027_000019_gtFine_labelTrainIds.png
29 | leftImg8bit/val/lindau/lindau_000028_000019_leftImg8bit.png gtFine/val/lindau/lindau_000028_000019_gtFine_labelTrainIds.png
30 | leftImg8bit/val/lindau/lindau_000029_000019_leftImg8bit.png gtFine/val/lindau/lindau_000029_000019_gtFine_labelTrainIds.png
31 | leftImg8bit/val/lindau/lindau_000030_000019_leftImg8bit.png gtFine/val/lindau/lindau_000030_000019_gtFine_labelTrainIds.png
32 | leftImg8bit/val/lindau/lindau_000031_000019_leftImg8bit.png gtFine/val/lindau/lindau_000031_000019_gtFine_labelTrainIds.png
33 | leftImg8bit/val/lindau/lindau_000032_000019_leftImg8bit.png gtFine/val/lindau/lindau_000032_000019_gtFine_labelTrainIds.png
34 | leftImg8bit/val/lindau/lindau_000033_000019_leftImg8bit.png gtFine/val/lindau/lindau_000033_000019_gtFine_labelTrainIds.png
35 | leftImg8bit/val/lindau/lindau_000034_000019_leftImg8bit.png gtFine/val/lindau/lindau_000034_000019_gtFine_labelTrainIds.png
36 | leftImg8bit/val/lindau/lindau_000035_000019_leftImg8bit.png gtFine/val/lindau/lindau_000035_000019_gtFine_labelTrainIds.png
37 | leftImg8bit/val/lindau/lindau_000036_000019_leftImg8bit.png gtFine/val/lindau/lindau_000036_000019_gtFine_labelTrainIds.png
38 | leftImg8bit/val/lindau/lindau_000037_000019_leftImg8bit.png gtFine/val/lindau/lindau_000037_000019_gtFine_labelTrainIds.png
39 | leftImg8bit/val/lindau/lindau_000038_000019_leftImg8bit.png gtFine/val/lindau/lindau_000038_000019_gtFine_labelTrainIds.png
40 | leftImg8bit/val/lindau/lindau_000039_000019_leftImg8bit.png gtFine/val/lindau/lindau_000039_000019_gtFine_labelTrainIds.png
41 | leftImg8bit/val/lindau/lindau_000040_000019_leftImg8bit.png gtFine/val/lindau/lindau_000040_000019_gtFine_labelTrainIds.png
42 | leftImg8bit/val/lindau/lindau_000041_000019_leftImg8bit.png gtFine/val/lindau/lindau_000041_000019_gtFine_labelTrainIds.png
43 | leftImg8bit/val/lindau/lindau_000042_000019_leftImg8bit.png gtFine/val/lindau/lindau_000042_000019_gtFine_labelTrainIds.png
44 | leftImg8bit/val/lindau/lindau_000043_000019_leftImg8bit.png gtFine/val/lindau/lindau_000043_000019_gtFine_labelTrainIds.png
45 | leftImg8bit/val/lindau/lindau_000044_000019_leftImg8bit.png gtFine/val/lindau/lindau_000044_000019_gtFine_labelTrainIds.png
46 | leftImg8bit/val/lindau/lindau_000045_000019_leftImg8bit.png gtFine/val/lindau/lindau_000045_000019_gtFine_labelTrainIds.png
47 | leftImg8bit/val/lindau/lindau_000046_000019_leftImg8bit.png gtFine/val/lindau/lindau_000046_000019_gtFine_labelTrainIds.png
48 | leftImg8bit/val/lindau/lindau_000047_000019_leftImg8bit.png gtFine/val/lindau/lindau_000047_000019_gtFine_labelTrainIds.png
49 | leftImg8bit/val/lindau/lindau_000048_000019_leftImg8bit.png gtFine/val/lindau/lindau_000048_000019_gtFine_labelTrainIds.png
50 | leftImg8bit/val/lindau/lindau_000049_000019_leftImg8bit.png gtFine/val/lindau/lindau_000049_000019_gtFine_labelTrainIds.png
51 | leftImg8bit/val/lindau/lindau_000050_000019_leftImg8bit.png gtFine/val/lindau/lindau_000050_000019_gtFine_labelTrainIds.png
52 | leftImg8bit/val/lindau/lindau_000051_000019_leftImg8bit.png gtFine/val/lindau/lindau_000051_000019_gtFine_labelTrainIds.png
53 | leftImg8bit/val/lindau/lindau_000052_000019_leftImg8bit.png gtFine/val/lindau/lindau_000052_000019_gtFine_labelTrainIds.png
54 | leftImg8bit/val/lindau/lindau_000053_000019_leftImg8bit.png gtFine/val/lindau/lindau_000053_000019_gtFine_labelTrainIds.png
55 | leftImg8bit/val/lindau/lindau_000054_000019_leftImg8bit.png gtFine/val/lindau/lindau_000054_000019_gtFine_labelTrainIds.png
56 | leftImg8bit/val/lindau/lindau_000055_000019_leftImg8bit.png gtFine/val/lindau/lindau_000055_000019_gtFine_labelTrainIds.png
57 | leftImg8bit/val/lindau/lindau_000056_000019_leftImg8bit.png gtFine/val/lindau/lindau_000056_000019_gtFine_labelTrainIds.png
58 | leftImg8bit/val/lindau/lindau_000057_000019_leftImg8bit.png gtFine/val/lindau/lindau_000057_000019_gtFine_labelTrainIds.png
59 | leftImg8bit/val/lindau/lindau_000058_000019_leftImg8bit.png gtFine/val/lindau/lindau_000058_000019_gtFine_labelTrainIds.png
60 | leftImg8bit/val/munster/munster_000000_000019_leftImg8bit.png gtFine/val/munster/munster_000000_000019_gtFine_labelTrainIds.png
61 | leftImg8bit/val/munster/munster_000001_000019_leftImg8bit.png gtFine/val/munster/munster_000001_000019_gtFine_labelTrainIds.png
62 | leftImg8bit/val/munster/munster_000002_000019_leftImg8bit.png gtFine/val/munster/munster_000002_000019_gtFine_labelTrainIds.png
63 | leftImg8bit/val/munster/munster_000003_000019_leftImg8bit.png gtFine/val/munster/munster_000003_000019_gtFine_labelTrainIds.png
64 | leftImg8bit/val/munster/munster_000004_000019_leftImg8bit.png gtFine/val/munster/munster_000004_000019_gtFine_labelTrainIds.png
65 | leftImg8bit/val/munster/munster_000005_000019_leftImg8bit.png gtFine/val/munster/munster_000005_000019_gtFine_labelTrainIds.png
66 | leftImg8bit/val/munster/munster_000006_000019_leftImg8bit.png gtFine/val/munster/munster_000006_000019_gtFine_labelTrainIds.png
67 | leftImg8bit/val/munster/munster_000007_000019_leftImg8bit.png gtFine/val/munster/munster_000007_000019_gtFine_labelTrainIds.png
68 | leftImg8bit/val/munster/munster_000008_000019_leftImg8bit.png gtFine/val/munster/munster_000008_000019_gtFine_labelTrainIds.png
69 | leftImg8bit/val/munster/munster_000009_000019_leftImg8bit.png gtFine/val/munster/munster_000009_000019_gtFine_labelTrainIds.png
70 | leftImg8bit/val/munster/munster_000010_000019_leftImg8bit.png gtFine/val/munster/munster_000010_000019_gtFine_labelTrainIds.png
71 | leftImg8bit/val/munster/munster_000011_000019_leftImg8bit.png gtFine/val/munster/munster_000011_000019_gtFine_labelTrainIds.png
72 | leftImg8bit/val/munster/munster_000012_000019_leftImg8bit.png gtFine/val/munster/munster_000012_000019_gtFine_labelTrainIds.png
73 | leftImg8bit/val/munster/munster_000013_000019_leftImg8bit.png gtFine/val/munster/munster_000013_000019_gtFine_labelTrainIds.png
74 | leftImg8bit/val/munster/munster_000014_000019_leftImg8bit.png gtFine/val/munster/munster_000014_000019_gtFine_labelTrainIds.png
75 | leftImg8bit/val/munster/munster_000015_000019_leftImg8bit.png gtFine/val/munster/munster_000015_000019_gtFine_labelTrainIds.png
76 | leftImg8bit/val/munster/munster_000016_000019_leftImg8bit.png gtFine/val/munster/munster_000016_000019_gtFine_labelTrainIds.png
77 | leftImg8bit/val/munster/munster_000017_000019_leftImg8bit.png gtFine/val/munster/munster_000017_000019_gtFine_labelTrainIds.png
78 | leftImg8bit/val/munster/munster_000018_000019_leftImg8bit.png gtFine/val/munster/munster_000018_000019_gtFine_labelTrainIds.png
79 | leftImg8bit/val/munster/munster_000019_000019_leftImg8bit.png gtFine/val/munster/munster_000019_000019_gtFine_labelTrainIds.png
80 | leftImg8bit/val/munster/munster_000020_000019_leftImg8bit.png gtFine/val/munster/munster_000020_000019_gtFine_labelTrainIds.png
81 | leftImg8bit/val/munster/munster_000021_000019_leftImg8bit.png gtFine/val/munster/munster_000021_000019_gtFine_labelTrainIds.png
82 | leftImg8bit/val/munster/munster_000022_000019_leftImg8bit.png gtFine/val/munster/munster_000022_000019_gtFine_labelTrainIds.png
83 | leftImg8bit/val/munster/munster_000023_000019_leftImg8bit.png gtFine/val/munster/munster_000023_000019_gtFine_labelTrainIds.png
84 | leftImg8bit/val/munster/munster_000024_000019_leftImg8bit.png gtFine/val/munster/munster_000024_000019_gtFine_labelTrainIds.png
85 | leftImg8bit/val/munster/munster_000025_000019_leftImg8bit.png gtFine/val/munster/munster_000025_000019_gtFine_labelTrainIds.png
86 | leftImg8bit/val/munster/munster_000026_000019_leftImg8bit.png gtFine/val/munster/munster_000026_000019_gtFine_labelTrainIds.png
87 | leftImg8bit/val/munster/munster_000027_000019_leftImg8bit.png gtFine/val/munster/munster_000027_000019_gtFine_labelTrainIds.png
88 | leftImg8bit/val/munster/munster_000028_000019_leftImg8bit.png gtFine/val/munster/munster_000028_000019_gtFine_labelTrainIds.png
89 | leftImg8bit/val/munster/munster_000029_000019_leftImg8bit.png gtFine/val/munster/munster_000029_000019_gtFine_labelTrainIds.png
90 | leftImg8bit/val/munster/munster_000030_000019_leftImg8bit.png gtFine/val/munster/munster_000030_000019_gtFine_labelTrainIds.png
91 | leftImg8bit/val/munster/munster_000031_000019_leftImg8bit.png gtFine/val/munster/munster_000031_000019_gtFine_labelTrainIds.png
92 | leftImg8bit/val/munster/munster_000032_000019_leftImg8bit.png gtFine/val/munster/munster_000032_000019_gtFine_labelTrainIds.png
93 | leftImg8bit/val/munster/munster_000033_000019_leftImg8bit.png gtFine/val/munster/munster_000033_000019_gtFine_labelTrainIds.png
94 | leftImg8bit/val/munster/munster_000034_000019_leftImg8bit.png gtFine/val/munster/munster_000034_000019_gtFine_labelTrainIds.png
95 | leftImg8bit/val/munster/munster_000035_000019_leftImg8bit.png gtFine/val/munster/munster_000035_000019_gtFine_labelTrainIds.png
96 | leftImg8bit/val/munster/munster_000036_000019_leftImg8bit.png gtFine/val/munster/munster_000036_000019_gtFine_labelTrainIds.png
97 | leftImg8bit/val/munster/munster_000037_000019_leftImg8bit.png gtFine/val/munster/munster_000037_000019_gtFine_labelTrainIds.png
98 | leftImg8bit/val/munster/munster_000038_000019_leftImg8bit.png gtFine/val/munster/munster_000038_000019_gtFine_labelTrainIds.png
99 | leftImg8bit/val/munster/munster_000039_000019_leftImg8bit.png gtFine/val/munster/munster_000039_000019_gtFine_labelTrainIds.png
100 | leftImg8bit/val/munster/munster_000040_000019_leftImg8bit.png gtFine/val/munster/munster_000040_000019_gtFine_labelTrainIds.png
101 | leftImg8bit/val/munster/munster_000041_000019_leftImg8bit.png gtFine/val/munster/munster_000041_000019_gtFine_labelTrainIds.png
102 | leftImg8bit/val/munster/munster_000042_000019_leftImg8bit.png gtFine/val/munster/munster_000042_000019_gtFine_labelTrainIds.png
103 | leftImg8bit/val/munster/munster_000043_000019_leftImg8bit.png gtFine/val/munster/munster_000043_000019_gtFine_labelTrainIds.png
104 | leftImg8bit/val/munster/munster_000044_000019_leftImg8bit.png gtFine/val/munster/munster_000044_000019_gtFine_labelTrainIds.png
105 | leftImg8bit/val/munster/munster_000045_000019_leftImg8bit.png gtFine/val/munster/munster_000045_000019_gtFine_labelTrainIds.png
106 | leftImg8bit/val/munster/munster_000046_000019_leftImg8bit.png gtFine/val/munster/munster_000046_000019_gtFine_labelTrainIds.png
107 | leftImg8bit/val/munster/munster_000047_000019_leftImg8bit.png gtFine/val/munster/munster_000047_000019_gtFine_labelTrainIds.png
108 | leftImg8bit/val/munster/munster_000048_000019_leftImg8bit.png gtFine/val/munster/munster_000048_000019_gtFine_labelTrainIds.png
109 | leftImg8bit/val/munster/munster_000049_000019_leftImg8bit.png gtFine/val/munster/munster_000049_000019_gtFine_labelTrainIds.png
110 | leftImg8bit/val/munster/munster_000050_000019_leftImg8bit.png gtFine/val/munster/munster_000050_000019_gtFine_labelTrainIds.png
111 | leftImg8bit/val/munster/munster_000051_000019_leftImg8bit.png gtFine/val/munster/munster_000051_000019_gtFine_labelTrainIds.png
112 | leftImg8bit/val/munster/munster_000052_000019_leftImg8bit.png gtFine/val/munster/munster_000052_000019_gtFine_labelTrainIds.png
113 | leftImg8bit/val/munster/munster_000053_000019_leftImg8bit.png gtFine/val/munster/munster_000053_000019_gtFine_labelTrainIds.png
114 | leftImg8bit/val/munster/munster_000054_000019_leftImg8bit.png gtFine/val/munster/munster_000054_000019_gtFine_labelTrainIds.png
115 | leftImg8bit/val/munster/munster_000055_000019_leftImg8bit.png gtFine/val/munster/munster_000055_000019_gtFine_labelTrainIds.png
116 | leftImg8bit/val/munster/munster_000056_000019_leftImg8bit.png gtFine/val/munster/munster_000056_000019_gtFine_labelTrainIds.png
117 | leftImg8bit/val/munster/munster_000057_000019_leftImg8bit.png gtFine/val/munster/munster_000057_000019_gtFine_labelTrainIds.png
118 | leftImg8bit/val/munster/munster_000058_000019_leftImg8bit.png gtFine/val/munster/munster_000058_000019_gtFine_labelTrainIds.png
119 | leftImg8bit/val/munster/munster_000059_000019_leftImg8bit.png gtFine/val/munster/munster_000059_000019_gtFine_labelTrainIds.png
120 | leftImg8bit/val/munster/munster_000060_000019_leftImg8bit.png gtFine/val/munster/munster_000060_000019_gtFine_labelTrainIds.png
121 | leftImg8bit/val/munster/munster_000061_000019_leftImg8bit.png gtFine/val/munster/munster_000061_000019_gtFine_labelTrainIds.png
122 | leftImg8bit/val/munster/munster_000062_000019_leftImg8bit.png gtFine/val/munster/munster_000062_000019_gtFine_labelTrainIds.png
123 | leftImg8bit/val/munster/munster_000063_000019_leftImg8bit.png gtFine/val/munster/munster_000063_000019_gtFine_labelTrainIds.png
124 | leftImg8bit/val/munster/munster_000064_000019_leftImg8bit.png gtFine/val/munster/munster_000064_000019_gtFine_labelTrainIds.png
125 | leftImg8bit/val/munster/munster_000065_000019_leftImg8bit.png gtFine/val/munster/munster_000065_000019_gtFine_labelTrainIds.png
126 | leftImg8bit/val/munster/munster_000066_000019_leftImg8bit.png gtFine/val/munster/munster_000066_000019_gtFine_labelTrainIds.png
127 | leftImg8bit/val/munster/munster_000067_000019_leftImg8bit.png gtFine/val/munster/munster_000067_000019_gtFine_labelTrainIds.png
128 | leftImg8bit/val/munster/munster_000068_000019_leftImg8bit.png gtFine/val/munster/munster_000068_000019_gtFine_labelTrainIds.png
129 | leftImg8bit/val/munster/munster_000069_000019_leftImg8bit.png gtFine/val/munster/munster_000069_000019_gtFine_labelTrainIds.png
130 | leftImg8bit/val/munster/munster_000070_000019_leftImg8bit.png gtFine/val/munster/munster_000070_000019_gtFine_labelTrainIds.png
131 | leftImg8bit/val/munster/munster_000071_000019_leftImg8bit.png gtFine/val/munster/munster_000071_000019_gtFine_labelTrainIds.png
132 | leftImg8bit/val/munster/munster_000072_000019_leftImg8bit.png gtFine/val/munster/munster_000072_000019_gtFine_labelTrainIds.png
133 | leftImg8bit/val/munster/munster_000073_000019_leftImg8bit.png gtFine/val/munster/munster_000073_000019_gtFine_labelTrainIds.png
134 | leftImg8bit/val/munster/munster_000074_000019_leftImg8bit.png gtFine/val/munster/munster_000074_000019_gtFine_labelTrainIds.png
135 | leftImg8bit/val/munster/munster_000075_000019_leftImg8bit.png gtFine/val/munster/munster_000075_000019_gtFine_labelTrainIds.png
136 | leftImg8bit/val/munster/munster_000076_000019_leftImg8bit.png gtFine/val/munster/munster_000076_000019_gtFine_labelTrainIds.png
137 | leftImg8bit/val/munster/munster_000077_000019_leftImg8bit.png gtFine/val/munster/munster_000077_000019_gtFine_labelTrainIds.png
138 | leftImg8bit/val/munster/munster_000078_000019_leftImg8bit.png gtFine/val/munster/munster_000078_000019_gtFine_labelTrainIds.png
139 | leftImg8bit/val/munster/munster_000079_000019_leftImg8bit.png gtFine/val/munster/munster_000079_000019_gtFine_labelTrainIds.png
140 | leftImg8bit/val/munster/munster_000080_000019_leftImg8bit.png gtFine/val/munster/munster_000080_000019_gtFine_labelTrainIds.png
141 | leftImg8bit/val/munster/munster_000081_000019_leftImg8bit.png gtFine/val/munster/munster_000081_000019_gtFine_labelTrainIds.png
142 | leftImg8bit/val/munster/munster_000082_000019_leftImg8bit.png gtFine/val/munster/munster_000082_000019_gtFine_labelTrainIds.png
143 | leftImg8bit/val/munster/munster_000083_000019_leftImg8bit.png gtFine/val/munster/munster_000083_000019_gtFine_labelTrainIds.png
144 | leftImg8bit/val/munster/munster_000084_000019_leftImg8bit.png gtFine/val/munster/munster_000084_000019_gtFine_labelTrainIds.png
145 | leftImg8bit/val/munster/munster_000085_000019_leftImg8bit.png gtFine/val/munster/munster_000085_000019_gtFine_labelTrainIds.png
146 | leftImg8bit/val/munster/munster_000086_000019_leftImg8bit.png gtFine/val/munster/munster_000086_000019_gtFine_labelTrainIds.png
147 | leftImg8bit/val/munster/munster_000087_000019_leftImg8bit.png gtFine/val/munster/munster_000087_000019_gtFine_labelTrainIds.png
148 | leftImg8bit/val/munster/munster_000088_000019_leftImg8bit.png gtFine/val/munster/munster_000088_000019_gtFine_labelTrainIds.png
149 | leftImg8bit/val/munster/munster_000089_000019_leftImg8bit.png gtFine/val/munster/munster_000089_000019_gtFine_labelTrainIds.png
150 | leftImg8bit/val/munster/munster_000090_000019_leftImg8bit.png gtFine/val/munster/munster_000090_000019_gtFine_labelTrainIds.png
151 | leftImg8bit/val/munster/munster_000091_000019_leftImg8bit.png gtFine/val/munster/munster_000091_000019_gtFine_labelTrainIds.png
152 | leftImg8bit/val/munster/munster_000092_000019_leftImg8bit.png gtFine/val/munster/munster_000092_000019_gtFine_labelTrainIds.png
153 | leftImg8bit/val/munster/munster_000093_000019_leftImg8bit.png gtFine/val/munster/munster_000093_000019_gtFine_labelTrainIds.png
154 | leftImg8bit/val/munster/munster_000094_000019_leftImg8bit.png gtFine/val/munster/munster_000094_000019_gtFine_labelTrainIds.png
155 | leftImg8bit/val/munster/munster_000095_000019_leftImg8bit.png gtFine/val/munster/munster_000095_000019_gtFine_labelTrainIds.png
156 | leftImg8bit/val/munster/munster_000096_000019_leftImg8bit.png gtFine/val/munster/munster_000096_000019_gtFine_labelTrainIds.png
157 | leftImg8bit/val/munster/munster_000097_000019_leftImg8bit.png gtFine/val/munster/munster_000097_000019_gtFine_labelTrainIds.png
158 | leftImg8bit/val/munster/munster_000098_000019_leftImg8bit.png gtFine/val/munster/munster_000098_000019_gtFine_labelTrainIds.png
159 | leftImg8bit/val/munster/munster_000099_000019_leftImg8bit.png gtFine/val/munster/munster_000099_000019_gtFine_labelTrainIds.png
160 | leftImg8bit/val/munster/munster_000100_000019_leftImg8bit.png gtFine/val/munster/munster_000100_000019_gtFine_labelTrainIds.png
161 | leftImg8bit/val/munster/munster_000101_000019_leftImg8bit.png gtFine/val/munster/munster_000101_000019_gtFine_labelTrainIds.png
162 | leftImg8bit/val/munster/munster_000102_000019_leftImg8bit.png gtFine/val/munster/munster_000102_000019_gtFine_labelTrainIds.png
163 | leftImg8bit/val/munster/munster_000103_000019_leftImg8bit.png gtFine/val/munster/munster_000103_000019_gtFine_labelTrainIds.png
164 | leftImg8bit/val/munster/munster_000104_000019_leftImg8bit.png gtFine/val/munster/munster_000104_000019_gtFine_labelTrainIds.png
165 | leftImg8bit/val/munster/munster_000105_000019_leftImg8bit.png gtFine/val/munster/munster_000105_000019_gtFine_labelTrainIds.png
166 | leftImg8bit/val/munster/munster_000106_000019_leftImg8bit.png gtFine/val/munster/munster_000106_000019_gtFine_labelTrainIds.png
167 | leftImg8bit/val/munster/munster_000107_000019_leftImg8bit.png gtFine/val/munster/munster_000107_000019_gtFine_labelTrainIds.png
168 | leftImg8bit/val/munster/munster_000108_000019_leftImg8bit.png gtFine/val/munster/munster_000108_000019_gtFine_labelTrainIds.png
169 | leftImg8bit/val/munster/munster_000109_000019_leftImg8bit.png gtFine/val/munster/munster_000109_000019_gtFine_labelTrainIds.png
170 | leftImg8bit/val/munster/munster_000110_000019_leftImg8bit.png gtFine/val/munster/munster_000110_000019_gtFine_labelTrainIds.png
171 | leftImg8bit/val/munster/munster_000111_000019_leftImg8bit.png gtFine/val/munster/munster_000111_000019_gtFine_labelTrainIds.png
172 | leftImg8bit/val/munster/munster_000112_000019_leftImg8bit.png gtFine/val/munster/munster_000112_000019_gtFine_labelTrainIds.png
173 | leftImg8bit/val/munster/munster_000113_000019_leftImg8bit.png gtFine/val/munster/munster_000113_000019_gtFine_labelTrainIds.png
174 | leftImg8bit/val/munster/munster_000114_000019_leftImg8bit.png gtFine/val/munster/munster_000114_000019_gtFine_labelTrainIds.png
175 | leftImg8bit/val/munster/munster_000115_000019_leftImg8bit.png gtFine/val/munster/munster_000115_000019_gtFine_labelTrainIds.png
176 | leftImg8bit/val/munster/munster_000116_000019_leftImg8bit.png gtFine/val/munster/munster_000116_000019_gtFine_labelTrainIds.png
177 | leftImg8bit/val/munster/munster_000117_000019_leftImg8bit.png gtFine/val/munster/munster_000117_000019_gtFine_labelTrainIds.png
178 | leftImg8bit/val/munster/munster_000118_000019_leftImg8bit.png gtFine/val/munster/munster_000118_000019_gtFine_labelTrainIds.png
179 | leftImg8bit/val/munster/munster_000119_000019_leftImg8bit.png gtFine/val/munster/munster_000119_000019_gtFine_labelTrainIds.png
180 | leftImg8bit/val/munster/munster_000120_000019_leftImg8bit.png gtFine/val/munster/munster_000120_000019_gtFine_labelTrainIds.png
181 | leftImg8bit/val/munster/munster_000121_000019_leftImg8bit.png gtFine/val/munster/munster_000121_000019_gtFine_labelTrainIds.png
182 | leftImg8bit/val/munster/munster_000122_000019_leftImg8bit.png gtFine/val/munster/munster_000122_000019_gtFine_labelTrainIds.png
183 | leftImg8bit/val/munster/munster_000123_000019_leftImg8bit.png gtFine/val/munster/munster_000123_000019_gtFine_labelTrainIds.png
184 | leftImg8bit/val/munster/munster_000124_000019_leftImg8bit.png gtFine/val/munster/munster_000124_000019_gtFine_labelTrainIds.png
185 | leftImg8bit/val/munster/munster_000125_000019_leftImg8bit.png gtFine/val/munster/munster_000125_000019_gtFine_labelTrainIds.png
186 | leftImg8bit/val/munster/munster_000126_000019_leftImg8bit.png gtFine/val/munster/munster_000126_000019_gtFine_labelTrainIds.png
187 | leftImg8bit/val/munster/munster_000127_000019_leftImg8bit.png gtFine/val/munster/munster_000127_000019_gtFine_labelTrainIds.png
188 | leftImg8bit/val/munster/munster_000128_000019_leftImg8bit.png gtFine/val/munster/munster_000128_000019_gtFine_labelTrainIds.png
189 | leftImg8bit/val/munster/munster_000129_000019_leftImg8bit.png gtFine/val/munster/munster_000129_000019_gtFine_labelTrainIds.png
190 | leftImg8bit/val/munster/munster_000130_000019_leftImg8bit.png gtFine/val/munster/munster_000130_000019_gtFine_labelTrainIds.png
191 | leftImg8bit/val/munster/munster_000131_000019_leftImg8bit.png gtFine/val/munster/munster_000131_000019_gtFine_labelTrainIds.png
192 | leftImg8bit/val/munster/munster_000132_000019_leftImg8bit.png gtFine/val/munster/munster_000132_000019_gtFine_labelTrainIds.png
193 | leftImg8bit/val/munster/munster_000133_000019_leftImg8bit.png gtFine/val/munster/munster_000133_000019_gtFine_labelTrainIds.png
194 | leftImg8bit/val/munster/munster_000134_000019_leftImg8bit.png gtFine/val/munster/munster_000134_000019_gtFine_labelTrainIds.png
195 | leftImg8bit/val/munster/munster_000135_000019_leftImg8bit.png gtFine/val/munster/munster_000135_000019_gtFine_labelTrainIds.png
196 | leftImg8bit/val/munster/munster_000136_000019_leftImg8bit.png gtFine/val/munster/munster_000136_000019_gtFine_labelTrainIds.png
197 | leftImg8bit/val/munster/munster_000137_000019_leftImg8bit.png gtFine/val/munster/munster_000137_000019_gtFine_labelTrainIds.png
198 | leftImg8bit/val/munster/munster_000138_000019_leftImg8bit.png gtFine/val/munster/munster_000138_000019_gtFine_labelTrainIds.png
199 | leftImg8bit/val/munster/munster_000139_000019_leftImg8bit.png gtFine/val/munster/munster_000139_000019_gtFine_labelTrainIds.png
200 | leftImg8bit/val/munster/munster_000140_000019_leftImg8bit.png gtFine/val/munster/munster_000140_000019_gtFine_labelTrainIds.png
201 | leftImg8bit/val/munster/munster_000141_000019_leftImg8bit.png gtFine/val/munster/munster_000141_000019_gtFine_labelTrainIds.png
202 | leftImg8bit/val/munster/munster_000142_000019_leftImg8bit.png gtFine/val/munster/munster_000142_000019_gtFine_labelTrainIds.png
203 | leftImg8bit/val/munster/munster_000143_000019_leftImg8bit.png gtFine/val/munster/munster_000143_000019_gtFine_labelTrainIds.png
204 | leftImg8bit/val/munster/munster_000144_000019_leftImg8bit.png gtFine/val/munster/munster_000144_000019_gtFine_labelTrainIds.png
205 | leftImg8bit/val/munster/munster_000145_000019_leftImg8bit.png gtFine/val/munster/munster_000145_000019_gtFine_labelTrainIds.png
206 | leftImg8bit/val/munster/munster_000146_000019_leftImg8bit.png gtFine/val/munster/munster_000146_000019_gtFine_labelTrainIds.png
207 | leftImg8bit/val/munster/munster_000147_000019_leftImg8bit.png gtFine/val/munster/munster_000147_000019_gtFine_labelTrainIds.png
208 | leftImg8bit/val/munster/munster_000148_000019_leftImg8bit.png gtFine/val/munster/munster_000148_000019_gtFine_labelTrainIds.png
209 | leftImg8bit/val/munster/munster_000149_000019_leftImg8bit.png gtFine/val/munster/munster_000149_000019_gtFine_labelTrainIds.png
210 | leftImg8bit/val/munster/munster_000150_000019_leftImg8bit.png gtFine/val/munster/munster_000150_000019_gtFine_labelTrainIds.png
211 | leftImg8bit/val/munster/munster_000151_000019_leftImg8bit.png gtFine/val/munster/munster_000151_000019_gtFine_labelTrainIds.png
212 | leftImg8bit/val/munster/munster_000152_000019_leftImg8bit.png gtFine/val/munster/munster_000152_000019_gtFine_labelTrainIds.png
213 | leftImg8bit/val/munster/munster_000153_000019_leftImg8bit.png gtFine/val/munster/munster_000153_000019_gtFine_labelTrainIds.png
214 | leftImg8bit/val/munster/munster_000154_000019_leftImg8bit.png gtFine/val/munster/munster_000154_000019_gtFine_labelTrainIds.png
215 | leftImg8bit/val/munster/munster_000155_000019_leftImg8bit.png gtFine/val/munster/munster_000155_000019_gtFine_labelTrainIds.png
216 | leftImg8bit/val/munster/munster_000156_000019_leftImg8bit.png gtFine/val/munster/munster_000156_000019_gtFine_labelTrainIds.png
217 | leftImg8bit/val/munster/munster_000157_000019_leftImg8bit.png gtFine/val/munster/munster_000157_000019_gtFine_labelTrainIds.png
218 | leftImg8bit/val/munster/munster_000158_000019_leftImg8bit.png gtFine/val/munster/munster_000158_000019_gtFine_labelTrainIds.png
219 | leftImg8bit/val/munster/munster_000159_000019_leftImg8bit.png gtFine/val/munster/munster_000159_000019_gtFine_labelTrainIds.png
220 | leftImg8bit/val/munster/munster_000160_000019_leftImg8bit.png gtFine/val/munster/munster_000160_000019_gtFine_labelTrainIds.png
221 | leftImg8bit/val/munster/munster_000161_000019_leftImg8bit.png gtFine/val/munster/munster_000161_000019_gtFine_labelTrainIds.png
222 | leftImg8bit/val/munster/munster_000162_000019_leftImg8bit.png gtFine/val/munster/munster_000162_000019_gtFine_labelTrainIds.png
223 | leftImg8bit/val/munster/munster_000163_000019_leftImg8bit.png gtFine/val/munster/munster_000163_000019_gtFine_labelTrainIds.png
224 | leftImg8bit/val/munster/munster_000164_000019_leftImg8bit.png gtFine/val/munster/munster_000164_000019_gtFine_labelTrainIds.png
225 | leftImg8bit/val/munster/munster_000165_000019_leftImg8bit.png gtFine/val/munster/munster_000165_000019_gtFine_labelTrainIds.png
226 | leftImg8bit/val/munster/munster_000166_000019_leftImg8bit.png gtFine/val/munster/munster_000166_000019_gtFine_labelTrainIds.png
227 | leftImg8bit/val/munster/munster_000167_000019_leftImg8bit.png gtFine/val/munster/munster_000167_000019_gtFine_labelTrainIds.png
228 | leftImg8bit/val/munster/munster_000168_000019_leftImg8bit.png gtFine/val/munster/munster_000168_000019_gtFine_labelTrainIds.png
229 | leftImg8bit/val/munster/munster_000169_000019_leftImg8bit.png gtFine/val/munster/munster_000169_000019_gtFine_labelTrainIds.png
230 | leftImg8bit/val/munster/munster_000170_000019_leftImg8bit.png gtFine/val/munster/munster_000170_000019_gtFine_labelTrainIds.png
231 | leftImg8bit/val/munster/munster_000171_000019_leftImg8bit.png gtFine/val/munster/munster_000171_000019_gtFine_labelTrainIds.png
232 | leftImg8bit/val/munster/munster_000172_000019_leftImg8bit.png gtFine/val/munster/munster_000172_000019_gtFine_labelTrainIds.png
233 | leftImg8bit/val/munster/munster_000173_000019_leftImg8bit.png gtFine/val/munster/munster_000173_000019_gtFine_labelTrainIds.png
234 | leftImg8bit/val/frankfurt/frankfurt_000000_000294_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_000294_gtFine_labelTrainIds.png
235 | leftImg8bit/val/frankfurt/frankfurt_000000_000576_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_000576_gtFine_labelTrainIds.png
236 | leftImg8bit/val/frankfurt/frankfurt_000000_001016_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_001016_gtFine_labelTrainIds.png
237 | leftImg8bit/val/frankfurt/frankfurt_000000_001236_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_001236_gtFine_labelTrainIds.png
238 | leftImg8bit/val/frankfurt/frankfurt_000000_001751_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_001751_gtFine_labelTrainIds.png
239 | leftImg8bit/val/frankfurt/frankfurt_000000_002196_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_002196_gtFine_labelTrainIds.png
240 | leftImg8bit/val/frankfurt/frankfurt_000000_002963_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_002963_gtFine_labelTrainIds.png
241 | leftImg8bit/val/frankfurt/frankfurt_000000_003025_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_003025_gtFine_labelTrainIds.png
242 | leftImg8bit/val/frankfurt/frankfurt_000000_003357_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_003357_gtFine_labelTrainIds.png
243 | leftImg8bit/val/frankfurt/frankfurt_000000_003920_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_003920_gtFine_labelTrainIds.png
244 | leftImg8bit/val/frankfurt/frankfurt_000000_004617_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_004617_gtFine_labelTrainIds.png
245 | leftImg8bit/val/frankfurt/frankfurt_000000_005543_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_005543_gtFine_labelTrainIds.png
246 | leftImg8bit/val/frankfurt/frankfurt_000000_005898_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_005898_gtFine_labelTrainIds.png
247 | leftImg8bit/val/frankfurt/frankfurt_000000_006589_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_006589_gtFine_labelTrainIds.png
248 | leftImg8bit/val/frankfurt/frankfurt_000000_007365_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_007365_gtFine_labelTrainIds.png
249 | leftImg8bit/val/frankfurt/frankfurt_000000_008206_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_008206_gtFine_labelTrainIds.png
250 | leftImg8bit/val/frankfurt/frankfurt_000000_008451_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_008451_gtFine_labelTrainIds.png
251 | leftImg8bit/val/frankfurt/frankfurt_000000_009291_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_009291_gtFine_labelTrainIds.png
252 | leftImg8bit/val/frankfurt/frankfurt_000000_009561_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_009561_gtFine_labelTrainIds.png
253 | leftImg8bit/val/frankfurt/frankfurt_000000_009688_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_009688_gtFine_labelTrainIds.png
254 | leftImg8bit/val/frankfurt/frankfurt_000000_009969_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_009969_gtFine_labelTrainIds.png
255 | leftImg8bit/val/frankfurt/frankfurt_000000_010351_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_010351_gtFine_labelTrainIds.png
256 | leftImg8bit/val/frankfurt/frankfurt_000000_010763_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_010763_gtFine_labelTrainIds.png
257 | leftImg8bit/val/frankfurt/frankfurt_000000_011007_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_011007_gtFine_labelTrainIds.png
258 | leftImg8bit/val/frankfurt/frankfurt_000000_011074_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_011074_gtFine_labelTrainIds.png
259 | leftImg8bit/val/frankfurt/frankfurt_000000_011461_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_011461_gtFine_labelTrainIds.png
260 | leftImg8bit/val/frankfurt/frankfurt_000000_011810_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_011810_gtFine_labelTrainIds.png
261 | leftImg8bit/val/frankfurt/frankfurt_000000_012009_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_012009_gtFine_labelTrainIds.png
262 | leftImg8bit/val/frankfurt/frankfurt_000000_012121_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_012121_gtFine_labelTrainIds.png
263 | leftImg8bit/val/frankfurt/frankfurt_000000_012868_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_012868_gtFine_labelTrainIds.png
264 | leftImg8bit/val/frankfurt/frankfurt_000000_013067_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_013067_gtFine_labelTrainIds.png
265 | leftImg8bit/val/frankfurt/frankfurt_000000_013240_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_013240_gtFine_labelTrainIds.png
266 | leftImg8bit/val/frankfurt/frankfurt_000000_013382_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_013382_gtFine_labelTrainIds.png
267 | leftImg8bit/val/frankfurt/frankfurt_000000_013942_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_013942_gtFine_labelTrainIds.png
268 | leftImg8bit/val/frankfurt/frankfurt_000000_014480_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_014480_gtFine_labelTrainIds.png
269 | leftImg8bit/val/frankfurt/frankfurt_000000_015389_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_015389_gtFine_labelTrainIds.png
270 | leftImg8bit/val/frankfurt/frankfurt_000000_015676_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_015676_gtFine_labelTrainIds.png
271 | leftImg8bit/val/frankfurt/frankfurt_000000_016005_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_016005_gtFine_labelTrainIds.png
272 | leftImg8bit/val/frankfurt/frankfurt_000000_016286_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_016286_gtFine_labelTrainIds.png
273 | leftImg8bit/val/frankfurt/frankfurt_000000_017228_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_017228_gtFine_labelTrainIds.png
274 | leftImg8bit/val/frankfurt/frankfurt_000000_017476_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_017476_gtFine_labelTrainIds.png
275 | leftImg8bit/val/frankfurt/frankfurt_000000_018797_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_018797_gtFine_labelTrainIds.png
276 | leftImg8bit/val/frankfurt/frankfurt_000000_019607_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_019607_gtFine_labelTrainIds.png
277 | leftImg8bit/val/frankfurt/frankfurt_000000_020215_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_020215_gtFine_labelTrainIds.png
278 | leftImg8bit/val/frankfurt/frankfurt_000000_020321_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_020321_gtFine_labelTrainIds.png
279 | leftImg8bit/val/frankfurt/frankfurt_000000_020880_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_020880_gtFine_labelTrainIds.png
280 | leftImg8bit/val/frankfurt/frankfurt_000000_021667_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_021667_gtFine_labelTrainIds.png
281 | leftImg8bit/val/frankfurt/frankfurt_000000_021879_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_021879_gtFine_labelTrainIds.png
282 | leftImg8bit/val/frankfurt/frankfurt_000000_022254_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_022254_gtFine_labelTrainIds.png
283 | leftImg8bit/val/frankfurt/frankfurt_000000_022797_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000000_022797_gtFine_labelTrainIds.png
284 | leftImg8bit/val/frankfurt/frankfurt_000001_000538_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_000538_gtFine_labelTrainIds.png
285 | leftImg8bit/val/frankfurt/frankfurt_000001_001464_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_001464_gtFine_labelTrainIds.png
286 | leftImg8bit/val/frankfurt/frankfurt_000001_002512_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_002512_gtFine_labelTrainIds.png
287 | leftImg8bit/val/frankfurt/frankfurt_000001_002646_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_002646_gtFine_labelTrainIds.png
288 | leftImg8bit/val/frankfurt/frankfurt_000001_002759_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_002759_gtFine_labelTrainIds.png
289 | leftImg8bit/val/frankfurt/frankfurt_000001_003056_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_003056_gtFine_labelTrainIds.png
290 | leftImg8bit/val/frankfurt/frankfurt_000001_003588_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_003588_gtFine_labelTrainIds.png
291 | leftImg8bit/val/frankfurt/frankfurt_000001_004327_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_004327_gtFine_labelTrainIds.png
292 | leftImg8bit/val/frankfurt/frankfurt_000001_004736_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_004736_gtFine_labelTrainIds.png
293 | leftImg8bit/val/frankfurt/frankfurt_000001_004859_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_004859_gtFine_labelTrainIds.png
294 | leftImg8bit/val/frankfurt/frankfurt_000001_005184_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_005184_gtFine_labelTrainIds.png
295 | leftImg8bit/val/frankfurt/frankfurt_000001_005410_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_005410_gtFine_labelTrainIds.png
296 | leftImg8bit/val/frankfurt/frankfurt_000001_005703_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_005703_gtFine_labelTrainIds.png
297 | leftImg8bit/val/frankfurt/frankfurt_000001_005898_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_005898_gtFine_labelTrainIds.png
298 | leftImg8bit/val/frankfurt/frankfurt_000001_007285_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_007285_gtFine_labelTrainIds.png
299 | leftImg8bit/val/frankfurt/frankfurt_000001_007407_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_007407_gtFine_labelTrainIds.png
300 | leftImg8bit/val/frankfurt/frankfurt_000001_007622_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_007622_gtFine_labelTrainIds.png
301 | leftImg8bit/val/frankfurt/frankfurt_000001_007857_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_007857_gtFine_labelTrainIds.png
302 | leftImg8bit/val/frankfurt/frankfurt_000001_007973_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_007973_gtFine_labelTrainIds.png
303 | leftImg8bit/val/frankfurt/frankfurt_000001_008200_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_008200_gtFine_labelTrainIds.png
304 | leftImg8bit/val/frankfurt/frankfurt_000001_008688_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_008688_gtFine_labelTrainIds.png
305 | leftImg8bit/val/frankfurt/frankfurt_000001_009058_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_009058_gtFine_labelTrainIds.png
306 | leftImg8bit/val/frankfurt/frankfurt_000001_009504_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_009504_gtFine_labelTrainIds.png
307 | leftImg8bit/val/frankfurt/frankfurt_000001_009854_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_009854_gtFine_labelTrainIds.png
308 | leftImg8bit/val/frankfurt/frankfurt_000001_010156_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_010156_gtFine_labelTrainIds.png
309 | leftImg8bit/val/frankfurt/frankfurt_000001_010444_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_010444_gtFine_labelTrainIds.png
310 | leftImg8bit/val/frankfurt/frankfurt_000001_010600_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_010600_gtFine_labelTrainIds.png
311 | leftImg8bit/val/frankfurt/frankfurt_000001_010830_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_010830_gtFine_labelTrainIds.png
312 | leftImg8bit/val/frankfurt/frankfurt_000001_011162_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_011162_gtFine_labelTrainIds.png
313 | leftImg8bit/val/frankfurt/frankfurt_000001_011715_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_011715_gtFine_labelTrainIds.png
314 | leftImg8bit/val/frankfurt/frankfurt_000001_011835_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_011835_gtFine_labelTrainIds.png
315 | leftImg8bit/val/frankfurt/frankfurt_000001_012038_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_012038_gtFine_labelTrainIds.png
316 | leftImg8bit/val/frankfurt/frankfurt_000001_012519_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_012519_gtFine_labelTrainIds.png
317 | leftImg8bit/val/frankfurt/frankfurt_000001_012699_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_012699_gtFine_labelTrainIds.png
318 | leftImg8bit/val/frankfurt/frankfurt_000001_012738_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_012738_gtFine_labelTrainIds.png
319 | leftImg8bit/val/frankfurt/frankfurt_000001_012870_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_012870_gtFine_labelTrainIds.png
320 | leftImg8bit/val/frankfurt/frankfurt_000001_013016_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_013016_gtFine_labelTrainIds.png
321 | leftImg8bit/val/frankfurt/frankfurt_000001_013496_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_013496_gtFine_labelTrainIds.png
322 | leftImg8bit/val/frankfurt/frankfurt_000001_013710_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_013710_gtFine_labelTrainIds.png
323 | leftImg8bit/val/frankfurt/frankfurt_000001_014221_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_014221_gtFine_labelTrainIds.png
324 | leftImg8bit/val/frankfurt/frankfurt_000001_014406_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_014406_gtFine_labelTrainIds.png
325 | leftImg8bit/val/frankfurt/frankfurt_000001_014565_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_014565_gtFine_labelTrainIds.png
326 | leftImg8bit/val/frankfurt/frankfurt_000001_014741_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_014741_gtFine_labelTrainIds.png
327 | leftImg8bit/val/frankfurt/frankfurt_000001_015091_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_015091_gtFine_labelTrainIds.png
328 | leftImg8bit/val/frankfurt/frankfurt_000001_015328_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_015328_gtFine_labelTrainIds.png
329 | leftImg8bit/val/frankfurt/frankfurt_000001_015768_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_015768_gtFine_labelTrainIds.png
330 | leftImg8bit/val/frankfurt/frankfurt_000001_016029_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_016029_gtFine_labelTrainIds.png
331 | leftImg8bit/val/frankfurt/frankfurt_000001_016273_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_016273_gtFine_labelTrainIds.png
332 | leftImg8bit/val/frankfurt/frankfurt_000001_016462_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_016462_gtFine_labelTrainIds.png
333 | leftImg8bit/val/frankfurt/frankfurt_000001_017101_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_017101_gtFine_labelTrainIds.png
334 | leftImg8bit/val/frankfurt/frankfurt_000001_017459_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_017459_gtFine_labelTrainIds.png
335 | leftImg8bit/val/frankfurt/frankfurt_000001_017842_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_017842_gtFine_labelTrainIds.png
336 | leftImg8bit/val/frankfurt/frankfurt_000001_018113_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_018113_gtFine_labelTrainIds.png
337 | leftImg8bit/val/frankfurt/frankfurt_000001_019698_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_019698_gtFine_labelTrainIds.png
338 | leftImg8bit/val/frankfurt/frankfurt_000001_019854_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_019854_gtFine_labelTrainIds.png
339 | leftImg8bit/val/frankfurt/frankfurt_000001_019969_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_019969_gtFine_labelTrainIds.png
340 | leftImg8bit/val/frankfurt/frankfurt_000001_020046_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_020046_gtFine_labelTrainIds.png
341 | leftImg8bit/val/frankfurt/frankfurt_000001_020287_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_020287_gtFine_labelTrainIds.png
342 | leftImg8bit/val/frankfurt/frankfurt_000001_020693_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_020693_gtFine_labelTrainIds.png
343 | leftImg8bit/val/frankfurt/frankfurt_000001_021406_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_021406_gtFine_labelTrainIds.png
344 | leftImg8bit/val/frankfurt/frankfurt_000001_021825_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_021825_gtFine_labelTrainIds.png
345 | leftImg8bit/val/frankfurt/frankfurt_000001_023235_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_023235_gtFine_labelTrainIds.png
346 | leftImg8bit/val/frankfurt/frankfurt_000001_023369_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_023369_gtFine_labelTrainIds.png
347 | leftImg8bit/val/frankfurt/frankfurt_000001_023769_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_023769_gtFine_labelTrainIds.png
348 | leftImg8bit/val/frankfurt/frankfurt_000001_024927_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_024927_gtFine_labelTrainIds.png
349 | leftImg8bit/val/frankfurt/frankfurt_000001_025512_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_025512_gtFine_labelTrainIds.png
350 | leftImg8bit/val/frankfurt/frankfurt_000001_025713_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_025713_gtFine_labelTrainIds.png
351 | leftImg8bit/val/frankfurt/frankfurt_000001_025921_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_025921_gtFine_labelTrainIds.png
352 | leftImg8bit/val/frankfurt/frankfurt_000001_027325_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_027325_gtFine_labelTrainIds.png
353 | leftImg8bit/val/frankfurt/frankfurt_000001_028232_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_028232_gtFine_labelTrainIds.png
354 | leftImg8bit/val/frankfurt/frankfurt_000001_028335_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_028335_gtFine_labelTrainIds.png
355 | leftImg8bit/val/frankfurt/frankfurt_000001_028590_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_028590_gtFine_labelTrainIds.png
356 | leftImg8bit/val/frankfurt/frankfurt_000001_028854_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_028854_gtFine_labelTrainIds.png
357 | leftImg8bit/val/frankfurt/frankfurt_000001_029086_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_029086_gtFine_labelTrainIds.png
358 | leftImg8bit/val/frankfurt/frankfurt_000001_029236_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_029236_gtFine_labelTrainIds.png
359 | leftImg8bit/val/frankfurt/frankfurt_000001_029600_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_029600_gtFine_labelTrainIds.png
360 | leftImg8bit/val/frankfurt/frankfurt_000001_030067_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_030067_gtFine_labelTrainIds.png
361 | leftImg8bit/val/frankfurt/frankfurt_000001_030310_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_030310_gtFine_labelTrainIds.png
362 | leftImg8bit/val/frankfurt/frankfurt_000001_030669_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_030669_gtFine_labelTrainIds.png
363 | leftImg8bit/val/frankfurt/frankfurt_000001_031266_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_031266_gtFine_labelTrainIds.png
364 | leftImg8bit/val/frankfurt/frankfurt_000001_031416_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_031416_gtFine_labelTrainIds.png
365 | leftImg8bit/val/frankfurt/frankfurt_000001_032018_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_032018_gtFine_labelTrainIds.png
366 | leftImg8bit/val/frankfurt/frankfurt_000001_032556_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_032556_gtFine_labelTrainIds.png
367 | leftImg8bit/val/frankfurt/frankfurt_000001_032711_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_032711_gtFine_labelTrainIds.png
368 | leftImg8bit/val/frankfurt/frankfurt_000001_032942_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_032942_gtFine_labelTrainIds.png
369 | leftImg8bit/val/frankfurt/frankfurt_000001_033655_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_033655_gtFine_labelTrainIds.png
370 | leftImg8bit/val/frankfurt/frankfurt_000001_034047_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_034047_gtFine_labelTrainIds.png
371 | leftImg8bit/val/frankfurt/frankfurt_000001_034816_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_034816_gtFine_labelTrainIds.png
372 | leftImg8bit/val/frankfurt/frankfurt_000001_035144_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_035144_gtFine_labelTrainIds.png
373 | leftImg8bit/val/frankfurt/frankfurt_000001_035864_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_035864_gtFine_labelTrainIds.png
374 | leftImg8bit/val/frankfurt/frankfurt_000001_037705_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_037705_gtFine_labelTrainIds.png
375 | leftImg8bit/val/frankfurt/frankfurt_000001_038245_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_038245_gtFine_labelTrainIds.png
376 | leftImg8bit/val/frankfurt/frankfurt_000001_038418_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_038418_gtFine_labelTrainIds.png
377 | leftImg8bit/val/frankfurt/frankfurt_000001_038645_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_038645_gtFine_labelTrainIds.png
378 | leftImg8bit/val/frankfurt/frankfurt_000001_038844_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_038844_gtFine_labelTrainIds.png
379 | leftImg8bit/val/frankfurt/frankfurt_000001_039895_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_039895_gtFine_labelTrainIds.png
380 | leftImg8bit/val/frankfurt/frankfurt_000001_040575_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_040575_gtFine_labelTrainIds.png
381 | leftImg8bit/val/frankfurt/frankfurt_000001_040732_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_040732_gtFine_labelTrainIds.png
382 | leftImg8bit/val/frankfurt/frankfurt_000001_041074_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_041074_gtFine_labelTrainIds.png
383 | leftImg8bit/val/frankfurt/frankfurt_000001_041354_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_041354_gtFine_labelTrainIds.png
384 | leftImg8bit/val/frankfurt/frankfurt_000001_041517_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_041517_gtFine_labelTrainIds.png
385 | leftImg8bit/val/frankfurt/frankfurt_000001_041664_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_041664_gtFine_labelTrainIds.png
386 | leftImg8bit/val/frankfurt/frankfurt_000001_042098_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_042098_gtFine_labelTrainIds.png
387 | leftImg8bit/val/frankfurt/frankfurt_000001_042384_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_042384_gtFine_labelTrainIds.png
388 | leftImg8bit/val/frankfurt/frankfurt_000001_042733_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_042733_gtFine_labelTrainIds.png
389 | leftImg8bit/val/frankfurt/frankfurt_000001_043395_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_043395_gtFine_labelTrainIds.png
390 | leftImg8bit/val/frankfurt/frankfurt_000001_043564_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_043564_gtFine_labelTrainIds.png
391 | leftImg8bit/val/frankfurt/frankfurt_000001_044227_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_044227_gtFine_labelTrainIds.png
392 | leftImg8bit/val/frankfurt/frankfurt_000001_044413_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_044413_gtFine_labelTrainIds.png
393 | leftImg8bit/val/frankfurt/frankfurt_000001_044525_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_044525_gtFine_labelTrainIds.png
394 | leftImg8bit/val/frankfurt/frankfurt_000001_044658_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_044658_gtFine_labelTrainIds.png
395 | leftImg8bit/val/frankfurt/frankfurt_000001_044787_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_044787_gtFine_labelTrainIds.png
396 | leftImg8bit/val/frankfurt/frankfurt_000001_046126_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_046126_gtFine_labelTrainIds.png
397 | leftImg8bit/val/frankfurt/frankfurt_000001_046272_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_046272_gtFine_labelTrainIds.png
398 | leftImg8bit/val/frankfurt/frankfurt_000001_046504_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_046504_gtFine_labelTrainIds.png
399 | leftImg8bit/val/frankfurt/frankfurt_000001_046779_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_046779_gtFine_labelTrainIds.png
400 | leftImg8bit/val/frankfurt/frankfurt_000001_047178_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_047178_gtFine_labelTrainIds.png
401 | leftImg8bit/val/frankfurt/frankfurt_000001_047552_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_047552_gtFine_labelTrainIds.png
402 | leftImg8bit/val/frankfurt/frankfurt_000001_048196_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_048196_gtFine_labelTrainIds.png
403 | leftImg8bit/val/frankfurt/frankfurt_000001_048355_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_048355_gtFine_labelTrainIds.png
404 | leftImg8bit/val/frankfurt/frankfurt_000001_048654_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_048654_gtFine_labelTrainIds.png
405 | leftImg8bit/val/frankfurt/frankfurt_000001_049078_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_049078_gtFine_labelTrainIds.png
406 | leftImg8bit/val/frankfurt/frankfurt_000001_049209_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_049209_gtFine_labelTrainIds.png
407 | leftImg8bit/val/frankfurt/frankfurt_000001_049298_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_049298_gtFine_labelTrainIds.png
408 | leftImg8bit/val/frankfurt/frankfurt_000001_049698_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_049698_gtFine_labelTrainIds.png
409 | leftImg8bit/val/frankfurt/frankfurt_000001_049770_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_049770_gtFine_labelTrainIds.png
410 | leftImg8bit/val/frankfurt/frankfurt_000001_050149_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_050149_gtFine_labelTrainIds.png
411 | leftImg8bit/val/frankfurt/frankfurt_000001_050686_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_050686_gtFine_labelTrainIds.png
412 | leftImg8bit/val/frankfurt/frankfurt_000001_051516_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_051516_gtFine_labelTrainIds.png
413 | leftImg8bit/val/frankfurt/frankfurt_000001_051737_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_051737_gtFine_labelTrainIds.png
414 | leftImg8bit/val/frankfurt/frankfurt_000001_051807_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_051807_gtFine_labelTrainIds.png
415 | leftImg8bit/val/frankfurt/frankfurt_000001_052120_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_052120_gtFine_labelTrainIds.png
416 | leftImg8bit/val/frankfurt/frankfurt_000001_052594_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_052594_gtFine_labelTrainIds.png
417 | leftImg8bit/val/frankfurt/frankfurt_000001_053102_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_053102_gtFine_labelTrainIds.png
418 | leftImg8bit/val/frankfurt/frankfurt_000001_054077_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_054077_gtFine_labelTrainIds.png
419 | leftImg8bit/val/frankfurt/frankfurt_000001_054219_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_054219_gtFine_labelTrainIds.png
420 | leftImg8bit/val/frankfurt/frankfurt_000001_054415_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_054415_gtFine_labelTrainIds.png
421 | leftImg8bit/val/frankfurt/frankfurt_000001_054640_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_054640_gtFine_labelTrainIds.png
422 | leftImg8bit/val/frankfurt/frankfurt_000001_054884_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_054884_gtFine_labelTrainIds.png
423 | leftImg8bit/val/frankfurt/frankfurt_000001_055062_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_055062_gtFine_labelTrainIds.png
424 | leftImg8bit/val/frankfurt/frankfurt_000001_055172_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_055172_gtFine_labelTrainIds.png
425 | leftImg8bit/val/frankfurt/frankfurt_000001_055306_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_055306_gtFine_labelTrainIds.png
426 | leftImg8bit/val/frankfurt/frankfurt_000001_055387_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_055387_gtFine_labelTrainIds.png
427 | leftImg8bit/val/frankfurt/frankfurt_000001_055538_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_055538_gtFine_labelTrainIds.png
428 | leftImg8bit/val/frankfurt/frankfurt_000001_055603_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_055603_gtFine_labelTrainIds.png
429 | leftImg8bit/val/frankfurt/frankfurt_000001_055709_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_055709_gtFine_labelTrainIds.png
430 | leftImg8bit/val/frankfurt/frankfurt_000001_056580_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_056580_gtFine_labelTrainIds.png
431 | leftImg8bit/val/frankfurt/frankfurt_000001_057181_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_057181_gtFine_labelTrainIds.png
432 | leftImg8bit/val/frankfurt/frankfurt_000001_057478_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_057478_gtFine_labelTrainIds.png
433 | leftImg8bit/val/frankfurt/frankfurt_000001_057954_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_057954_gtFine_labelTrainIds.png
434 | leftImg8bit/val/frankfurt/frankfurt_000001_058057_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_058057_gtFine_labelTrainIds.png
435 | leftImg8bit/val/frankfurt/frankfurt_000001_058176_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_058176_gtFine_labelTrainIds.png
436 | leftImg8bit/val/frankfurt/frankfurt_000001_058504_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_058504_gtFine_labelTrainIds.png
437 | leftImg8bit/val/frankfurt/frankfurt_000001_058914_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_058914_gtFine_labelTrainIds.png
438 | leftImg8bit/val/frankfurt/frankfurt_000001_059119_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_059119_gtFine_labelTrainIds.png
439 | leftImg8bit/val/frankfurt/frankfurt_000001_059642_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_059642_gtFine_labelTrainIds.png
440 | leftImg8bit/val/frankfurt/frankfurt_000001_059789_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_059789_gtFine_labelTrainIds.png
441 | leftImg8bit/val/frankfurt/frankfurt_000001_060135_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_060135_gtFine_labelTrainIds.png
442 | leftImg8bit/val/frankfurt/frankfurt_000001_060422_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_060422_gtFine_labelTrainIds.png
443 | leftImg8bit/val/frankfurt/frankfurt_000001_060545_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_060545_gtFine_labelTrainIds.png
444 | leftImg8bit/val/frankfurt/frankfurt_000001_060906_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_060906_gtFine_labelTrainIds.png
445 | leftImg8bit/val/frankfurt/frankfurt_000001_061682_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_061682_gtFine_labelTrainIds.png
446 | leftImg8bit/val/frankfurt/frankfurt_000001_061763_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_061763_gtFine_labelTrainIds.png
447 | leftImg8bit/val/frankfurt/frankfurt_000001_062016_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_062016_gtFine_labelTrainIds.png
448 | leftImg8bit/val/frankfurt/frankfurt_000001_062250_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_062250_gtFine_labelTrainIds.png
449 | leftImg8bit/val/frankfurt/frankfurt_000001_062396_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_062396_gtFine_labelTrainIds.png
450 | leftImg8bit/val/frankfurt/frankfurt_000001_062509_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_062509_gtFine_labelTrainIds.png
451 | leftImg8bit/val/frankfurt/frankfurt_000001_062653_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_062653_gtFine_labelTrainIds.png
452 | leftImg8bit/val/frankfurt/frankfurt_000001_062793_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_062793_gtFine_labelTrainIds.png
453 | leftImg8bit/val/frankfurt/frankfurt_000001_063045_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_063045_gtFine_labelTrainIds.png
454 | leftImg8bit/val/frankfurt/frankfurt_000001_064130_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_064130_gtFine_labelTrainIds.png
455 | leftImg8bit/val/frankfurt/frankfurt_000001_064305_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_064305_gtFine_labelTrainIds.png
456 | leftImg8bit/val/frankfurt/frankfurt_000001_064651_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_064651_gtFine_labelTrainIds.png
457 | leftImg8bit/val/frankfurt/frankfurt_000001_064798_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_064798_gtFine_labelTrainIds.png
458 | leftImg8bit/val/frankfurt/frankfurt_000001_064925_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_064925_gtFine_labelTrainIds.png
459 | leftImg8bit/val/frankfurt/frankfurt_000001_065160_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_065160_gtFine_labelTrainIds.png
460 | leftImg8bit/val/frankfurt/frankfurt_000001_065617_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_065617_gtFine_labelTrainIds.png
461 | leftImg8bit/val/frankfurt/frankfurt_000001_065850_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_065850_gtFine_labelTrainIds.png
462 | leftImg8bit/val/frankfurt/frankfurt_000001_066092_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_066092_gtFine_labelTrainIds.png
463 | leftImg8bit/val/frankfurt/frankfurt_000001_066438_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_066438_gtFine_labelTrainIds.png
464 | leftImg8bit/val/frankfurt/frankfurt_000001_066574_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_066574_gtFine_labelTrainIds.png
465 | leftImg8bit/val/frankfurt/frankfurt_000001_066832_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_066832_gtFine_labelTrainIds.png
466 | leftImg8bit/val/frankfurt/frankfurt_000001_067092_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_067092_gtFine_labelTrainIds.png
467 | leftImg8bit/val/frankfurt/frankfurt_000001_067178_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_067178_gtFine_labelTrainIds.png
468 | leftImg8bit/val/frankfurt/frankfurt_000001_067295_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_067295_gtFine_labelTrainIds.png
469 | leftImg8bit/val/frankfurt/frankfurt_000001_067474_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_067474_gtFine_labelTrainIds.png
470 | leftImg8bit/val/frankfurt/frankfurt_000001_067735_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_067735_gtFine_labelTrainIds.png
471 | leftImg8bit/val/frankfurt/frankfurt_000001_068063_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_068063_gtFine_labelTrainIds.png
472 | leftImg8bit/val/frankfurt/frankfurt_000001_068208_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_068208_gtFine_labelTrainIds.png
473 | leftImg8bit/val/frankfurt/frankfurt_000001_068682_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_068682_gtFine_labelTrainIds.png
474 | leftImg8bit/val/frankfurt/frankfurt_000001_068772_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_068772_gtFine_labelTrainIds.png
475 | leftImg8bit/val/frankfurt/frankfurt_000001_069633_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_069633_gtFine_labelTrainIds.png
476 | leftImg8bit/val/frankfurt/frankfurt_000001_070099_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_070099_gtFine_labelTrainIds.png
477 | leftImg8bit/val/frankfurt/frankfurt_000001_071288_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_071288_gtFine_labelTrainIds.png
478 | leftImg8bit/val/frankfurt/frankfurt_000001_071781_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_071781_gtFine_labelTrainIds.png
479 | leftImg8bit/val/frankfurt/frankfurt_000001_072155_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_072155_gtFine_labelTrainIds.png
480 | leftImg8bit/val/frankfurt/frankfurt_000001_072295_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_072295_gtFine_labelTrainIds.png
481 | leftImg8bit/val/frankfurt/frankfurt_000001_073088_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_073088_gtFine_labelTrainIds.png
482 | leftImg8bit/val/frankfurt/frankfurt_000001_073243_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_073243_gtFine_labelTrainIds.png
483 | leftImg8bit/val/frankfurt/frankfurt_000001_073464_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_073464_gtFine_labelTrainIds.png
484 | leftImg8bit/val/frankfurt/frankfurt_000001_073911_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_073911_gtFine_labelTrainIds.png
485 | leftImg8bit/val/frankfurt/frankfurt_000001_075296_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_075296_gtFine_labelTrainIds.png
486 | leftImg8bit/val/frankfurt/frankfurt_000001_075984_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_075984_gtFine_labelTrainIds.png
487 | leftImg8bit/val/frankfurt/frankfurt_000001_076502_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_076502_gtFine_labelTrainIds.png
488 | leftImg8bit/val/frankfurt/frankfurt_000001_077092_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_077092_gtFine_labelTrainIds.png
489 | leftImg8bit/val/frankfurt/frankfurt_000001_077233_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_077233_gtFine_labelTrainIds.png
490 | leftImg8bit/val/frankfurt/frankfurt_000001_077434_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_077434_gtFine_labelTrainIds.png
491 | leftImg8bit/val/frankfurt/frankfurt_000001_078803_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_078803_gtFine_labelTrainIds.png
492 | leftImg8bit/val/frankfurt/frankfurt_000001_079206_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_079206_gtFine_labelTrainIds.png
493 | leftImg8bit/val/frankfurt/frankfurt_000001_080091_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_080091_gtFine_labelTrainIds.png
494 | leftImg8bit/val/frankfurt/frankfurt_000001_080391_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_080391_gtFine_labelTrainIds.png
495 | leftImg8bit/val/frankfurt/frankfurt_000001_080830_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_080830_gtFine_labelTrainIds.png
496 | leftImg8bit/val/frankfurt/frankfurt_000001_082087_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_082087_gtFine_labelTrainIds.png
497 | leftImg8bit/val/frankfurt/frankfurt_000001_082466_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_082466_gtFine_labelTrainIds.png
498 | leftImg8bit/val/frankfurt/frankfurt_000001_083029_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_083029_gtFine_labelTrainIds.png
499 | leftImg8bit/val/frankfurt/frankfurt_000001_083199_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_083199_gtFine_labelTrainIds.png
500 | leftImg8bit/val/frankfurt/frankfurt_000001_083852_leftImg8bit.png gtFine/val/frankfurt/frankfurt_000001_083852_gtFine_labelTrainIds.png
501 |
--------------------------------------------------------------------------------
/dataset/inform/camvid_inform.pkl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Reagan1311/DABNet/b8d62fe7f14ae4909a9e9aad1dd6e0ade98431cd/dataset/inform/camvid_inform.pkl
--------------------------------------------------------------------------------
/dataset/inform/cityscapes_inform.pkl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Reagan1311/DABNet/b8d62fe7f14ae4909a9e9aad1dd6e0ade98431cd/dataset/inform/cityscapes_inform.pkl
--------------------------------------------------------------------------------
/eval_fps.py:
--------------------------------------------------------------------------------
1 | import time
2 | import torch
3 | import torch.backends.cudnn as cudnn
4 |
5 | from argparse import ArgumentParser
6 | from builders.model_builder import build_model
7 |
8 |
9 | def compute_speed(model, input_size, device, iteration=100):
10 | torch.cuda.set_device(device)
11 | cudnn.benchmark = True
12 |
13 | model.eval()
14 | model = model.cuda()
15 |
16 | input = torch.randn(*input_size, device=device)
17 |
18 | for _ in range(50):
19 | model(input)
20 |
21 | print('=========Speed Testing=========')
22 | torch.cuda.synchronize()
23 | torch.cuda.synchronize()
24 | t_start = time.time()
25 | for _ in range(iteration):
26 | model(input)
27 | torch.cuda.synchronize()
28 | torch.cuda.synchronize()
29 | elapsed_time = time.time() - t_start
30 |
31 | speed_time = elapsed_time / iteration * 1000
32 | fps = iteration / elapsed_time
33 |
34 | print('Elapsed Time: [%.2f s / %d iter]' % (elapsed_time, iteration))
35 | print('Speed Time: %.2f ms / iter FPS: %.2f' % (speed_time, fps))
36 | return speed_time, fps
37 |
38 |
39 | if __name__ == '__main__':
40 | parser = ArgumentParser()
41 |
42 | parser.add_argument("size", type=str, default="512,1024", help="input size of model")
43 | parser.add_argument('--num-channels', type=int, default=3)
44 | parser.add_argument('--batch-size', type=int, default=1)
45 | parser.add_argument('--classes', type=int, default=19)
46 | parser.add_argument('--iter', type=int, default=100)
47 | parser.add_argument('--model', type=str, default='DABNet')
48 | parser.add_argument("--gpus", type=str, default="0", help="gpu ids (default: 0)")
49 | args = parser.parse_args()
50 |
51 | h, w = map(int, args.size.split(','))
52 | model = build_model(args.model, num_classes=args.classes)
53 | compute_speed(model, (args.batch_size, args.num_channels, h, w), int(args.gpus), iteration=args.iter)
54 |
--------------------------------------------------------------------------------
/image/DABNet_demo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Reagan1311/DABNet/b8d62fe7f14ae4909a9e9aad1dd6e0ade98431cd/image/DABNet_demo.png
--------------------------------------------------------------------------------
/image/architecture.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Reagan1311/DABNet/b8d62fe7f14ae4909a9e9aad1dd6e0ade98431cd/image/architecture.png
--------------------------------------------------------------------------------
/image/iou_vs_epochs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Reagan1311/DABNet/b8d62fe7f14ae4909a9e9aad1dd6e0ade98431cd/image/iou_vs_epochs.png
--------------------------------------------------------------------------------
/image/loss_vs_epochs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Reagan1311/DABNet/b8d62fe7f14ae4909a9e9aad1dd6e0ade98431cd/image/loss_vs_epochs.png
--------------------------------------------------------------------------------
/model/DABNet.py:
--------------------------------------------------------------------------------
1 | import torch
2 | import torch.nn as nn
3 | import torch.nn.functional as F
4 |
5 | __all__ = ["DABNet"]
6 |
7 |
8 | class Conv(nn.Module):
9 | def __init__(self, nIn, nOut, kSize, stride, padding, dilation=(1, 1), groups=1, bn_acti=False, bias=False):
10 | super().__init__()
11 |
12 | self.bn_acti = bn_acti
13 |
14 | self.conv = nn.Conv2d(nIn, nOut, kernel_size=kSize,
15 | stride=stride, padding=padding,
16 | dilation=dilation, groups=groups, bias=bias)
17 |
18 | if self.bn_acti:
19 | self.bn_prelu = BNPReLU(nOut)
20 |
21 | def forward(self, input):
22 | output = self.conv(input)
23 |
24 | if self.bn_acti:
25 | output = self.bn_prelu(output)
26 |
27 | return output
28 |
29 |
30 | class BNPReLU(nn.Module):
31 | def __init__(self, nIn):
32 | super().__init__()
33 | self.bn = nn.BatchNorm2d(nIn, eps=1e-3)
34 | self.acti = nn.PReLU(nIn)
35 |
36 | def forward(self, input):
37 | output = self.bn(input)
38 | output = self.acti(output)
39 |
40 | return output
41 |
42 |
43 | class DABModule(nn.Module):
44 | def __init__(self, nIn, d=1, kSize=3, dkSize=3):
45 | super().__init__()
46 |
47 | self.bn_relu_1 = BNPReLU(nIn)
48 | self.conv3x3 = Conv(nIn, nIn // 2, kSize, 1, padding=1, bn_acti=True)
49 |
50 | self.dconv3x1 = Conv(nIn // 2, nIn // 2, (dkSize, 1), 1,
51 | padding=(1, 0), groups=nIn // 2, bn_acti=True)
52 | self.dconv1x3 = Conv(nIn // 2, nIn // 2, (1, dkSize), 1,
53 | padding=(0, 1), groups=nIn // 2, bn_acti=True)
54 | self.ddconv3x1 = Conv(nIn // 2, nIn // 2, (dkSize, 1), 1,
55 | padding=(1 * d, 0), dilation=(d, 1), groups=nIn // 2, bn_acti=True)
56 | self.ddconv1x3 = Conv(nIn // 2, nIn // 2, (1, dkSize), 1,
57 | padding=(0, 1 * d), dilation=(1, d), groups=nIn // 2, bn_acti=True)
58 |
59 | self.bn_relu_2 = BNPReLU(nIn // 2)
60 | self.conv1x1 = Conv(nIn // 2, nIn, 1, 1, padding=0, bn_acti=False)
61 |
62 | def forward(self, input):
63 | output = self.bn_relu_1(input)
64 | output = self.conv3x3(output)
65 |
66 | br1 = self.dconv3x1(output)
67 | br1 = self.dconv1x3(br1)
68 | br2 = self.ddconv3x1(output)
69 | br2 = self.ddconv1x3(br2)
70 |
71 | output = br1 + br2
72 | output = self.bn_relu_2(output)
73 | output = self.conv1x1(output)
74 |
75 | return output + input
76 |
77 |
78 | class DownSamplingBlock(nn.Module):
79 | def __init__(self, nIn, nOut):
80 | super().__init__()
81 | self.nIn = nIn
82 | self.nOut = nOut
83 |
84 | if self.nIn < self.nOut:
85 | nConv = nOut - nIn
86 | else:
87 | nConv = nOut
88 |
89 | self.conv3x3 = Conv(nIn, nConv, kSize=3, stride=2, padding=1)
90 | self.max_pool = nn.MaxPool2d(2, stride=2)
91 | self.bn_prelu = BNPReLU(nOut)
92 |
93 | def forward(self, input):
94 | output = self.conv3x3(input)
95 |
96 | if self.nIn < self.nOut:
97 | max_pool = self.max_pool(input)
98 | output = torch.cat([output, max_pool], 1)
99 |
100 | output = self.bn_prelu(output)
101 |
102 | return output
103 |
104 |
105 | class InputInjection(nn.Module):
106 | def __init__(self, ratio):
107 | super().__init__()
108 | self.pool = nn.ModuleList()
109 | for i in range(0, ratio):
110 | self.pool.append(nn.AvgPool2d(3, stride=2, padding=1))
111 |
112 | def forward(self, input):
113 | for pool in self.pool:
114 | input = pool(input)
115 |
116 | return input
117 |
118 |
119 | class DABNet(nn.Module):
120 | def __init__(self, classes=19, block_1=3, block_2=6):
121 | super().__init__()
122 | self.init_conv = nn.Sequential(
123 | Conv(3, 32, 3, 2, padding=1, bn_acti=True),
124 | Conv(32, 32, 3, 1, padding=1, bn_acti=True),
125 | Conv(32, 32, 3, 1, padding=1, bn_acti=True),
126 | )
127 |
128 | self.down_1 = InputInjection(1) # down-sample the image 1 times
129 | self.down_2 = InputInjection(2) # down-sample the image 2 times
130 | self.down_3 = InputInjection(3) # down-sample the image 3 times
131 |
132 | self.bn_prelu_1 = BNPReLU(32 + 3)
133 |
134 | # DAB Block 1
135 | self.downsample_1 = DownSamplingBlock(32 + 3, 64)
136 | self.DAB_Block_1 = nn.Sequential()
137 | for i in range(0, block_1):
138 | self.DAB_Block_1.add_module("DAB_Module_1_" + str(i), DABModule(64, d=2))
139 | self.bn_prelu_2 = BNPReLU(128 + 3)
140 |
141 | # DAB Block 2
142 | dilation_block_2 = [4, 4, 8, 8, 16, 16]
143 | self.downsample_2 = DownSamplingBlock(128 + 3, 128)
144 | self.DAB_Block_2 = nn.Sequential()
145 | for i in range(0, block_2):
146 | self.DAB_Block_2.add_module("DAB_Module_2_" + str(i),
147 | DABModule(128, d=dilation_block_2[i]))
148 | self.bn_prelu_3 = BNPReLU(256 + 3)
149 |
150 | self.classifier = nn.Sequential(Conv(259, classes, 1, 1, padding=0))
151 |
152 | def forward(self, input):
153 |
154 | output0 = self.init_conv(input)
155 |
156 | down_1 = self.down_1(input)
157 | down_2 = self.down_2(input)
158 | down_3 = self.down_3(input)
159 |
160 | output0_cat = self.bn_prelu_1(torch.cat([output0, down_1], 1))
161 |
162 | # DAB Block 1
163 | output1_0 = self.downsample_1(output0_cat)
164 | output1 = self.DAB_Block_1(output1_0)
165 | output1_cat = self.bn_prelu_2(torch.cat([output1, output1_0, down_2], 1))
166 |
167 | # DAB Block 2
168 | output2_0 = self.downsample_2(output1_cat)
169 | output2 = self.DAB_Block_2(output2_0)
170 | output2_cat = self.bn_prelu_3(torch.cat([output2, output2_0, down_3], 1))
171 |
172 | out = self.classifier(output2_cat)
173 | out = F.interpolate(out, input.size()[2:], mode='bilinear', align_corners=False)
174 |
175 | return out
176 |
--------------------------------------------------------------------------------
/predict.py:
--------------------------------------------------------------------------------
1 | import os
2 | import time
3 | import torch
4 | import numpy as np
5 | import torch.backends.cudnn as cudnn
6 | from torch.autograd import Variable
7 | from argparse import ArgumentParser
8 | # user
9 | from builders.model_builder import build_model
10 | from builders.dataset_builder import build_dataset_test
11 | from utils.utils import save_predict
12 | from utils.convert_state import convert_state_dict
13 |
14 |
15 | def predict(args, test_loader, model):
16 | """
17 | args:
18 | test_loader: loaded for test dataset, for those that do not provide label on the test set
19 | model: model
20 | return: class IoU and mean IoU
21 | """
22 | # evaluation or test mode
23 | model.eval()
24 | total_batches = len(test_loader)
25 | for i, (input, size, name) in enumerate(test_loader):
26 | with torch.no_grad():
27 | input_var = Variable(input).cuda()
28 | start_time = time.time()
29 | output = model(input_var)
30 | torch.cuda.synchronize()
31 | time_taken = time.time() - start_time
32 | print('[%d/%d] time: %.2f' % (i + 1, total_batches, time_taken))
33 | output = output.cpu().data[0].numpy()
34 | output = output.transpose(1, 2, 0)
35 | output = np.asarray(np.argmax(output, axis=2), dtype=np.uint8)
36 |
37 | # Save the predict greyscale output for Cityscapes official evaluation
38 | # Modify image name to meet official requirement
39 | name[0] = name[0].rsplit('_', 1)[0] + '*'
40 | save_predict(output, None, name[0], args.dataset, args.save_seg_dir,
41 | output_grey=True, output_color=False, gt_color=False)
42 |
43 |
44 | def test_model(args):
45 | """
46 | main function for testing
47 | param args: global arguments
48 | return: None
49 | """
50 | print(args)
51 |
52 | if args.cuda:
53 | print("=====> use gpu id: '{}'".format(args.gpus))
54 | os.environ["CUDA_VISIBLE_DEVICES"] = args.gpus
55 | if not torch.cuda.is_available():
56 | raise Exception("no GPU found or wrong gpu id, please run without --cuda")
57 |
58 | # build the model
59 | model = build_model(args.model, num_classes=args.classes)
60 |
61 | if args.cuda:
62 | model = model.cuda() # using GPU for inference
63 | cudnn.benchmark = True
64 |
65 | if not os.path.exists(args.save_seg_dir):
66 | os.makedirs(args.save_seg_dir)
67 |
68 | # load the test set
69 | datas, testLoader = build_dataset_test(args.dataset, args.num_workers, none_gt=True)
70 |
71 | if args.checkpoint:
72 | if os.path.isfile(args.checkpoint):
73 | print("=====> loading checkpoint '{}'".format(args.checkpoint))
74 | checkpoint = torch.load(args.checkpoint)
75 | model.load_state_dict(checkpoint['model'])
76 | # model.load_state_dict(convert_state_dict(checkpoint['model']))
77 | else:
78 | print("=====> no checkpoint found at '{}'".format(args.checkpoint))
79 | raise FileNotFoundError("no checkpoint found at '{}'".format(args.checkpoint))
80 |
81 | print("=====> beginning testing")
82 | print("test set length: ", len(testLoader))
83 | predict(args, testLoader, model)
84 |
85 |
86 | if __name__ == '__main__':
87 | parser = ArgumentParser()
88 | parser.add_argument('--model', default="DABNet", help="model name: Context Guided Network (CGNet)")
89 | parser.add_argument('--dataset', default="cityscapes", help="dataset: cityscapes or camvid")
90 | parser.add_argument('--num_workers', type=int, default=1, help="the number of parallel threads")
91 | parser.add_argument('--batch_size', type=int, default=1,
92 | help=" the batch_size is set to 1 when evaluating or testing")
93 | parser.add_argument('--checkpoint', type=str,
94 | default="",
95 | help="use the file to load the checkpoint for evaluating or testing ")
96 | parser.add_argument('--save_seg_dir', type=str, default="./result/",
97 | help="saving path of prediction result")
98 | parser.add_argument('--cuda', default=True, help="run on CPU or GPU")
99 | parser.add_argument("--gpus", default="0", type=str, help="gpu ids (default: 0)")
100 | args = parser.parse_args()
101 |
102 | args.save_seg_dir = os.path.join(args.save_seg_dir, args.dataset, 'predict', args.model)
103 |
104 | if args.dataset == 'cityscapes':
105 | args.classes = 19
106 | elif args.dataset == 'camvid':
107 | args.classes = 11
108 | else:
109 | raise NotImplementedError(
110 | "This repository now supports two datasets: cityscapes and camvid, %s is not included" % args.dataset)
111 |
112 | test_model(args)
113 |
--------------------------------------------------------------------------------
/test.py:
--------------------------------------------------------------------------------
1 | import os
2 | import time
3 | import torch
4 | import numpy as np
5 | import torch.backends.cudnn as cudnn
6 | from torch.autograd import Variable
7 | from argparse import ArgumentParser
8 | # user
9 | from builders.model_builder import build_model
10 | from builders.dataset_builder import build_dataset_test
11 | from utils.utils import save_predict
12 | from utils.metric import get_iou
13 | from utils.convert_state import convert_state_dict
14 |
15 |
16 | def test(args, test_loader, model):
17 | """
18 | args:
19 | test_loader: loaded for test dataset
20 | model: model
21 | return: class IoU and mean IoU
22 | """
23 | # evaluation or test mode
24 | model.eval()
25 | total_batches = len(test_loader)
26 |
27 | data_list = []
28 | for i, (input, label, size, name) in enumerate(test_loader):
29 | with torch.no_grad():
30 | input_var = Variable(input).cuda()
31 | start_time = time.time()
32 | output = model(input_var)
33 | torch.cuda.synchronize()
34 | time_taken = time.time() - start_time
35 | print('[%d/%d] time: %.2f' % (i + 1, total_batches, time_taken))
36 | output = output.cpu().data[0].numpy()
37 | gt = np.asarray(label[0].numpy(), dtype=np.uint8)
38 | output = output.transpose(1, 2, 0)
39 | output = np.asarray(np.argmax(output, axis=2), dtype=np.uint8)
40 | data_list.append([gt.flatten(), output.flatten()])
41 |
42 | # save the predicted image
43 | if args.save:
44 | save_predict(output, gt, name[0], args.dataset, args.save_seg_dir,
45 | output_grey=False, output_color=True, gt_color=True)
46 |
47 | meanIoU, per_class_iu = get_iou(data_list, args.classes)
48 | return meanIoU, per_class_iu
49 |
50 |
51 | def test_model(args):
52 | """
53 | main function for testing
54 | param args: global arguments
55 | return: None
56 | """
57 | print(args)
58 |
59 | if args.cuda:
60 | print("=====> use gpu id: '{}'".format(args.gpus))
61 | os.environ["CUDA_VISIBLE_DEVICES"] = args.gpus
62 | if not torch.cuda.is_available():
63 | raise Exception("no GPU found or wrong gpu id, please run without --cuda")
64 |
65 | # build the model
66 | model = build_model(args.model, num_classes=args.classes)
67 |
68 | if args.cuda:
69 | model = model.cuda() # using GPU for inference
70 | cudnn.benchmark = True
71 |
72 | if args.save:
73 | if not os.path.exists(args.save_seg_dir):
74 | os.makedirs(args.save_seg_dir)
75 |
76 | # load the test set
77 | datas, testLoader = build_dataset_test(args.dataset, args.num_workers)
78 |
79 | if not args.best:
80 | if args.checkpoint:
81 | if os.path.isfile(args.checkpoint):
82 | print("=====> loading checkpoint '{}'".format(args.checkpoint))
83 | checkpoint = torch.load(args.checkpoint)
84 | model.load_state_dict(checkpoint['model'])
85 | # model.load_state_dict(convert_state_dict(checkpoint['model']))
86 | else:
87 | print("=====> no checkpoint found at '{}'".format(args.checkpoint))
88 | raise FileNotFoundError("no checkpoint found at '{}'".format(args.checkpoint))
89 |
90 | print("=====> beginning validation")
91 | print("validation set length: ", len(testLoader))
92 | mIOU_val, per_class_iu = test(args, testLoader, model)
93 | print(mIOU_val)
94 | print(per_class_iu)
95 |
96 | # Get the best test result among the last 10 model records.
97 | else:
98 | if args.checkpoint:
99 | if os.path.isfile(args.checkpoint):
100 | dirname, basename = os.path.split(args.checkpoint)
101 | epoch = int(os.path.splitext(basename)[0].split('_')[1])
102 | mIOU_val = []
103 | per_class_iu = []
104 | for i in range(epoch - 9, epoch + 1):
105 | basename = 'model_' + str(i) + '.pth'
106 | resume = os.path.join(dirname, basename)
107 | checkpoint = torch.load(resume)
108 | model.load_state_dict(checkpoint['model'])
109 | print("=====> beginning test the" + basename)
110 | print("validation set length: ", len(testLoader))
111 | mIOU_val_0, per_class_iu_0 = test(args, testLoader, model)
112 | mIOU_val.append(mIOU_val_0)
113 | per_class_iu.append(per_class_iu_0)
114 |
115 | index = list(range(epoch - 9, epoch + 1))[np.argmax(mIOU_val)]
116 | print("The best mIoU among the last 10 models is", index)
117 | print(mIOU_val)
118 | per_class_iu = per_class_iu[np.argmax(mIOU_val)]
119 | mIOU_val = np.max(mIOU_val)
120 | print(mIOU_val)
121 | print(per_class_iu)
122 |
123 | else:
124 | print("=====> no checkpoint found at '{}'".format(args.checkpoint))
125 | raise FileNotFoundError("no checkpoint found at '{}'".format(args.checkpoint))
126 |
127 | # Save the result
128 | if not args.best:
129 | model_path = os.path.splitext(os.path.basename(args.checkpoint))
130 | args.logFile = 'test_' + model_path[0] + '.txt'
131 | logFileLoc = os.path.join(os.path.dirname(args.checkpoint), args.logFile)
132 | else:
133 | args.logFile = 'test_' + 'best' + str(index) + '.txt'
134 | logFileLoc = os.path.join(os.path.dirname(args.checkpoint), args.logFile)
135 |
136 | # Save the result
137 | if os.path.isfile(logFileLoc):
138 | logger = open(logFileLoc, 'a')
139 | else:
140 | logger = open(logFileLoc, 'w')
141 | logger.write("Mean IoU: %.4f" % mIOU_val)
142 | logger.write("\nPer class IoU: ")
143 | for i in range(len(per_class_iu)):
144 | logger.write("%.4f\t" % per_class_iu[i])
145 | logger.flush()
146 | logger.close()
147 |
148 |
149 | if __name__ == '__main__':
150 | parser = ArgumentParser()
151 | parser.add_argument('--model', default="DABNet", help="model name: Context Guided Network (CGNet)")
152 | parser.add_argument('--dataset', default="cityscapes", help="dataset: cityscapes or camvid")
153 | parser.add_argument('--num_workers', type=int, default=1, help="the number of parallel threads")
154 | parser.add_argument('--batch_size', type=int, default=1,
155 | help=" the batch_size is set to 1 when evaluating or testing")
156 | parser.add_argument('--checkpoint', type=str,
157 | default="./checkpoint/camvid/DABNetbs16gpu1_trainval/model_1000.pth",
158 | help="use the file to load the checkpoint for evaluating or testing ")
159 | parser.add_argument('--save_seg_dir', type=str, default="./result/",
160 | help="saving path of prediction result")
161 | parser.add_argument('--best', action='store_true', help="Get the best result among last few checkpoints")
162 | parser.add_argument('--save', action='store_true', help="Save the predicted image")
163 | parser.add_argument('--cuda', default=True, help="run on CPU or GPU")
164 | parser.add_argument("--gpus", default="0", type=str, help="gpu ids (default: 0)")
165 | args = parser.parse_args()
166 |
167 | args.save_seg_dir = os.path.join(args.save_seg_dir, args.dataset, args.model)
168 |
169 | if args.dataset == 'cityscapes':
170 | args.classes = 19
171 | elif args.dataset == 'camvid':
172 | args.classes = 11
173 | else:
174 | raise NotImplementedError(
175 | "This repository now supports two datasets: cityscapes and camvid, %s is not included" % args.dataset)
176 |
177 | test_model(args)
178 |
--------------------------------------------------------------------------------
/train.py:
--------------------------------------------------------------------------------
1 | import os
2 | import time
3 | import torch
4 | import torch.nn as nn
5 | import timeit
6 | import numpy as np
7 | import matplotlib.pyplot as plt
8 | from torch.autograd import Variable
9 | import torch.backends.cudnn as cudnn
10 | from argparse import ArgumentParser
11 | # user
12 | from builders.model_builder import build_model
13 | from builders.dataset_builder import build_dataset_train
14 | from utils.utils import setup_seed, init_weight, netParams
15 | from utils.metric import get_iou
16 | from utils.loss import CrossEntropyLoss2d, ProbOhemCrossEntropy2d
17 | from utils.lr_scheduler import WarmupPolyLR
18 | from utils.convert_state import convert_state_dict
19 |
20 | GLOBAL_SEED = 1234
21 |
22 |
23 | def val(args, val_loader, model):
24 | """
25 | args:
26 | val_loader: loaded for validation dataset
27 | model: model
28 | return: mean IoU and IoU class
29 | """
30 | # evaluation mode
31 | model.eval()
32 | total_batches = len(val_loader)
33 |
34 | data_list = []
35 | for i, (input, label, size, name) in enumerate(val_loader):
36 | with torch.no_grad():
37 | input_var = Variable(input).cuda()
38 | start_time = time.time()
39 | output = model(input_var)
40 | time_taken = time.time() - start_time
41 | print("[%d/%d] time: %.2f" % (i + 1, total_batches, time_taken))
42 | output = output.cpu().data[0].numpy()
43 | gt = np.asarray(label[0].numpy(), dtype=np.uint8)
44 | output = output.transpose(1, 2, 0)
45 | output = np.asarray(np.argmax(output, axis=2), dtype=np.uint8)
46 | data_list.append([gt.flatten(), output.flatten()])
47 |
48 | meanIoU, per_class_iu = get_iou(data_list, args.classes)
49 | return meanIoU, per_class_iu
50 |
51 |
52 | def train(args, train_loader, model, criterion, optimizer, epoch):
53 | """
54 | args:
55 | train_loader: loaded for training dataset
56 | model: model
57 | criterion: loss function
58 | optimizer: optimization algorithm, such as ADAM or SGD
59 | epoch: epoch number
60 | return: average loss, per class IoU, and mean IoU
61 | """
62 | model.train()
63 | epoch_loss = []
64 |
65 | total_batches = len(train_loader)
66 | print("=====> the number of iterations per epoch: ", total_batches)
67 | st = time.time()
68 | for iteration, batch in enumerate(train_loader, 0):
69 | args.per_iter = total_batches
70 | args.max_iter = args.max_epochs * args.per_iter
71 | args.cur_iter = epoch * args.per_iter + iteration
72 | scheduler = WarmupPolyLR(optimizer, T_max=args.max_iter, cur_iter=args.cur_iter, warmup_factor=1.0 / 3,
73 | warmup_iters=500, power=0.9)
74 | lr = optimizer.param_groups[0]['lr']
75 |
76 | start_time = time.time()
77 | images, labels, _, _ = batch
78 | images = Variable(images).cuda()
79 | labels = Variable(labels.long()).cuda()
80 | output = model(images)
81 | loss = criterion(output, labels)
82 | scheduler.step()
83 | optimizer.zero_grad() # set the grad to zero
84 | loss.backward()
85 | optimizer.step()
86 | epoch_loss.append(loss.item())
87 | time_taken = time.time() - start_time
88 |
89 | print('=====> epoch[%d/%d] iter: (%d/%d) \tcur_lr: %.6f loss: %.3f time:%.2f' % (epoch + 1, args.max_epochs,
90 | iteration + 1, total_batches,
91 | lr, loss.item(), time_taken))
92 |
93 | time_taken_epoch = time.time() - st
94 | remain_time = time_taken_epoch * (args.max_epochs - 1 - epoch)
95 | m, s = divmod(remain_time, 60)
96 | h, m = divmod(m, 60)
97 | print("Remaining training time = %d hour %d minutes %d seconds" % (h, m, s))
98 |
99 | average_epoch_loss_train = sum(epoch_loss) / len(epoch_loss)
100 |
101 | return average_epoch_loss_train, lr
102 |
103 |
104 | def train_model(args):
105 | """
106 | args:
107 | args: global arguments
108 | """
109 | h, w = map(int, args.input_size.split(','))
110 | input_size = (h, w)
111 | print("=====> input size:{}".format(input_size))
112 |
113 | print(args)
114 |
115 | if args.cuda:
116 | print("=====> use gpu id: '{}'".format(args.gpus))
117 | os.environ["CUDA_VISIBLE_DEVICES"] = args.gpus
118 | if not torch.cuda.is_available():
119 | raise Exception("No GPU found or Wrong gpu id, please run without --cuda")
120 |
121 | # set the seed
122 | setup_seed(GLOBAL_SEED)
123 | print("=====> set Global Seed: ", GLOBAL_SEED)
124 |
125 | cudnn.enabled = True
126 | print("=====> building network")
127 |
128 | # build the model and initialization
129 | model = build_model(args.model, num_classes=args.classes)
130 | init_weight(model, nn.init.kaiming_normal_,
131 | nn.BatchNorm2d, 1e-3, 0.1,
132 | mode='fan_in')
133 |
134 | print("=====> computing network parameters and FLOPs")
135 | total_paramters = netParams(model)
136 | print("the number of parameters: %d ==> %.2f M" % (total_paramters, (total_paramters / 1e6)))
137 |
138 | # load data and data augmentation
139 | datas, trainLoader, valLoader = build_dataset_train(args.dataset, input_size, args.batch_size, args.train_type,
140 | args.random_scale, args.random_mirror, args.num_workers)
141 |
142 | print('=====> Dataset statistics')
143 | print("data['classWeights']: ", datas['classWeights'])
144 | print('mean and std: ', datas['mean'], datas['std'])
145 |
146 | # define loss function, respectively
147 | weight = torch.from_numpy(datas['classWeights'])
148 |
149 | if args.dataset == 'camvid':
150 | criteria = CrossEntropyLoss2d(weight=weight, ignore_label=ignore_label)
151 | elif args.dataset == 'cityscapes':
152 | min_kept = int(args.batch_size // len(args.gpus) * h * w // 16)
153 | criteria = ProbOhemCrossEntropy2d(use_weight=True, ignore_label=ignore_label,
154 | thresh=0.7, min_kept=min_kept)
155 | else:
156 | raise NotImplementedError(
157 | "This repository now supports two datasets: cityscapes and camvid, %s is not included" % args.dataset)
158 |
159 | if args.cuda:
160 | criteria = criteria.cuda()
161 | if torch.cuda.device_count() > 1:
162 | print("torch.cuda.device_count()=", torch.cuda.device_count())
163 | args.gpu_nums = torch.cuda.device_count()
164 | model = nn.DataParallel(model).cuda() # multi-card data parallel
165 | else:
166 | args.gpu_nums = 1
167 | print("single GPU for training")
168 | model = model.cuda() # 1-card data parallel
169 |
170 | args.savedir = (args.savedir + args.dataset + '/' + args.model + 'bs'
171 | + str(args.batch_size) + 'gpu' + str(args.gpu_nums) + "_" + str(args.train_type) + '/')
172 |
173 | if not os.path.exists(args.savedir):
174 | os.makedirs(args.savedir)
175 |
176 | start_epoch = 0
177 |
178 | # continue training
179 | if args.resume:
180 | if os.path.isfile(args.resume):
181 | checkpoint = torch.load(args.resume)
182 | start_epoch = checkpoint['epoch']
183 | model.load_state_dict(checkpoint['model'])
184 | # model.load_state_dict(convert_state_dict(checkpoint['model']))
185 | print("=====> loaded checkpoint '{}' (epoch {})".format(args.resume, checkpoint['epoch']))
186 | else:
187 | print("=====> no checkpoint found at '{}'".format(args.resume))
188 |
189 | model.train()
190 | cudnn.benchmark = True
191 |
192 | logFileLoc = args.savedir + args.logFile
193 | if os.path.isfile(logFileLoc):
194 | logger = open(logFileLoc, 'a')
195 | else:
196 | logger = open(logFileLoc, 'w')
197 | logger.write("Parameters: %s Seed: %s" % (str(total_paramters), GLOBAL_SEED))
198 | logger.write("\n%s\t\t%s\t%s\t%s" % ('Epoch', 'Loss(Tr)', 'mIOU (val)', 'lr'))
199 | logger.flush()
200 |
201 | # define optimization criteria
202 | if args.dataset == 'camvid':
203 | optimizer = torch.optim.Adam(
204 | filter(lambda p: p.requires_grad, model.parameters()), args.lr, (0.9, 0.999), eps=1e-08, weight_decay=2e-4)
205 |
206 | elif args.dataset == 'cityscapes':
207 | optimizer = torch.optim.SGD(
208 | filter(lambda p: p.requires_grad, model.parameters()), args.lr, momentum=0.9, weight_decay=1e-4)
209 |
210 | lossTr_list = []
211 | epoches = []
212 | mIOU_val_list = []
213 |
214 | print('=====> beginning training')
215 | for epoch in range(start_epoch, args.max_epochs):
216 | # training
217 | lossTr, lr = train(args, trainLoader, model, criteria, optimizer, epoch)
218 | lossTr_list.append(lossTr)
219 |
220 | # validation
221 | if epoch % 50 == 0 or epoch == (args.max_epochs - 1):
222 | epoches.append(epoch)
223 | mIOU_val, per_class_iu = val(args, valLoader, model)
224 | mIOU_val_list.append(mIOU_val)
225 | # record train information
226 | logger.write("\n%d\t\t%.4f\t\t%.4f\t\t%.7f" % (epoch, lossTr, mIOU_val, lr))
227 | logger.flush()
228 | print("Epoch : " + str(epoch) + ' Details')
229 | print("Epoch No.: %d\tTrain Loss = %.4f\t mIOU(val) = %.4f\t lr= %.6f\n" % (epoch,
230 | lossTr,
231 | mIOU_val, lr))
232 | else:
233 | # record train information
234 | logger.write("\n%d\t\t%.4f\t\t\t\t%.7f" % (epoch, lossTr, lr))
235 | logger.flush()
236 | print("Epoch : " + str(epoch) + ' Details')
237 | print("Epoch No.: %d\tTrain Loss = %.4f\t lr= %.6f\n" % (epoch, lossTr, lr))
238 |
239 | # save the model
240 | model_file_name = args.savedir + '/model_' + str(epoch + 1) + '.pth'
241 | state = {"epoch": epoch + 1, "model": model.state_dict()}
242 |
243 | if epoch >= args.max_epochs - 10:
244 | torch.save(state, model_file_name)
245 | elif not epoch % 20:
246 | torch.save(state, model_file_name)
247 |
248 | # draw plots for visualization
249 | if epoch % 50 == 0 or epoch == (args.max_epochs - 1):
250 | # Plot the figures per 50 epochs
251 | fig1, ax1 = plt.subplots(figsize=(11, 8))
252 |
253 | ax1.plot(range(start_epoch, epoch + 1), lossTr_list)
254 | ax1.set_title("Average training loss vs epochs")
255 | ax1.set_xlabel("Epochs")
256 | ax1.set_ylabel("Current loss")
257 |
258 | plt.savefig(args.savedir + "loss_vs_epochs.png")
259 |
260 | plt.clf()
261 |
262 | fig2, ax2 = plt.subplots(figsize=(11, 8))
263 |
264 | ax2.plot(epoches, mIOU_val_list, label="Val IoU")
265 | ax2.set_title("Average IoU vs epochs")
266 | ax2.set_xlabel("Epochs")
267 | ax2.set_ylabel("Current IoU")
268 | plt.legend(loc='lower right')
269 |
270 | plt.savefig(args.savedir + "iou_vs_epochs.png")
271 |
272 | plt.close('all')
273 |
274 | logger.close()
275 |
276 |
277 | if __name__ == '__main__':
278 | start = timeit.default_timer()
279 | parser = ArgumentParser()
280 | parser.add_argument('--model', default="DABNet", help="model name: Context Guided Network (CGNet)")
281 | parser.add_argument('--dataset', default="cityscapes", help="dataset: cityscapes or camvid")
282 | parser.add_argument('--train_type', type=str, default="train",
283 | help="ontrain for training on train set, ontrainval for training on train+val set")
284 | parser.add_argument('--max_epochs', type=int, default=1000,
285 | help="the number of epochs: 300 for train set, 350 for train+val set")
286 | parser.add_argument('--input_size', type=str, default="512,1024", help="input size of model")
287 | parser.add_argument('--random_mirror', type=bool, default=True, help="input image random mirror")
288 | parser.add_argument('--random_scale', type=bool, default=True, help="input image resize 0.5 to 2")
289 | parser.add_argument('--num_workers', type=int, default=4, help=" the number of parallel threads")
290 | parser.add_argument('--lr', type=float, default=4.5e-2, help="initial learning rate")
291 | parser.add_argument('--batch_size', type=int, default=8, help="the batch size is set to 16 for 2 GPUs")
292 | parser.add_argument('--savedir', default="./checkpoint/", help="directory to save the model snapshot")
293 | parser.add_argument('--resume', type=str, default="",
294 | help="use this file to load last checkpoint for continuing training")
295 | parser.add_argument('--classes', type=int, default=19,
296 | help="the number of classes in the dataset. 19 and 11 for cityscapes and camvid, respectively")
297 | parser.add_argument('--logFile', default="log.txt", help="storing the training and validation logs")
298 | parser.add_argument('--cuda', type=bool, default=True, help="running on CPU or GPU")
299 | parser.add_argument('--gpus', type=str, default="0", help="default GPU devices (0,1)")
300 | args = parser.parse_args()
301 |
302 | if args.dataset == 'cityscapes':
303 | args.classes = 19
304 | args.input_size = '512,1024'
305 | ignore_label = 255
306 | elif args.dataset == 'camvid':
307 | args.classes = 11
308 | args.input_size = '360,480'
309 | ignore_label = 11
310 | else:
311 | raise NotImplementedError(
312 | "This repository now supports two datasets: cityscapes and camvid, %s is not included" % args.dataset)
313 |
314 | train_model(args)
315 | end = timeit.default_timer()
316 | hour = 1.0 * (end - start) / 3600
317 | minute = (hour - int(hour)) * 60
318 | print("training time: %d hour %d minutes" % (int(hour), int(minute)))
319 |
--------------------------------------------------------------------------------
/utils/colorize_mask.py:
--------------------------------------------------------------------------------
1 | from PIL import Image
2 | import torch
3 | import numpy as np
4 |
5 | cityscapes_palette = [128, 64, 128, 244, 35, 232, 70, 70, 70, 102, 102, 156, 190, 153, 153, 153, 153, 153, 250, 170, 30,
6 | 220, 220, 0, 107, 142, 35, 152, 251, 152, 70, 130, 180, 220, 20, 60, 255, 0, 0, 0, 0, 142, 0, 0,
7 | 70,
8 | 0, 60, 100, 0, 80, 100, 0, 0, 230, 119, 11, 32]
9 |
10 | camvid_palette = [128, 128, 128, 128, 0, 0, 192, 192, 128, 128, 64, 128, 60, 40, 222, 128, 128, 0, 192, 128, 128, 64,
11 | 64,
12 | 128, 64, 0, 128, 64, 64, 0, 0, 128, 192]
13 |
14 | zero_pad = 256 * 3 - len(cityscapes_palette)
15 | for i in range(zero_pad):
16 | cityscapes_palette.append(0)
17 |
18 |
19 | # zero_pad = 256 * 3 - len(camvid_palette)
20 | # for i in range(zero_pad):
21 | # camvid_palette.append(0)
22 |
23 | def cityscapes_colorize_mask(mask):
24 | # mask: numpy array of the mask
25 | new_mask = Image.fromarray(mask.astype(np.uint8)).convert('P')
26 | new_mask.putpalette(cityscapes_palette)
27 |
28 | return new_mask
29 |
30 |
31 | def camvid_colorize_mask(mask):
32 | # mask: numpy array of the mask
33 | new_mask = Image.fromarray(mask.astype(np.uint8)).convert('P')
34 | new_mask.putpalette(camvid_palette)
35 |
36 | return new_mask
37 |
38 |
39 | class VOCColorize(object):
40 | def __init__(self, n=22):
41 | self.cmap = voc_color_map(22)
42 | self.cmap = torch.from_numpy(self.cmap[:n])
43 |
44 | def __call__(self, gray_image):
45 | size = gray_image.shape
46 | color_image = np.zeros((3, size[0], size[1]), dtype=np.uint8)
47 |
48 | for label in range(0, len(self.cmap)):
49 | mask = (label == gray_image)
50 | color_image[0][mask] = self.cmap[label][0]
51 | color_image[1][mask] = self.cmap[label][1]
52 | color_image[2][mask] = self.cmap[label][2]
53 |
54 | # handle void
55 | mask = (255 == gray_image)
56 | color_image[0][mask] = color_image[1][mask] = color_image[2][mask] = 255
57 |
58 | return color_image
59 |
60 |
61 | def voc_color_map(N=256, normalized=False):
62 | def bitget(byteval, idx):
63 | return ((byteval & (1 << idx)) != 0)
64 |
65 | dtype = 'float32' if normalized else 'uint8'
66 | cmap = np.zeros((N, 3), dtype=dtype)
67 | for i in range(N):
68 | r = g = b = 0
69 | c = i
70 | for j in range(8):
71 | r = r | (bitget(c, 0) << 7 - j)
72 | g = g | (bitget(c, 1) << 7 - j)
73 | b = b | (bitget(c, 2) << 7 - j)
74 | c = c >> 3
75 |
76 | cmap[i] = np.array([r, g, b])
77 |
78 | cmap = cmap / 255 if normalized else cmap
79 | return cmap
80 |
--------------------------------------------------------------------------------
/utils/convert_state.py:
--------------------------------------------------------------------------------
1 | ###################################################################################################################
2 | #
3 | # The scripts is employed to convert a state_dict from a DataParallel module to normal module state_dict inplace,
4 | # which is removing the prefix module.
5 | # Additionally, you can load the model weigths by employing nn.DataParallel, In this case, you need not employ
6 | # convert_state_dict() to remove the prefix module.
7 | # Author: Rosun
8 | # Date: 2018/03/14
9 | #
10 | ##################################################################################################################
11 |
12 | from collections import OrderedDict
13 | import os
14 | import numpy as np
15 |
16 |
17 | def convert_state_dict(state_dict):
18 | """
19 | Converts a state dict saved from a dataParallel module to normal module state_dict inplace
20 | Args:
21 | state_dict is the loaded DataParallel model_state
22 | """
23 | state_dict_new = OrderedDict()
24 | # print(type(state_dict))
25 | for k, v in state_dict.items():
26 | # print(k)
27 | name = k[7:] # remove the prefix module.
28 | # My heart is borken, the pytorch have no ability to do with the problem.
29 | state_dict_new[name] = v
30 | return state_dict_new
31 |
--------------------------------------------------------------------------------
/utils/loss.py:
--------------------------------------------------------------------------------
1 | import torch
2 | import torch.nn as nn
3 | import torch.nn.functional as F
4 |
5 |
6 | class CrossEntropyLoss2d(nn.Module):
7 | '''
8 | This file defines a cross entropy loss for 2D images
9 | '''
10 |
11 | def __init__(self, weight=None, ignore_label=255):
12 | '''
13 | :param weight: 1D weight vector to deal with the class-imbalance
14 | Obtaining log-probabilities in a neural network is easily achieved by adding a LogSoftmax layer in the last layer of your network.
15 | You may use CrossEntropyLoss instead, if you prefer not to add an extra layer.
16 | '''
17 | super().__init__()
18 |
19 | # self.loss = nn.NLLLoss2d(weight, ignore_index=255)
20 | self.loss = nn.NLLLoss(weight, ignore_index=ignore_label)
21 |
22 | def forward(self, outputs, targets):
23 | return self.loss(F.log_softmax(outputs, 1), targets)
24 |
25 |
26 | class FocalLoss2d(nn.Module):
27 | def __init__(self, alpha=0.5, gamma=2, weight=None, ignore_index=255):
28 | super().__init__()
29 | self.alpha = alpha
30 | self.gamma = gamma
31 | self.weight = weight
32 | self.ignore_index = ignore_index
33 | self.ce_fn = nn.CrossEntropyLoss(weight=self.weight, ignore_index=self.ignore_index)
34 |
35 | def forward(self, preds, labels):
36 | logpt = -self.ce_fn(preds, labels)
37 | pt = torch.exp(logpt)
38 | loss = -((1 - pt) ** self.gamma) * self.alpha * logpt
39 | return loss
40 |
41 |
42 | class ProbOhemCrossEntropy2d(nn.Module):
43 | def __init__(self, ignore_label, reduction='mean', thresh=0.6, min_kept=256,
44 | down_ratio=1, use_weight=False):
45 | super(ProbOhemCrossEntropy2d, self).__init__()
46 | self.ignore_label = ignore_label
47 | self.thresh = float(thresh)
48 | self.min_kept = int(min_kept)
49 | self.down_ratio = down_ratio
50 | if use_weight:
51 | weight = torch.FloatTensor(
52 | [0.8373, 0.918, 0.866, 1.0345, 1.0166, 0.9969, 0.9754, 1.0489,
53 | 0.8786, 1.0023, 0.9539, 0.9843, 1.1116, 0.9037, 1.0865, 1.0955,
54 | 1.0865, 1.1529, 1.0507])
55 | self.criterion = torch.nn.CrossEntropyLoss(reduction=reduction,
56 | weight=weight,
57 | ignore_index=ignore_label)
58 | else:
59 | self.criterion = torch.nn.CrossEntropyLoss(reduction=reduction,
60 | ignore_index=ignore_label)
61 |
62 | def forward(self, pred, target):
63 | b, c, h, w = pred.size()
64 | target = target.view(-1)
65 | valid_mask = target.ne(self.ignore_label)
66 | target = target * valid_mask.long()
67 | num_valid = valid_mask.sum()
68 |
69 | prob = F.softmax(pred, dim=1)
70 | prob = (prob.transpose(0, 1)).reshape(c, -1)
71 |
72 | if self.min_kept > num_valid:
73 | # logger.info('Labels: {}'.format(num_valid))
74 | pass
75 | elif num_valid > 0:
76 | prob = prob.masked_fill_(1 - valid_mask, 1)
77 | mask_prob = prob[
78 | target, torch.arange(len(target), dtype=torch.long)]
79 | threshold = self.thresh
80 | if self.min_kept > 0:
81 | index = mask_prob.argsort()
82 | threshold_index = index[min(len(index), self.min_kept) - 1]
83 | if mask_prob[threshold_index] > self.thresh:
84 | threshold = mask_prob[threshold_index]
85 | kept_mask = mask_prob.le(threshold)
86 | target = target * kept_mask.long()
87 | valid_mask = valid_mask * kept_mask
88 | # logger.info('Valid Mask: {}'.format(valid_mask.sum()))
89 |
90 | target = target.masked_fill_(1 - valid_mask, self.ignore_label)
91 | target = target.view(b, h, w)
92 |
93 | return self.criterion(pred, target)
94 |
--------------------------------------------------------------------------------
/utils/lr_scheduler.py:
--------------------------------------------------------------------------------
1 | import math
2 | from torch.optim.lr_scheduler import MultiStepLR, _LRScheduler
3 |
4 |
5 | class WarmupMultiStepLR(MultiStepLR):
6 | def __init__(self, optimizer, milestones, gamma=0.1, warmup_factor=1.0 / 3,
7 | warmup_iters=500, last_epoch=-1):
8 | self.warmup_factor = warmup_factor
9 | self.warmup_iters = warmup_iters
10 | super().__init__(optimizer, milestones, gamma, last_epoch)
11 |
12 | def get_lr(self):
13 | if self.last_epoch <= self.warmup_iters:
14 | alpha = self.last_epoch / self.warmup_iters
15 | warmup_factor = self.warmup_factor * (1 - alpha) + alpha
16 | # print(self.base_lrs[0]*warmup_factor)
17 | return [lr * warmup_factor for lr in self.base_lrs]
18 | else:
19 | lr = super().get_lr()
20 | return lr
21 |
22 |
23 | class WarmupCosineLR(_LRScheduler):
24 | def __init__(self, optimizer, T_max, warmup_factor=1.0 / 3, warmup_iters=500,
25 | eta_min=0, last_epoch=-1):
26 | self.warmup_factor = warmup_factor
27 | self.warmup_iters = warmup_iters
28 | self.T_max, self.eta_min = T_max, eta_min
29 | super().__init__(optimizer, last_epoch)
30 |
31 | def get_lr(self):
32 | if self.last_epoch <= self.warmup_iters:
33 | alpha = self.last_epoch / self.warmup_iters
34 | warmup_factor = self.warmup_factor * (1 - alpha) + alpha
35 | # print(self.base_lrs[0]*warmup_factor)
36 | return [lr * warmup_factor for lr in self.base_lrs]
37 | else:
38 | return [self.eta_min + (base_lr - self.eta_min) *
39 | (1 + math.cos(
40 | math.pi * (self.last_epoch - self.warmup_iters) / (self.T_max - self.warmup_iters))) / 2
41 | for base_lr in self.base_lrs]
42 |
43 |
44 | class WarmupPolyLR(_LRScheduler):
45 | def __init__(self, optimizer, T_max, cur_iter, warmup_factor=1.0 / 3, warmup_iters=500,
46 | eta_min=0, power=0.9):
47 | self.warmup_factor = warmup_factor
48 | self.warmup_iters = warmup_iters
49 | self.power = power
50 | self.T_max, self.eta_min = T_max, eta_min
51 | self.cur_iter = cur_iter
52 | super().__init__(optimizer)
53 |
54 | def get_lr(self):
55 | if self.cur_iter <= self.warmup_iters:
56 | alpha = self.cur_iter / self.warmup_iters
57 | warmup_factor = self.warmup_factor * (1 - alpha) + alpha
58 | # print(self.base_lrs[0]*warmup_factor)
59 | return [lr * warmup_factor for lr in self.base_lrs]
60 | else:
61 | return [self.eta_min + (base_lr - self.eta_min) *
62 | math.pow(1 - (self.cur_iter - self.warmup_iters) / (self.T_max - self.warmup_iters),
63 | self.power) for base_lr in self.base_lrs]
64 |
65 |
66 | def poly_learning_rate(cur_epoch, max_epoch, curEpoch_iter, perEpoch_iter, baselr):
67 | cur_iter = cur_epoch * perEpoch_iter + curEpoch_iter
68 | max_iter = max_epoch * perEpoch_iter
69 | lr = baselr * pow((1 - 1.0 * cur_iter / max_iter), 0.9)
70 |
71 | return lr
72 |
73 |
74 | if __name__ == '__main__':
75 | optim = WarmupPolyLR()
76 |
--------------------------------------------------------------------------------
/utils/metric.py:
--------------------------------------------------------------------------------
1 | import os, sys
2 | import cv2
3 | import numpy as np
4 |
5 | from multiprocessing import Pool
6 | # import copy_reg
7 | import copyreg
8 | import types
9 |
10 |
11 | def _pickle_method(m):
12 | if m.im_self is None:
13 | return getattr, (m.im_class, m.im_func.func_name)
14 | else:
15 | return getattr, (m.im_self, m.im_func.func_name)
16 |
17 |
18 | copyreg.pickle(types.MethodType, _pickle_method)
19 |
20 |
21 | class ConfusionMatrix(object):
22 |
23 | def __init__(self, nclass, classes=None, ignore_label=255):
24 | self.nclass = nclass
25 | self.classes = classes
26 | self.M = np.zeros((nclass, nclass))
27 | self.ignore_label = ignore_label
28 |
29 | def add(self, gt, pred):
30 | assert (np.max(pred) <= self.nclass)
31 | assert (len(gt) == len(pred))
32 | for i in range(len(gt)):
33 | if not gt[i] == self.ignore_label:
34 | self.M[gt[i], pred[i]] += 1.0
35 |
36 | def addM(self, matrix):
37 | assert (matrix.shape == self.M.shape)
38 | self.M += matrix
39 |
40 | def __str__(self):
41 | pass
42 |
43 | # Pii为预测正确的数量,Pij和Pji分别被解释为假正和假负,尽管两者都是假正与假负之和
44 | def recall(self): # 预测为正确的像素中确认为正确像素的个数
45 | recall = 0.0
46 | for i in range(self.nclass):
47 | recall += self.M[i, i] / np.sum(self.M[:, i])
48 |
49 | return recall / self.nclass
50 |
51 | def accuracy(self): # 分割正确的像素除以总像素
52 | accuracy = 0.0
53 | for i in range(self.nclass):
54 | accuracy += self.M[i, i] / np.sum(self.M[i, :])
55 |
56 | return accuracy / self.nclass
57 |
58 | # 雅卡尔指数,又称为交并比(IOU)
59 | def jaccard(self):
60 | jaccard = 0.0
61 | jaccard_perclass = []
62 | for i in range(self.nclass):
63 | if not self.M[i, i] == 0:
64 | jaccard_perclass.append(self.M[i, i] / (np.sum(self.M[i, :]) + np.sum(self.M[:, i]) - self.M[i, i]))
65 |
66 | return np.sum(jaccard_perclass) / len(jaccard_perclass), jaccard_perclass, self.M
67 |
68 | def generateM(self, item):
69 | gt, pred = item
70 | m = np.zeros((self.nclass, self.nclass))
71 | assert (len(gt) == len(pred))
72 | for i in range(len(gt)):
73 | if gt[i] < self.nclass: # and pred[i] < self.nclass:
74 | m[gt[i], pred[i]] += 1.0
75 | return m
76 |
77 |
78 | def get_iou(data_list, class_num, save_path=None):
79 | """
80 | Args:
81 | data_list: a list, its elements [gt, output]
82 | class_num: the number of label
83 | """
84 | from multiprocessing import Pool
85 |
86 | ConfM = ConfusionMatrix(class_num)
87 | f = ConfM.generateM
88 | pool = Pool()
89 | m_list = pool.map(f, data_list)
90 | pool.close()
91 | pool.join()
92 |
93 | for m in m_list:
94 | ConfM.addM(m)
95 |
96 | aveJ, j_list, M = ConfM.jaccard()
97 | # print(j_list)
98 | # print(M)
99 | # print('meanIOU: ' + str(aveJ) + '\n')
100 |
101 | if save_path:
102 | with open(save_path, 'w') as f:
103 | f.write('meanIOU: ' + str(aveJ) + '\n')
104 | f.write(str(j_list) + '\n')
105 | f.write(str(M) + '\n')
106 | return aveJ, j_list
107 |
--------------------------------------------------------------------------------
/utils/trainID2labelID.py:
--------------------------------------------------------------------------------
1 | # converting trainIDs to labelIDs for evaluating the test set segmenatation results of the cityscapes dataset
2 |
3 | import numpy as np
4 | import os
5 | from PIL import Image
6 |
7 | # index: trainId from 0 to 18, 19 semantic class val: labelIDs
8 | cityscapes_trainIds2labelIds = np.array([7, 8, 11, 12, 13, 17, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 31, 32, 33],
9 | dtype=np.uint8)
10 |
11 |
12 | def trainIDs2LabelID(trainID_png_dir, save_dir):
13 | print('save_dir: ', save_dir)
14 | if not os.path.exists(save_dir):
15 | os.makedirs(save_dir)
16 | png_list = os.listdir(trainID_png_dir)
17 | for index, png_filename in enumerate(png_list):
18 | #
19 | png_path = os.path.join(trainID_png_dir, png_filename)
20 | # print(png_path)
21 | print('processing(', index, '/', len(png_list), ') ....')
22 | image = Image.open(png_path) # image is a PIL #image
23 | pngdata = np.array(image)
24 | trainID = pngdata # model prediction
25 | row, col = pngdata.shape
26 | labelID = np.zeros((row, col), dtype=np.uint8)
27 | for i in range(row):
28 | for j in range(col):
29 | labelID[i][j] = cityscapes_trainIds2labelIds[trainID[i][j]]
30 |
31 | res_path = os.path.join(save_dir, png_filename)
32 | new_im = Image.fromarray(labelID)
33 | new_im.save(res_path)
34 |
35 |
36 | if __name__ == '__main__':
37 | trainID_png_dir = './result/cityscapes/predict/DABNet'
38 | save_dir = './result/cityscapes_submit/'
39 | trainIDs2LabelID(trainID_png_dir, save_dir)
40 |
--------------------------------------------------------------------------------
/utils/utils.py:
--------------------------------------------------------------------------------
1 | import os
2 | import random
3 | import numpy as np
4 | from PIL import Image
5 | import torch
6 | import torch.nn as nn
7 | from utils.colorize_mask import cityscapes_colorize_mask, camvid_colorize_mask
8 |
9 |
10 | def __init_weight(feature, conv_init, norm_layer, bn_eps, bn_momentum,
11 | **kwargs):
12 | for name, m in feature.named_modules():
13 | if isinstance(m, (nn.Conv2d, nn.Conv3d)):
14 | conv_init(m.weight, **kwargs)
15 | elif isinstance(m, norm_layer):
16 | m.eps = bn_eps
17 | m.momentum = bn_momentum
18 | nn.init.constant_(m.weight, 1)
19 | nn.init.constant_(m.bias, 0)
20 |
21 |
22 | def init_weight(module_list, conv_init, norm_layer, bn_eps, bn_momentum,
23 | **kwargs):
24 | if isinstance(module_list, list):
25 | for feature in module_list:
26 | __init_weight(feature, conv_init, norm_layer, bn_eps, bn_momentum,
27 | **kwargs)
28 | else:
29 | __init_weight(module_list, conv_init, norm_layer, bn_eps, bn_momentum,
30 | **kwargs)
31 |
32 |
33 | def setup_seed(seed):
34 | torch.manual_seed(seed)
35 | torch.cuda.manual_seed_all(seed)
36 | np.random.seed(seed)
37 | random.seed(seed)
38 | torch.backends.cudnn.deterministic = True
39 |
40 |
41 | def save_predict(output, gt, img_name, dataset, save_path, output_grey=False, output_color=True, gt_color=False):
42 | if output_grey:
43 | output_grey = Image.fromarray(output)
44 | output_grey.save(os.path.join(save_path, img_name + '.png'))
45 |
46 | if output_color:
47 | if dataset == 'cityscapes':
48 | output_color = cityscapes_colorize_mask(output)
49 | elif dataset == 'camvid':
50 | output_color = camvid_colorize_mask(output)
51 |
52 | output_color.save(os.path.join(save_path, img_name + '_color.png'))
53 |
54 | if gt_color:
55 | if dataset == 'cityscapes':
56 | gt_color = cityscapes_colorize_mask(gt)
57 | elif dataset == 'camvid':
58 | gt_color = camvid_colorize_mask(gt)
59 |
60 | gt_color.save(os.path.join(save_path, img_name + '_gt.png'))
61 |
62 |
63 | def netParams(model):
64 | """
65 | computing total network parameters
66 | args:
67 | model: model
68 | return: the number of parameters
69 | """
70 | total_paramters = 0
71 | for parameter in model.parameters():
72 | i = len(parameter.size())
73 | p = 1
74 | for j in range(i):
75 | p *= parameter.size(j)
76 | total_paramters += p
77 |
78 | return total_paramters
79 |
--------------------------------------------------------------------------------