code: def _compute_full_miou(self):
      if self._full_vote_miou is not None:
          return
  
      has_prediction = self._test_area.prediction_count > 0
      log.info(
          "Computing full res mIoU, we have predictions for %.2f%% of the points."
          % (
              torch.sum(has_prediction)
              / (1.0 * has_prediction.shape[0])
              * 100
          )
      )
  
      self._test_area = self._test_area.to("cpu")
  
      # Full res interpolation
      full_pred = knn_interpolate(
          self._test_area.votes[has_prediction],
          self._test_area.pos[has_prediction],
          self._test_area.pos,
          k=1,
      )
  
      # Full res pred
      self._full_confusion = ConfusionMatrix(self._num_classes)
      self._full_confusion.count_predicted_batch(
          self._test_area.y.numpy(), torch.argmax(full_pred, 1).numpy()
      )
      self._full_vote_miou = (
          self._full_confusion.get_average_intersection_union() * 100
      )
  
file_path: torch-points3d/torch_points3d/metrics/s3dis_tracker.py
imports: from typing import Dict, Any
  import logging
  import torch
  from torch_geometric.nn.unpool import knn_interpolate
  from torch_points3d.metrics.confusion_matrix import ConfusionMatrix
  from torch_points3d.metrics.segmentation_tracker import SegmentationTracker
  from torch_points3d.metrics.base_tracker import BaseTracker, meter_value
  from torch_points3d.datasets.segmentation import IGNORE_LABEL
  from torch_points3d.core.data_transform import SaveOriginalPosId
  from torch_points3d.models import model_interface
label_desc: Use image node_id 4 for calling the S3DISTracker obj's underlying member method code with example usage: obj._compute_full_miou() without return types