code: def calc_semantic_segmentation_iou(confusion):
      """Calculate Intersection over Union with a given confusion matrix.
  
      The definition of Intersection over Union (IoU) 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}}`
  
      Args:
          confusion (numpy.ndarray): A confusion matrix. Its shape is
              :math:`(n\_class, n\_class)`.
              The :math:`(i, j)` th element corresponds to the number of pixels
              that are labeled as class :math:`i` by the ground truth and
              class :math:`j` by the prediction.
  
      Returns:
          numpy.ndarray:
          An array of IoUs for the :math:`n\_class` classes. Its shape is
          :math:`(n\_class,)`.
  
      """
      iou_denominator = (
          confusion.sum(axis=1)
          + confusion.sum(axis=0)
          - np.diag(confusion)
      )
      iou = np.diag(confusion) / iou_denominator
      return iou
  
imports: from __future__ import division
  import numpy
  import six
label_desc: Use image node_id 2 for calling a global function with example usage: calc_semantic_segmentation_iou(confusion) and returns: iou