code: def __init__(
      self, output_classes, batch_size, input_dims=3, dropout_prob=0.4
  ):
      super(PointNet2SSGCls, self).__init__()
      self.input_dims = input_dims
  
      self.sa_module1 = SAModule(
          512, batch_size, 0.2, [input_dims, 64, 64, 128]
      )
      self.sa_module2 = SAModule(
          128, batch_size, 0.4, [128 + 3, 128, 128, 256]
      )
      self.sa_module3 = SAModule(
          None,
          batch_size,
          None,
          [256 + 3, 256, 512, 1024],
          group_all=True,
      )
  
      self.mlp1 = nn.Linear(1024, 512)
      self.bn1 = nn.BatchNorm1d(512)
      self.drop1 = nn.Dropout(dropout_prob)
  
      self.mlp2 = nn.Linear(512, 256)
      self.bn2 = nn.BatchNorm1d(256)
      self.drop2 = nn.Dropout(dropout_prob)
  
      self.mlp_out = nn.Linear(256, output_classes)
  
imports: import dgl
  import dgl.function
  import numpy
  import torch
  import torch.nn
  import torch.nn.functional
  from dgl.geometry import farthest_point_sampler
  from torch.autograd import Variable
label_desc: Use image node_id 1 to create a new PointNet2SSGCls object from inherited base classes: nn with example: obj = PointNet2SSGCls(output_classes, batch_size, input_dims, dropout_prob)