code: def __init__(
      self,
      input_nc=3,
      input_stn_local_nn=[64, 128, 1024],
      input_stn_global_nn=[1024, 512, 256],
      local_nn_1=[64, 64],
      feat_stn_k=64,
      feat_stn_local_nn=[64, 64, 128, 1024],
      feat_stn_global_nn=[1024, 512, 256],
      local_nn_2=[64, 64, 128, 1024],
      seg_nn=[1088, 512, 256, 128, 4],
      batch_size=1,
      *args,
      **kwargs,
  ):
      super().__init__()
  
      self.batch_size = batch_size
  
      self.input_stn = PointNetSTN3D(
          [input_nc] + input_stn_local_nn,
          input_stn_global_nn,
          batch_size,
      )
      self.local_nn_1 = MLP([input_nc] + local_nn_1)
      self.feat_stn = PointNetSTNkD(
          feat_stn_k, feat_stn_local_nn, feat_stn_global_nn, batch_size
      )
      self.local_nn_2 = MLP(local_nn_2)
      self.seg_nn = MLP(seg_nn)
  
      self._use_scatter_pooling = True
  
imports: import torch
  from torch_geometric.nn import global_max_pool, global_mean_pool
  from torch_points3d.core.common_modules.base_modules import *
  from torch_points3d.core.common_modules.spatial_transform import BaseLinearTransformSTNkD
  from torch_points3d.models.base_model import BaseInternalLossModule
label_desc: Use image node_id 1 to create a new PointNetSeg object from inherited base classes: torch.nn with example: obj = PointNetSeg(input_nc, input_stn_local_nn, input_stn_global_nn, local_nn_1, feat_stn_k, feat_stn_local_nn, feat_stn_global_nn, local_nn_2, seg_nn, batch_size)