code: def eval(self, iou_threshold, processes=1):
      rec = {}
      prec = {}
      ap = {}
      for classname in self._gt_clusters.keys():
          (
              rec[classname],
              prec[classname],
              ap[classname],
          ) = self._eval_cls(classname, iou_threshold)
  
      for i, classname in enumerate(self._gt_clusters.keys()):
          if classname not in self._pred_clusters:
              rec[classname] = 0
              prec[classname] = 0
              ap[classname] = 0
  
      return rec, prec, ap
  
imports: import torchnet
  from typing import NamedTuple, Dict, Any, List, Tuple
  import torch
  import numpy
  from torch_scatter import scatter_add
  from collections import OrderedDict, defaultdict
  from torch_points3d.models.model_interface import TrackerInterface
  from torch_points3d.metrics.segmentation_tracker import SegmentationTracker
  from torch_points3d.metrics.base_tracker import BaseTracker, meter_value
  from torch_points3d.models.panoptic.structures import PanopticResults, PanopticLabels
  from torch_points_kernels import instance_iou
  from .box_detection.ap import voc_ap
label_desc: Use image node_id 4 for calling the InstanceAPMeter obj's underlying member method code with example usage: obj.eval(iou_threshold, processes) and returns: rec,  prec,  ap