class_docstr: [This class handles the special mechanism between the msg
  and the features of RSConv]
class_docstr_tok: ["[","This","class","handles","the","special","mechanism","between","the","msg","and","the","features","of","RSConv","]"]
code: def __init__(
      self,
      down_conv_nn,
      use_xyz,
      bn=True,
      activation=nn.LeakyReLU(negative_slope=0.01),
      *args,
      **kwargs,
  ):
      super(RSConvMapper, self).__init__()
  
      self._down_conv_nn = down_conv_nn
      self._use_xyz = use_xyz
  
      self.nn = nn.ModuleDict()
  
      if len(self._down_conv_nn) == 2:  # First layer
          self._first_layer = True
          f_in, f_intermediate, f_out = self._down_conv_nn[0]
          self.nn["features_nn"] = MLP2D(
              self._down_conv_nn[1], bn=bn, bias=False
          )
  
      else:
          self._first_layer = False
          f_in, f_intermediate, f_out = self._down_conv_nn
  
      self.nn["mlp_msg"] = MLP2D(
          [f_in, f_intermediate, f_out], bn=bn, bias=False
      )
  
      self.nn["norm"] = Sequential(*[nn.BatchNorm2d(f_out), activation])
  
      self._f_out = f_out
  
imports: import logging
  import torch
  from torch.nn import Sequential
  import torch.nn
  import torch.nn.functional
  from torch.nn import Conv1d
  import torch_points_kernels
  from torch_points3d.core.base_conv.dense import *
  from torch_points3d.core.common_modules.dense_modules import MLP2D
  from torch_points3d.core.spatial_ops import DenseFPSSampler, DenseRadiusNeighbourFinder
  from torch_points3d.utils.colors import COLORS
label_desc: Use image node_id 1 to create a new RSConvMapper object from inherited base classes: nn with example: obj = RSConvMapper(down_conv_nn, use_xyz, bn, activation)