text: import os
  import numpy as np
  import random
  import matplotlib.pyplot as plt
  import collections
  import torch
  import torchvision
  from torch.utils import data
  from PIL import Image
  
  
  class cityscapesDataSet(data.Dataset):
      def __init__(
          self,
          data_root,
          data_list,
          max_iters=None,
          num_classes=19, 
          split="train",
          transform=None,
          ignore_label=255,
          debug=False,
      ):
          self.split = split
          self.NUM_CLASS = num_classes
          self.data_root = data_root
          self.data_list = []
          with open(data_list, "r") as handle:
              content = handle.readlines()
  
          for fname in content:
              name = fname.strip()
              self.data_list.append(
                  {
                      "img": os.path.join(
                          self.data_root, "leftImg8bit/%s/%s" % (self.split, name)
                      ),
                      "label": os.path.join(
                          self.data_root,
                          "gtFine/%s/%s"
                          % (
                              self.split,
                              name.split("_leftImg8bit")[0]
                              + "_gtFine_labelIds.png",
                          ),
                      ),
                      "name": name,
                  }
              )
          
          if max_iters is not None:
              self.data_list = self.data_list * int(np.ceil(float(max_iters) / len(self.data_list)))
  
          self.id_to_trainid = {
              7: 0,
              8: 1,
              11: 2,
              12: 3,
              13: 4,
              17: 5,
              19: 6,
              20: 7,
              21: 8,
              22: 9,
              23: 10,
              24: 11,
              25: 12,
              26: 13,
              27: 14,
              28: 15,
              31: 16,
              32: 17,
              33: 18,
          }
          self.trainid2name = {
              0: "road",
              1: "sidewalk",
              2: "building",
              3: "wall",
              4: "fence",
              5: "pole",
              6: "light",
              7: "sign",
              8: "vegetation",
              9: "terrain",
              10: "sky",
              11: "person",
              12: "rider",
              13: "car",
              14: "truck",
              15: "bus",
              16: "train",
              17: "motocycle",
              18: "bicycle",
          }
          if self.NUM_CLASS==16:# SYNTHIA 
              self.id_to_trainid = {
                  7: 0,
                  8: 1,
                  11: 2,
                  12: 3,
                  13: 4,
                  17: 5,
                  19: 6,
                  20: 7,
                  21: 8,
                  23: 9,
                  24: 10,
                  25: 11,
                  26: 12,
                  28: 13,
                  32: 14,
                  33: 15,
              }
              self.trainid2name = {
                  0: "road",
                  1: "sidewalk",
                  2: "building",
                  3: "wall",
                  4: "fence",
                  5: "pole",
                  6: "light",
                  7: "sign",
                  8: "vegetation",
                  9: "sky",
                  10: "person",
                  11: "rider",
                  12: "car",
                  13: "bus",
                  14: "motocycle",
                  15: "bicycle",
              }
          self.transform = transform
  
          self.ignore_label = ignore_label
  
          self.debug = debug
  
      def __len__(self):
          return len(self.data_list)
  
      def __getitem__(self, index):
          if self.debug:
              index = 0
          datafiles = self.data_list[index]
  
          image = Image.open(datafiles["img"]).convert('RGB')
          label = np.array(Image.open(datafiles["label"]),dtype=np.float32)
          name = datafiles["name"]
  
          # re-assign labels to match the format of Cityscapes
          label_copy = self.ignore_label * np.ones(label.shape, dtype=np.float32)
          for k, v in self.id_to_trainid.items():
              label_copy[label == k] = v
          # for k in self.trainid2name.keys():
          #     label_copy[label == k] = k
          label = Image.fromarray(label_copy)
          
          if self.transform is not None:
              image, label = self.transform(image, label)
          return image, label, name
  