class_docstr: FPN_CARAFE is a more flexible implementation of FPN. It allows more
  choice for upsample methods during the top-down pathway.
  
  It can reproduce the preformance of ICCV 2019 paper
  CARAFE: Content-Aware ReAssembly of FEatures
  Please refer to https://arxiv.org/abs/1905.02188 for more details.
  
  Args:
      in_channels (list[int]): Number of channels for each input feature map.
      out_channels (int): Output channels of feature pyramids.
      num_outs (int): Number of output stages.
      start_level (int): Start level of feature pyramids.
          (Default: 0)
      end_level (int): End level of feature pyramids.
          (Default: -1 indicates the last level).
      norm_cfg (dict): Dictionary to construct and config norm layer.
      activate (str): Type of activation function in ConvModule
          (Default: None indicates w/o activation).
      order (dict): Order of components in ConvModule.
      upsample (str): Type of upsample layer.
      upsample_cfg (dict): Dictionary to construct and config upsample layer.
docstr: Forward function.
docstr_tok: ["Forward","function","."]
code: def forward(self, inputs):
      """Forward function."""
      assert len(inputs) == len(self.in_channels)
  
      # build laterals
      laterals = []
      for i, lateral_conv in enumerate(self.lateral_convs):
          if i <= self.backbone_end_level - self.start_level:
              input = inputs[min(i + self.start_level, len(inputs) - 1)]
          else:
              input = laterals[-1]
          lateral = lateral_conv(input)
          laterals.append(lateral)
  
      # build top-down path
      for i in range(len(laterals) - 1, 0, -1):
          if self.upsample is not None:
              upsample_feat = self.upsample_modules[i - 1](laterals[i])
          else:
              upsample_feat = laterals[i]
          laterals[i - 1] = self.tensor_add(
              laterals[i - 1], upsample_feat
          )
  
      # build outputs
      num_conv_outs = len(self.fpn_convs)
      outs = []
      for i in range(num_conv_outs):
          out = self.fpn_convs[i](laterals[i])
          outs.append(out)
      return tuple(outs)
  
file_path: insightface/detection/scrfd/mmdet/models/necks/fpn_carafe.py
imports: import torch.nn
  from mmcv.cnn import ConvModule, build_upsample_layer, xavier_init
  from mmcv.ops.carafe import CARAFEPack
  from ..builder import NECKS
label_desc: Use image node_id 5 for calling the FPN_CARAFE obj's underlying member method code with example usage: obj.forward(inputs) and returns: tuple