code: def __init__(
      self, model_config, model_type, dataset, modules, *args, **kwargs
  ):
      super().__init__(model_config, model_type, dataset, modules)
      self.weight_initialization()
      default_output_nc = kwargs.get("default_output_nc", None)
      if not default_output_nc:
          default_output_nc = extract_output_nc(model_config)
  
      self._output_nc = default_output_nc
      self._has_mlp_head = False
      if "output_nc" in kwargs:
          self._has_mlp_head = True
          self._output_nc = kwargs["output_nc"]
          self.mlp = MLP(
              [default_output_nc, self.output_nc],
              activation=torch.nn.ReLU(),
              bias=False,
          )
  
imports: import os
  import sys
  from omegaconf import DictConfig, OmegaConf
  import logging
  import torch
  from torch_geometric.data import Batch
  from torch_points3d.applications.modelfactory import ModelFactory
  import torch_points3d.modules.SparseConv3d
  from torch_points3d.core.base_conv.message_passing import *
  from torch_points3d.modules.SparseConv3d.modules import *
  from torch_points3d.core.base_conv.partial_dense import *
  from torch_points3d.models.base_architectures.unet import UnwrappedUnetBasedModel
  from torch_points3d.core.common_modules.base_modules import MLP
  from .utils import extract_output_nc
label_desc: Use image node_id 1 to create a new BaseSparseConv3d object from inherited base classes: UnwrappedUnetBasedModel with example: obj = BaseSparseConv3d(model_config, model_type, dataset, modules)