class_docstr: KITTI tracking statistics (CLEAR MOT, id-switches, fragments, ML/PT/MT, precision/recall)
  MOTA       - Multi-object tracking accuracy in [0,100]
  MOTP       - Multi-object tracking precision in [0,100] (3D) / [td,100] (2D)
  MOTAL      - Multi-object tracking accuracy in [0,100] with log10(id-switches)
  
  id-switches - number of id switches
  fragments   - number of fragmentations
  
  MT, PT, ML - number of mostly tracked, partially tracked and mostly lost trajectories
  
  recall             - recall = percentage of detected targets
  precision      - precision = percentage of correctly detected targets
  FAR                    - number of false alarms per frame
  falsepositives - number of false positives (FP)
  missed         - number of missed targets (FN)
class_docstr_tok: ["KITTI","tracking","statistics","(","CLEAR","MOT",",","id-switches",",","fragments",",","ML\/PT\/MT",",","precision\/recall",")","MOTA","-","Multi-object","tracking","accuracy","in","[","0,100","]","MOTP","-","Multi-object","tracking","precision","in","[","0,100","]","(","3D",")","\/","[","td,100","]","(","2D",")","MOTAL","-","Multi-object","tracking","accuracy","in","[","0,100","]","with","log10","(","id-switches",")","id-switches","-","number","of","id","switches","fragments","-","number","of","fragmentations","MT",",","PT",",","ML","-","number","of","mostly","tracked",",","partially","tracked","and","mostly","lost","trajectories","recall","-","recall","=","percentage","of","detected","targets","precision","-","precision","=","percentage","of","correctly","detected","targets","FAR","-","number","of","false","alarms","per","frame","falsepositives","-","number","of","false","positives","(","FP",")","missed","-","number","of","missed","targets","(","FN",")"]
code: def __init__(
      self,
      result_path,
      gt_path,
      min_overlap=0.5,
      max_truncation=0,
      min_height=25,
      max_occlusion=2,
      cls="car",
      n_frames=[],
      seqs=[],
      n_sequences=0,
  ):
      # get number of sequences and
      # get number of frames per sequence from test mapping
      # (created while extracting the benchmark)
      self.gt_path = os.path.join(gt_path, "../labels")
      self.n_frames = n_frames
      self.sequence_name = seqs
      self.n_sequences = n_sequences
  
      self.cls = cls  # class to evaluate, i.e. pedestrian or car
  
      self.result_path = result_path
  
      # statistics and numbers for evaluation
      self.n_gt = 0  # number of ground truth detections minus ignored false negatives and true positives
      self.n_igt = 0  # number of ignored ground truth detections
      self.n_gts = (
          []
      )  # number of ground truth detections minus ignored false negatives and true positives PER SEQUENCE
      self.n_igts = (
          []
      )  # number of ground ignored truth detections PER SEQUENCE
      self.n_gt_trajectories = 0
      self.n_gt_seq = []
      self.n_tr = 0  # number of tracker detections minus ignored tracker detections
      self.n_trs = (
          []
      )  # number of tracker detections minus ignored tracker detections PER SEQUENCE
      self.n_itr = 0  # number of ignored tracker detections
      self.n_itrs = (
          []
      )  # number of ignored tracker detections PER SEQUENCE
      self.n_igttr = 0  # number of ignored ground truth detections where the corresponding associated tracker detection is also ignored
      self.n_tr_trajectories = 0
      self.n_tr_seq = []
      self.MOTA = 0
      self.MOTP = 0
      self.MOTAL = 0
      self.MODA = 0
      self.MODP = 0
      self.MODP_t = []
      self.recall = 0
      self.precision = 0
      self.F1 = 0
      self.FAR = 0
      self.total_cost = 0
      self.itp = 0  # number of ignored true positives
      self.itps = []  # number of ignored true positives PER SEQUENCE
      self.tp = 0  # number of true positives including ignored true positives!
      self.tps = (
          []
      )  # number of true positives including ignored true positives PER SEQUENCE
      self.fn = (
          0  # number of false negatives WITHOUT ignored false negatives
      )
      self.fns = (
          []
      )  # number of false negatives WITHOUT ignored false negatives PER SEQUENCE
      self.ifn = 0  # number of ignored false negatives
      self.ifns = []  # number of ignored false negatives PER SEQUENCE
      self.fp = 0  # number of false positives
      # a bit tricky, the number of ignored false negatives and ignored true positives
      # is subtracted, but if both tracker detection and ground truth detection
      # are ignored this number is added again to avoid double counting
      self.fps = []  # above PER SEQUENCE
      self.mme = 0
      self.fragments = 0
      self.id_switches = 0
      self.MT = 0
      self.PT = 0
      self.ML = 0
  
      self.min_overlap = min_overlap  # minimum bounding box overlap for 3rd party metrics
      self.max_truncation = max_truncation  # maximum truncation of an object for evaluation
      self.max_occlusion = (
          max_occlusion  # maximum occlusion of an object for evaluation
      )
      self.min_height = (
          min_height  # minimum height of an object for evaluation
      )
      self.n_sample_points = 500
  
      # this should be enough to hold all groundtruth trajectories
      # is expanded if necessary and reduced in any case
      self.gt_trajectories = [[] for x in range(self.n_sequences)]
      self.ign_trajectories = [[] for x in range(self.n_sequences)]
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import os
  import copy
  import sys
  import math
  from collections import defaultdict
  import numpy
  from ppdet.modeling.bbox_utils import bbox_iou_np_expand
  from .map_utils import ap_per_class
  from .metrics import Metric
  from .munkres import Munkres
  from ppdet.utils.logger import setup_logger
label_desc: Use image node_id 1 to create a new KITTIEvaluation object from inherited base classes: object with example: obj = KITTIEvaluation(result_path, gt_path, min_overlap, max_truncation, min_height, max_occlusion, cls, n_frames, seqs, n_sequences)