code: def _select_seeds(self, data_features):
      sampling_id_key = "sampling_id_0"
      if hasattr(data_features, sampling_id_key):
          seed_inds = getattr(data_features, sampling_id_key, None)[
              :, : self._num_seeds
          ]
          if data_features.pos.shape[1] != self._num_seeds:
              pos = torch.gather(
                  data_features.pos,
                  1,
                  seed_inds.unsqueeze(-1).repeat(
                      1, 1, data_features.pos.shape[-1]
                  ),
              )
              x = torch.gather(
                  data_features.x,
                  2,
                  seed_inds.unsqueeze(1).repeat(
                      1, data_features.x.shape[1], 1
                  ),
              )
              data_out = Data(pos=pos, x=x)
          else:
              data_out = Data(pos=data_features.pos, x=data_features.x)
      else:
          sampler = FPSSamplerToDense(num_to_sample=self._num_seeds)
          data_out, seed_inds = sampler.sample(
              data_features, self._n_batches, self.conv_type
          )
      return data_out, seed_inds
  
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 4 for calling the VoteNet2 obj's underlying member method code with example usage: obj._select_seeds(data_features) and returns: data_out,  seed_inds