code: def apply_nn(self, input):
      x = input
      stack_down = []
      for i in range(len(self.down_modules) - 1):
          x = self.down_modules[i](x)
          stack_down.append(x)
  
      x = self.down_modules[-1](x)
      stack_down.append(None)
  
      for i in range(len(self.up_modules)):
          x = self.up_modules[i](x, stack_down.pop())
      out_feat = self.FC_layer(x.F)
      # out_feat = x.F
      if self.normalize_feature:
          return out_feat / (
              torch.norm(out_feat, p=2, dim=1, keepdim=True) + 1e-20
          )
      else:
          return out_feat
  
imports: import logging
  import torch
  from torch_geometric.data import Data
  from torch_points3d.modules.MinkowskiEngine import *
  from torch_points3d.models.base_architectures import UnwrappedUnetBasedModel
  from torch_points3d.models.registration.base import FragmentBaseModel
  from torch.nn import Sequential, Linear, LeakyReLU, Dropout
  from torch_points3d.core.common_modules import FastBatchNorm1d, Seq
label_desc: Use image node_id 2 for calling the MinkowskiFragment obj's underlying member method code with example usage: obj.apply_nn(input) and returns: unknown, out_feat