cityscapes.py 2.6 KB
Newer Older
1
# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved.
C
chenguowei01 已提交
2 3 4 5 6 7 8 9 10 11 12 13 14 15
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import os
C
chenguowei01 已提交
16
import glob
C
chenguowei01 已提交
17

C
chenguowei01 已提交
18
from .dataset import Dataset
C
chenguowei01 已提交
19 20 21


class Cityscapes(Dataset):
C
chenguowei01 已提交
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
    """Cityscapes dataset `https://www.cityscapes-dataset.com/`.
    The folder structure is as follow:
    cityscapes
    |
    |--leftImg8bit
    |  |--train
    |  |--val
    |  |--test
    |
    |--gtFine
    |  |--train
    |  |--val
    |  |--test
    Make sure there are **labelTrainIds.png in gtFine directory. If not, please run the conver_cityscapes.py in tools.

    Args:
C
chenguowei01 已提交
38
        dataset_root: Cityscapes dataset directory.
C
chenguowei01 已提交
39 40 41 42
        mode: Which part of dataset to use. it is one of ('train', 'val', 'test'). Default: 'train'.
        transforms: Transforms for image.
    """

C
chenguowei01 已提交
43 44
    def __init__(self, dataset_root, transforms=None, mode='train'):
        self.dataset_root = dataset_root
C
chenguowei01 已提交
45 46 47 48 49
        self.transforms = transforms
        self.file_list = list()
        self.mode = mode
        self.num_classes = 19

C
chenguowei01 已提交
50
        if mode.lower() not in ['train', 'val', 'test']:
C
chenguowei01 已提交
51
            raise Exception(
C
chenguowei01 已提交
52
                "mode should be 'train', 'val' or 'test', but got {}.".format(
C
chenguowei01 已提交
53 54 55
                    mode))

        if self.transforms is None:
C
chenguowei01 已提交
56
            raise Exception("`transforms` is necessary, but it is None.")
C
chenguowei01 已提交
57

C
chenguowei01 已提交
58 59 60 61 62
        img_dir = os.path.join(self.dataset_root, 'leftImg8bit')
        grt_dir = os.path.join(self.dataset_root, 'gtFine')
        if self.dataset_root is None or not os.path.isdir(
                self.dataset_root) or not os.path.isdir(
                    img_dir) or not os.path.isdir(grt_dir):
C
chenguowei01 已提交
63 64 65
            raise Exception(
                "The dataset is not Found or the folder structure is nonconfoumance."
            )
C
chenguowei01 已提交
66

C
chenguowei01 已提交
67 68 69 70 71
        grt_files = sorted(
            glob.glob(
                os.path.join(grt_dir, mode, '*', '*_gtFine_labelTrainIds.png')))
        img_files = sorted(
            glob.glob(os.path.join(img_dir, mode, '*', '*_leftImg8bit.png')))
C
chenguowei01 已提交
72

C
chenguowei01 已提交
73 74
        self.file_list = [[img_path, grt_path]
                          for img_path, grt_path in zip(img_files, grt_files)]