code: def perspective(points, calib, transform=None):
      """
      project points onto screen space using perspective projection
      args:
          points: [B, 3, N] 3d points in world coordinates
          calib: [B, 3, 4] projection matrix
          transform: [B, 2, 3] screen space trasnformation
      return:
          [B, 3, N] 3d coordinates in screen space
      """
      rot = calib[:, :3, :3]
      trans = calib[:, :3, 3:4]
      homo = torch.baddbmm(trans, rot, points)
      xy = homo[:, :2, :] / homo[:, 2:3, :]
      if transform is not None:
          scale = transform[:2, :2]
          shift = transform[:2, 2:3]
          xy = torch.baddbmm(shift, scale, xy)
  
      xyz = torch.cat([xy, homo[:, 2:3, :]], 1)
      return xyz
  
label_desc: Use image node_id 3 for calling a global function with example usage: perspective(points, calib, transform) and returns: xyz