docstr: Run forward pass. This will be called by both functions <optimize_parameters> and <test>.
docstr_tok: ["Run","forward","pass",".","This","will","be","called","by","both","functions","<","optimize_parameters",">","and","<","test",">","."]
code: def forward(self, *args, **kwargs):
      """Run forward pass. This will be called by both functions <optimize_parameters> and <test>."""
      data_features = self.backbone_model.forward(self.input)
      data_votes = self.voting_module(data_features)
  
      sampling_id_key = "sampling_id_0"
      num_seeds = data_features.pos.shape[1]
      seed_inds = getattr(data_features, sampling_id_key, None)[
          :, :num_seeds
      ]
      setattr(data_votes, "seed_inds", seed_inds)  # [B,num_seeds]
      outputs: votenet_module.VoteNetResults = self.proposal_cls_module(
          data_votes
      )
  
      # Set output
      self.output = outputs
      if hasattr(self.input, "center_label"):
          gt_center = self.input.center_label[:, :, 0:3]
          self.output.assign_objects(
              gt_center,
              self.input.box_label_mask,
              self.loss_params.near_threshold,
              self.loss_params.far_threshold,
          )
      with torch.no_grad():
          self._dump_visuals()
  
file_path: torch-points3d/torch_points3d/models/object_detection/votenet.py
imports: import logging
  import numpy
  import torch
  import os
  from torch_geometric.data import Data
  from torch_points3d.datasets.object_detection.box_data import BoxData
  from torch_points3d.models.base_model import BaseModel
  from torch_points3d.applications import models
  import torch_points3d.modules.VoteNet
  from torch_points3d.models.base_architectures import UnetBasedModel
  from torch_points3d.datasets.segmentation import IGNORE_LABEL
label_desc: Use image node_id 3 for calling the VoteNetModel obj's underlying member method code with example usage: obj.forward() without return types