code: def lovasz_softmax(
      probas, labels, only_present=False, per_image=False, ignore=None
  ):
      """
      Multi-class Lovasz-Softmax loss
        probas: [B, C, H, W] Variable, class probabilities at each prediction (between 0 and 1)
        labels: [B, H, W] Tensor, ground truth labels (between 0 and C - 1)
        only_present: average only on classes present in ground truth
        per_image: compute the loss per image instead of per batch
        ignore: void class labels
      """
      if per_image:
          loss = mean(
              lovasz_softmax_flat(
                  *flatten_probas(
                      prob.unsqueeze(0), lab.unsqueeze(0), ignore
                  ),
                  only_present=only_present,
              )
              for prob, lab in zip(probas, labels)
          )
      else:
          loss = lovasz_softmax_flat(
              *flatten_probas(probas, labels, ignore),
              only_present=only_present,
          )
      return loss
  
imports: from __future__ import print_function, division
  import torch
  from torch.autograd import Variable
  import torch.nn.functional
  import numpy
label_desc: Use image node_id 8 for calling a global function with example usage: lovasz_softmax(probas, labels, only_present, per_image, ignore) and returns: loss