class_docstr: Upsampling module from PointNet++
  Arguments:
      k [int] -- number of nearest neighboors used for the interpolation
      up_conv_nn [List[int]] -- list of feature sizes for the uplconv mlp
code: def __init__(self, up_k, up_conv_nn, *args, **kwargs):
      super(FPModule_PD, self).__init__()
      self.upsample_op = KNNInterpolate(up_k)
      bn_momentum = kwargs.get("bn_momentum", 0.1)
      self.nn = MLP(up_conv_nn, bn_momentum=bn_momentum, bias=False)
  
imports: from typing import *
  import torch
  from torch.nn import Linear, ReLU, LeakyReLU, BatchNorm1d, Dropout
  from torch_geometric.nn import knn_interpolate, fps, radius, global_max_pool, global_mean_pool, knn
  from torch_geometric.data import Batch
  from torch_points3d.core.spatial_ops import *
  from .base_conv import BaseConvolution
  from torch_points3d.core.common_modules.base_modules import BaseModule
  from torch_points3d.core.common_modules import MLP
label_desc: Use image node_id 1 to create a new FPModule_PD object from inherited base classes: BaseModule with example: obj = FPModule_PD(up_k, up_conv_nn)