code: def apply_nn(self, input, pre_computed, upsample):
      stack_down = []
      data = input
      for i in range(len(self.down_modules) - 1):
          data = self.down_modules[i](data, precomputed=pre_computed)
          stack_down.append(data)
  
      data = self.down_modules[-1](data, precomputed=pre_computed)
      innermost = False
  
      if not isinstance(self.inner_modules[0], Identity):
          stack_down.append(data)
          data = self.inner_modules[0](data)
          innermost = True
  
      for i in range(len(self.up_modules)):
          if i == 0 and innermost:
              data = self.up_modules[i]((data, stack_down.pop()))
          else:
              data = self.up_modules[i](
                  (data, stack_down.pop()), precomputed=upsample
              )
  
      output = self.FC_layer(data.x)
      if self.normalize_feature:
          return output / (
              torch.norm(output, p=2, dim=1, keepdim=True) + 1e-3
          )
      else:
          return output
  
imports: from typing import Any
  import torch
  import torch.nn.functional
  from torch.nn import Linear
  from torch.nn import Sequential
  from torch_geometric.data import Data
  from torch_geometric.nn import global_mean_pool
  import logging
  from torch_points3d.core.losses import *
  from torch_points3d.core.common_modules import MLP
  from torch_points3d.core.common_modules import FastBatchNorm1d
  from torch_points3d.core.base_conv.partial_dense import *
  from torch_points3d.models.registration.base import FragmentBaseModel
  from torch_points3d.models.base_architectures import BackboneBasedModel
  from torch_points3d.models.registration.base import create_batch_siamese
  from torch_points3d.models.base_model import BaseModel
  from torch_points3d.models.base_architectures.unet import UnwrappedUnetBasedModel
  from torch_points3d.modules.KPConv import *
  from torch_points3d.datasets.registration.pair import PairMultiScaleBatch
label_desc: Use image node_id 3 for calling the FragmentKPConv obj's underlying member method code with example usage: obj.apply_nn(input, pre_computed, upsample) and returns: unknown, output