class_docstr: PointNet2 with multi-scale grouping
  metric learning siamese network that uses feature propogation layers
code: def set_last_mlp(self, last_mlp_opt):
      if len(last_mlp_opt.nn) > 2:
          self.FC_layer = MLP(
              last_mlp_opt.nn[: len(last_mlp_opt.nn) - 1]
          )
          self.FC_layer.add_module(
              "last", Lin(last_mlp_opt.nn[-2], last_mlp_opt.nn[-1])
          )
      elif len(last_mlp_opt.nn) == 2:
          self.FC_layer = Sequential(
              Lin(last_mlp_opt.nn[-2], last_mlp_opt.nn[-1])
          )
      else:
          self.FC_layer = torch.nn.Identity()
  
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 2 for calling the PatchPointNet2_D obj's underlying member method code with example usage: obj.set_last_mlp(last_mlp_opt) without return types