code: def _dump_visuals(self):
      if True:
          return
      if not hasattr(self, "visual_count"):
          self.visual_count = 0
  
      pred_boxes = self.output.get_boxes(self._dataset, apply_nms=True)
      gt_boxes = []
  
      for idx in range(len(pred_boxes)):
          # Ground truth
          sample_boxes = self.input.instance_box_corners[idx]
          sample_boxes = sample_boxes[self.input.box_label_mask[idx]]
          sample_labels = self.input.sem_cls_label[idx]
          gt_box_data = [
              BoxData(sample_labels[i].item(), sample_boxes[i])
              for i in range(len(sample_boxes))
          ]
          gt_boxes.append(gt_box_data)
  
      data_visual = Data(
          pos=self.input.pos,
          batch=self.input.batch,
          gt_boxes=gt_boxes,
          pred_boxes=pred_boxes,
      )
  
      if not os.path.exists("viz"):
          os.mkdir("viz")
      torch.save(
          data_visual.to("cpu"), "viz/data_%i.pt" % (self.visual_count)
      )
      self.visual_count += 1
  
imports: import torch
  from torch_geometric.data import Data
  import os
  from torch_points3d.datasets.object_detection.box_data import BoxData
  from torch_points3d.datasets.segmentation import IGNORE_LABEL
  from torch_points3d.models.base_model import BaseModel
  from torch_points3d.applications import models
  import torch_points3d.modules.VoteNet
  from torch_points3d.core.common_modules import Seq, MLP, FastBatchNorm1d
  from torch_points3d.core.data_transform import AddOnes
  from torch_points3d.modules.VoteNet.dense_samplers import RandomSamplerToDense, FPSSamplerToDense
label_desc: Use image node_id 9 for calling the VoteNet2 obj's underlying member method code with example usage: obj._dump_visuals() without return types