docstr: indim: size of x at the input
  outdim: desired size of x at the output
  convdim: size of x following convolution
code: def __init__(self, indim, outdim, convdim):
      """
      indim: size of x at the input
      outdim: desired size of x at the output
      convdim: size of x following convolution
      """
      torch.nn.Module.__init__(self)
  
      self.indim = indim
      self.outdim = outdim
      self.convdim = convdim
  
      self.features_downsample_nn = MLP([self.indim, self.outdim // 4])
      self.features_upsample_nn = MLP([self.convdim, self.outdim])
  
      self.shortcut_feature_resize_nn = MLP([self.indim, self.outdim])
  
      self.activation = ReLU()
  
imports: from abc import abstractmethod
  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.base_conv.base_conv import *
  from torch_points3d.core.common_modules import *
  from torch_points3d.core.spatial_ops import *
label_desc: Use image node_id 1 to create a new BaseResnetBlock object from inherited base classes: torch.nn with example: obj = BaseResnetBlock(indim, outdim, convdim)