docstr: Segmentation tracker shapenet part seg problem. The dataset needs to have a
  class_to_segment member that defines how metrics get computed and agregated.
  It follows shapenet official formula for computing miou which treats missing part as having an iou of 1
  See https://github.com/charlesq34/pointnet2/blob/42926632a3c33461aebfbee2d829098b30a23aaa/part_seg/evaluate.py#L166-L176
  
  Arguments:
      dataset {[type]}
  
  Keyword Arguments:
      stage {str} -- current stage (default: {"train"})
      wandb_log {bool} -- Log to Wanndb (default: {False})
      use_tensorboard {bool} -- Log to tensorboard (default: {False})
docstr_tok: ["Segmentation","tracker","shapenet","part","seg","problem",".","The","dataset","needs","to","have","a","class_to_segment","member","that","defines","how","metrics","get","computed","and","agregated",".","It","follows","shapenet","official","formula","for","computing","miou","which","treats","missing","part","as","having","an","iou","of","1","See","https",":","\/\/github.com\/charlesq34\/pointnet2\/blob\/42926632a3c33461aebfbee2d829098b30a23aaa\/part_seg\/evaluate.py","#","L166-L176","Arguments",":","dataset","{","[","type","]","}","Keyword","Arguments",":","stage","{","str","}","--","current","stage","(","default",":","{","``","train","''","}",")","wandb_log","{","bool","}","--","Log","to","Wanndb","(","default",":","{","False","}",")","use_tensorboard","{","bool","}","--","Log","to","tensorboard","(","default",":","{","False","}",")"]
code: def __init__(
      self,
      dataset,
      stage: str = "train",
      wandb_log: bool = False,
      use_tensorboard: bool = False,
  ):
      """Segmentation tracker shapenet part seg problem. The dataset needs to have a
      class_to_segment member that defines how metrics get computed and agregated.
      It follows shapenet official formula for computing miou which treats missing part as having an iou of 1
      See https://github.com/charlesq34/pointnet2/blob/42926632a3c33461aebfbee2d829098b30a23aaa/part_seg/evaluate.py#L166-L176
  
      Arguments:
          dataset {[type]}
  
      Keyword Arguments:
          stage {str} -- current stage (default: {"train"})
          wandb_log {bool} -- Log to Wanndb (default: {False})
          use_tensorboard {bool} -- Log to tensorboard (default: {False})
      """
      super(ShapenetPartTracker, self).__init__(
          stage, wandb_log, use_tensorboard
      )
      self._dataset = dataset
      self._num_classes = dataset.num_classes
      self._class_seg_map = dataset.class_to_segments
      self._seg_to_class = {}
      for cat, segments in self._class_seg_map.items():
          for label in segments:
              self._seg_to_class[label] = cat
      self.reset(stage=stage)
  
file_path: torch-points3d/torch_points3d/metrics/shapenet_part_tracker.py
imports: import numpy
  from .confusion_matrix import ConfusionMatrix
  from .base_tracker import meter_value, BaseTracker
  from torch_geometric.data import Data
  from torch_points3d.models import model_interface
  from torch_points3d.core.data_transform import SaveOriginalPosId
  from torch_points3d.metrics.segmentation_helpers import SegmentationVoter
label_desc: Use image node_id 1 to create a new ShapenetPartTracker object from inherited base classes: BaseTracker with example: obj = ShapenetPartTracker(dataset, stage, wandb_log, use_tensorboard)