class_docstr: NAS-FPN.
  
  Implementation of `NAS-FPN: Learning Scalable Feature Pyramid Architecture
  for Object Detection <https://arxiv.org/abs/1904.07392>`_
  
  Args:
      in_channels (List[int]): Number of input channels per scale.
      out_channels (int): Number of output channels (used at each scale)
      num_outs (int): Number of output scales.
      stack_times (int): The number of times the pyramid architecture will
          be stacked.
      start_level (int): Index of the start input backbone level used to
          build the feature pyramid. Default: 0.
      end_level (int): Index of the end input backbone level (exclusive) to
          build the feature pyramid. Default: -1, which means the last level.
      add_extra_convs (bool): It decides whether to add conv
          layers on top of the original feature maps. Default to False.
          If True, its actual mode is specified by `extra_convs_on_inputs`.
docstr: Forward function.
docstr_tok: ["Forward","function","."]
code: def forward(self, inputs):
      """Forward function."""
      # build P3-P5
      feats = [
          lateral_conv(inputs[i + self.start_level])
          for i, lateral_conv in enumerate(self.lateral_convs)
      ]
      # build P6-P7 on top of P5
      for downsample in self.extra_downsamples:
          feats.append(downsample(feats[-1]))
  
      p3, p4, p5, p6, p7 = feats
  
      for stage in self.fpn_stages:
          # gp(p6, p4) -> p4_1
          p4_1 = stage["gp_64_4"](p6, p4, out_size=p4.shape[-2:])
          # sum(p4_1, p4) -> p4_2
          p4_2 = stage["sum_44_4"](p4_1, p4, out_size=p4.shape[-2:])
          # sum(p4_2, p3) -> p3_out
          p3 = stage["sum_43_3"](p4_2, p3, out_size=p3.shape[-2:])
          # sum(p3_out, p4_2) -> p4_out
          p4 = stage["sum_34_4"](p3, p4_2, out_size=p4.shape[-2:])
          # sum(p5, gp(p4_out, p3_out)) -> p5_out
          p5_tmp = stage["gp_43_5"](p4, p3, out_size=p5.shape[-2:])
          p5 = stage["sum_55_5"](p5, p5_tmp, out_size=p5.shape[-2:])
          # sum(p7, gp(p5_out, p4_2)) -> p7_out
          p7_tmp = stage["gp_54_7"](p5, p4_2, out_size=p7.shape[-2:])
          p7 = stage["sum_77_7"](p7, p7_tmp, out_size=p7.shape[-2:])
          # gp(p7_out, p5_out) -> p6_out
          p6 = stage["gp_75_6"](p7, p5, out_size=p6.shape[-2:])
  
      return p3, p4, p5, p6, p7
  
file_path: insightface/detection/scrfd/mmdet/models/necks/nas_fpn.py
imports: import torch.nn
  from mmcv.cnn import ConvModule, caffe2_xavier_init
  from mmcv.ops.merge_cells import GlobalPoolingCell, SumCell
  from ..builder import NECKS
label_desc: Use image node_id 3 for calling the NASFPN obj's underlying member method code with example usage: obj.forward(inputs) and returns: p3,  p4,  p5,  p6,  p7