class_docstr: PointNet2 with multi-scale grouping
  metric learning siamese network that uses feature propogation layers
code: def __init__(self, option, model_type, dataset, modules):
      BackboneBasedModel.__init__(
          self, option, model_type, dataset, modules
      )
  
      # Last MLP
      last_mlp_opt = option.mlp_cls
      self._dim_output = last_mlp_opt.nn[-1]
  
      self.FC_layer = Seq()
      for i in range(1, len(last_mlp_opt.nn)):
          self.FC_layer.append(
              Conv1D(
                  last_mlp_opt.nn[i - 1],
                  last_mlp_opt.nn[i],
                  bn=True,
                  bias=False,
              )
          )
  
      self.loss_names = ["loss_patch_desc"]
  
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 1 to create a new SiamesePointNet2_D object from inherited base classes: BackboneBasedModel with example: obj = SiamesePointNet2_D(option, model_type, dataset, modules)