code: def PointNet2(
      architecture: str = None,
      input_nc: int = None,
      num_layers: int = None,
      config: DictConfig = None,
      multiscale=False,
      *args,
      **kwargs,
  ):
      """Create a PointNet2 backbone model based on the architecture proposed in
       https://arxiv.org/abs/1706.02413
  
       Parameters
       ----------
       architecture : str, optional
           Architecture of the model, choose from unet, encoder and decoder
       input_nc : int, optional
           Number of channels for the input
      output_nc : int, optional
           If specified, then we add a fully connected head at the end of the network to provide the requested dimension
       num_layers : int, optional
           Depth of the network
       config : DictConfig, optional
           Custom config, overrides the num_layers and architecture parameters
      """
      factory = PointNet2Factory(
          architecture=architecture,
          num_layers=num_layers,
          input_nc=input_nc,
          multiscale=multiscale,
          config=config,
          **kwargs,
      )
      return factory.build()
  
imports: import os
  import sys
  from omegaconf import DictConfig, OmegaConf
  import logging
  from torch_points3d.applications.modelfactory import ModelFactory
  from torch_points3d.modules.pointnet2 import *
  from torch_points3d.core.base_conv.dense import DenseFPModule
  from torch_points3d.models.base_architectures.unet import UnwrappedUnetBasedModel
  from torch_points3d.datasets.multiscale_data import MultiScaleBatch
  from torch_points3d.core.common_modules.dense_modules import Conv1D
  from torch_points3d.core.common_modules.base_modules import Seq
  from .utils import extract_output_nc
label_desc: Use image node_id 1 for calling a global function with example usage: PointNet2(architecture, input_nc, num_layers, config, multiscale) and returns: factory