code: def forward(self, x, cls_label):
      x = x.permute(0, 2, 1)
      batch_size, _, N = x.size()
      x = self.relu(self.bn1(self.conv1(x)))  # B, D, N
      x = self.relu(self.bn2(self.conv2(x)))
      x1 = self.sa1(x)
      x2 = self.sa2(x1)
      x3 = self.sa3(x2)
      x4 = self.sa4(x3)
      x = torch.cat((x1, x2, x3, x4), dim=1)
      x = self.conv_fuse(x)
      x_max, _ = torch.max(x, 2)
      x_avg = torch.mean(x, 2)
      x_max_feature = (
          x_max.view(batch_size, -1).unsqueeze(-1).repeat(1, 1, N)
      )
      x_avg_feature = (
          x_avg.view(batch_size, -1).unsqueeze(-1).repeat(1, 1, N)
      )
      cls_label_feature = self.label_conv(cls_label).repeat(1, 1, N)
      x_global_feature = torch.cat(
          (x_max_feature, x_avg_feature, cls_label_feature), 1
      )
      x = torch.cat((x, x_global_feature), 1)
      x = self.relu(self.bns1(self.convs1(x)))
      x = self.dp1(x)
      x = self.relu(self.bns2(self.convs2(x)))
      x = self.convs3(x)
      return x
  
imports: import torch
  from helper import TransitionDown
  from torch import nn
label_desc: Use image node_id 2 for calling the PointTransformerSeg obj's underlying member method code with example usage: obj.forward(x, cls_label) and returns: x