code: def __init__(self, output_classes, batch_size, input_dims=6):
      super(PointNet2SSGPartSeg, self).__init__()
      # if normal_channel == true, input_dims = 6+3
      self.input_dims = input_dims
  
      self.sa_module1 = SAModule(
          512, batch_size, 0.2, [input_dims, 64, 64, 128], n_neighbor=32
      )
      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.fp3 = PointNet2FP(1280, [256, 256])
      self.fp2 = PointNet2FP(384, [256, 128])
      # if normal_channel == true, 128+16+6+3
      self.fp1 = PointNet2FP(128 + 16 + 6, [128, 128, 128])
  
      self.conv1 = nn.Conv1d(128, 128, 1)
      self.bn1 = nn.BatchNorm1d(128)
      self.drop1 = nn.Dropout(0.5)
      self.conv2 = nn.Conv1d(128, output_classes, 1)
  
file_path: dgl/examples/pytorch/pointcloud/pointnet/pointnet2_partseg.py
imports: import numpy
  import torch
  import torch.nn
  import torch.nn.functional
  from pointnet2 import PointNet2FP, SAModule, SAMSGModule
  from torch.autograd import Variable
label_desc: Use image node_id 1 to create a new PointNet2SSGPartSeg object from inherited base classes: nn with example: obj = PointNet2SSGPartSeg(output_classes, batch_size, input_dims)