code: def set_input(self, data, device):
      if data.batch.dim() == 1:
          data.batch = data.batch.unsqueeze(-1)
      coords = torch.cat([data.pos, data.batch], -1)
      self.batch_idx = data.batch.squeeze()
      self.input = SparseTensor(data.x, coords).to(self.device)
      self.labels = data.y.to(self.device)
  
file_path: torch-points3d/torch_points3d/models/segmentation/pvcnn.py
imports: import logging
  import torch.nn.functional
  import torch
  from torch_points3d.modules.PVCNN import pvcnn
  from torch_points3d.models.base_model import BaseModel
  from torch_points3d.datasets.segmentation import IGNORE_LABEL
  from torchsparse import SparseTensor
label_desc: Use image node_id 2 for calling the PVCNN obj's underlying member method code with example usage: obj.set_input(data, device) without return types