class_docstr: PointNet2 with multi-scale grouping
  metric learning siamese network that uses feature propogation layers
docstr: forward pass of the network
docstr_tok: ["forward","pass","of","the","network"]
code: def forward(self, *args, **kwargs):
      r"""
      forward pass of the network
      """
      data = self.input
      for i in range(len(self.down_modules)):
          data = self.down_modules[i](data)
      last_feature = data.x
      self.output = (
          self.FC_layer(last_feature)
          .transpose(1, 2)
          .contiguous()
          .view((-1, self._dim_output))
      )
  
      self.loss_reg = (
          self.loss_module(self.output) + self.get_internal_loss()
      )
  
file_path: torch-points3d/torch_points3d/models/registration/pointnet.py
imports: from torch_geometric.data import Data
  import logging
  from torch_points3d.modules.pointnet2 import *
  from torch_points3d.core.common_modules.dense_modules import Conv1D
  from torch_points3d.core.common_modules.base_modules import Seq
  from torch_points3d.core.base_conv.dense import DenseFPModule
  from torch_points3d.models.base_architectures import BackboneBasedModel
  from torch_points3d.models.registration.base import create_batch_siamese
label_desc: Use image node_id 3 for calling the SiamesePointNet2_D obj's underlying member method code with example usage: obj.forward() without return types