code: def eval_semantic_segmentation(pred_labels, gt_labels):
      """Evaluate metrics used in Semantic Segmentation.
  
      This function calculates Intersection over Union (IoU), Pixel Accuracy
      and Class Accuracy for the task of semantic segmentation.
  
      The definition of metrics calculated by this function is as follows,
      where :math:`N_{ij}` is the number of pixels
      that are labeled as class :math:`i` by the ground truth and
      class :math:`j` by the prediction.
  
      * :math:`\\text{IoU of the i-th class} =  \
          \\frac{N_{ii}}{\\sum_{j=1}^k N_{ij} + \\sum_{j=1}^k N_{ji} - N_{ii}}`
      * :math:`\\text{mIoU} = \\frac{1}{k} \
          \\sum_{i=1}^k \
          \\frac{N_{ii}}{\\sum_{j=1}^k N_{ij} + \\sum_{j=1}^k N_{ji} - N_{ii}}`
      * :math:`\\text{Pixel Accuracy} =  \
          \\frac \
          {\\sum_{i=1}^k N_{ii}} \
          {\\sum_{i=1}^k \\sum_{j=1}^k N_{ij}}`
      * :math:`\\text{Class Accuracy} = \
          \\frac{N_{ii}}{\\sum_{j=1}^k N_{ij}}`
      * :math:`\\text{Mean Class Accuracy} = \\frac{1}{k} \
          \\sum_{i=1}^k \
          \\frac{N_{ii}}{\\sum_{j=1}^k N_{ij}}`
  
      The more detailed description of the above metrics can be found in a
      review on semantic segmentation [#]_.
  
      The number of classes :math:`n\_class` is
      :math:`max(pred\_labels, gt\_labels) + 1`, which is
      the maximum class id of the inputs added by one.
  
      .. [#] Alberto Garcia-Garcia, Sergio Orts-Escolano, Sergiu Oprea, \
      Victor Villena-Martinez, Jose Garcia-Rodriguez. \
      `A Review on Deep Learning Techniques Applied to Semantic Segmentation \
      <https://arxiv.org/abs/1704.06857>`_. arXiv 2017.
  
      Args:
          pred_labels (iterable of numpy.ndarray): See the table below.
          gt_labels (iterable of numpy.ndarray): See the table below.
  
      .. csv-table::
          :header: name, shape, dtype, format
  
          :obj:`pred_labels`, ":math:`[(H, W)]`", :obj:`int32`, \
          ":math:`[0, \#class - 1]`"
          :obj:`gt_labels`, ":math:`[(H, W)]`", :obj:`int32`, \
          ":math:`[-1, \#class - 1]`"
  
      Returns:
          dict:
  
          The keys, value-types and the description of the values are listed
          below.
  
          * **iou** (*numpy.ndarray*): An array of IoUs for the \
              :math:`n\_class` classes. Its shape is :math:`(n\_class,)`.
          * **miou** (*float*): The average of IoUs over classes.
          * **pixel_accuracy** (*float*): The computed pixel accuracy.
          * **class_accuracy** (*numpy.ndarray*): An array of class accuracies \
              for the :math:`n\_class` classes. \
              Its shape is :math:`(n\_class,)`.
          * **mean_class_accuracy** (*float*): The average of class accuracies.
  
      """
      # Evaluation code is based on
      # https://github.com/shelhamer/fcn.berkeleyvision.org/blob/master/
      # score.py#L37
      confusion = calc_semantic_segmentation_confusion(
          pred_labels, gt_labels
      )
      iou = calc_semantic_segmentation_iou(confusion)
      pixel_accuracy = np.diag(confusion).sum() / confusion.sum()
      class_accuracy = np.diag(confusion) / np.sum(confusion, axis=1)
  
      return {
          "iou": iou,
          "miou": np.nanmean(iou),
          "pixel_accuracy": pixel_accuracy,
          "class_accuracy": class_accuracy,
          "mean_class_accuracy": np.nanmean(class_accuracy),
      }
  
imports: from __future__ import division
  import numpy
  import six
label_desc: Use image node_id 3 for calling a global function with example usage: eval_semantic_segmentation(pred_labels, gt_labels) and returns: dict