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
      self.set_last_mlp(option.mlp_cls)
      self.loss_names = ["loss_reg", "loss", "internal"]
  
imports: import torch
  import torch.nn.functional
  from torch.nn import Linear
  from torch.nn import Sequential
  from torch_geometric.data import Data
  import logging
  from torch_points3d.core.losses import *
  from torch_points3d.modules.pointnet2 import *
  from torch_points3d.core.common_modules import MLP
  from torch_points3d.models.base_architectures import BackboneBasedModel
  from torch_points3d.models.base_architectures import UnetBasedModel
  from torch_points3d.core.common_modules.dense_modules import Conv1D
  from torch_points3d.core.common_modules.base_modules import Seq
  from torch_points3d.models.registration.base import FragmentBaseModel
label_desc: Use image node_id 1 to create a new PatchPointNet2_D object from inherited base classes: BackboneBasedModel with example: obj = PatchPointNet2_D(option, model_type, dataset, modules)