code: def _compute_metrics(self, outputs, labels):
      mask = labels != self._ignore_label
      outputs = outputs[mask]
      labels = labels[mask]
  
      outputs = self._convert(outputs)
      labels = self._convert(labels)
  
      if len(labels) == 0:
          return
  
      assert outputs.shape[0] == len(labels)
      self._confusion_matrix.count_predicted_batch(
          labels, np.argmax(outputs, 1)
      )
  
      self._acc = 100 * self._confusion_matrix.get_overall_accuracy()
      self._macc = (
          100 * self._confusion_matrix.get_mean_class_accuracy()
      )
      self._miou = (
          100 * self._confusion_matrix.get_average_intersection_union()
      )
      self._iou_per_class = {
          i: "{:.2f}".format(100 * v)
          for i, v in enumerate(
              self._confusion_matrix.get_intersection_union_per_class()[
                  0
              ]
          )
      }
  
file_path: torch-points3d/torch_points3d/metrics/segmentation_tracker.py
imports: from typing import Dict, Any
  import torch
  import wandb
  import numpy
  from torch_points3d.metrics.confusion_matrix import ConfusionMatrix
  from torch_points3d.metrics.base_tracker import BaseTracker, meter_value
  from torch_points3d.metrics.meters import APMeter
  from torch_points3d.datasets.segmentation import IGNORE_LABEL
  from torch_points3d.models import model_interface
label_desc: Use image node_id 6 for calling the SegmentationTracker obj's underlying member method code with example usage: obj._compute_metrics(outputs, labels) without return types