class_docstr: Cityscapes Dataloader
code: def __getitem__(self, index):
      img = Image.open(self.images[index]).convert("RGB")
      if self.mode == "test":
          img = self._img_transform(img)
          if self.transform is not None:
              img = self.transform(img)
          return img, os.path.basename(self.images[index])
      # mask = self.masks[index]
      mask = Image.open(self.mask_paths[index])
      # synchrosized transform
      if self.mode == "train":
          img, mask = self._sync_transform(img, mask)
      elif self.mode == "val":
          img, mask = self._val_sync_transform(img, mask)
      else:
          assert self.mode == "testval"
          img, mask = self._img_transform(img), self._mask_transform(
              mask
          )
      # general resize, normalize and toTensor
      if self.transform is not None:
          img = self.transform(img)
      return img, mask
  
file_path: gluon-cv/gluoncv/data/cityscapes.py
imports: import os
  import numpy
  from PIL import Image
  import mxnet
  from .segbase import SegmentationDataset
label_desc: Use image node_id 3 for calling the CitySegmentation obj's underlying member method code with example usage: obj.__getitem__(index) and returns: img,  mask, img,  os