code: def __init__(self, option, model_type, dataset, modules):
      FragmentBaseModel.__init__(self, option)
      self.mode = option.loss_mode
      self.normalize_feature = option.normalize_feature
      self.loss_names = ["loss_reg", "loss"]
      (
          self.metric_loss_module,
          self.miner_module,
      ) = FragmentBaseModel.get_metric_loss_and_miner(
          getattr(option, "metric_loss", None),
          getattr(option, "miner", None),
      )
      # Unet
      self.backbone = SparseConv3d(
          "unet",
          dataset.feature_dimension,
          config=option.backbone,
          backend=option.get("backend", "minkowski"),
      )
      # Last Layer
      if option.mlp_cls is not None:
          last_mlp_opt = option.mlp_cls
          in_feat = last_mlp_opt.nn[0]
          self.FC_layer = Seq()
          for i in range(1, len(last_mlp_opt.nn)):
              self.FC_layer.append(
                  str(i),
                  Sequential(
                      *[
                          Linear(
                              in_feat, last_mlp_opt.nn[i], bias=False
                          ),
                          FastBatchNorm1d(
                              last_mlp_opt.nn[i],
                              momentum=last_mlp_opt.bn_momentum,
                          ),
                          LeakyReLU(0.2),
                      ]
                  ),
              )
              in_feat = last_mlp_opt.nn[i]
  
          if last_mlp_opt.dropout:
              self.FC_layer.append(Dropout(p=last_mlp_opt.dropout))
  
          self.FC_layer.append(Linear(in_feat, in_feat, bias=False))
      else:
          self.FC_layer = torch.nn.Identity()
  
file_path: torch-points3d/torch_points3d/models/registration/spconv3d.py
imports: import torch
  from torch_points3d.models.registration.base import FragmentBaseModel
  from torch.nn import Sequential, Linear, LeakyReLU, Dropout
  from torch_geometric.data import Data, Batch
  from torch_points3d.core.common_modules import FastBatchNorm1d, Seq
  from torch_points3d.applications.sparseconv3d import SparseConv3d
label_desc: Use image node_id 1 to create a new SparseConv3D object from inherited base classes: FragmentBaseModel with example: obj = SparseConv3D(option, model_type, dataset, modules)