class_docstr: FPN structure in NASFPN.
  
  Implementation of paper `NAS-FCOS: Fast Neural Architecture Search for
  Object Detection <https://arxiv.org/abs/1906.04423>`_
  
  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.
      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`.
      conv_cfg (dict): dictionary to construct and config conv layer.
      norm_cfg (dict): dictionary to construct and config norm layer.
      init_cfg (dict or list[dict], optional): Initialization config dict.
          Default: None
docstr: Forward function.
docstr_tok: ["Forward","function","."]
code: def forward(self, inputs):
      """Forward function."""
      feats = [
          adapt_conv(inputs[i + self.start_level])
          for i, adapt_conv in enumerate(self.adapt_convs)
      ]
  
      for i, module_name in enumerate(self.fpn):
          idx_1, idx_2 = int(module_name[1]), int(module_name[2])
          res = self.fpn[module_name](feats[idx_1], feats[idx_2])
          feats.append(res)
  
      ret = []
      for idx, input_idx in zip([9, 8, 7], [1, 2, 3]):  # add P3, P4, P5
          feats1, feats2 = feats[idx], feats[5]
          feats2_resize = F.interpolate(
              feats2,
              size=feats1.size()[2:],
              mode="bilinear",
              align_corners=False,
          )
  
          feats_sum = feats1 + feats2_resize
          ret.append(
              F.interpolate(
                  feats_sum,
                  size=inputs[input_idx].size()[2:],
                  mode="bilinear",
                  align_corners=False,
              )
          )
  
      for submodule in self.extra_downsamples:
          ret.append(submodule(ret[-1]))
  
      return tuple(ret)
  
file_path: mmdetection/mmdet/models/necks/nasfcos_fpn.py
imports: import torch.nn
  import torch.nn.functional
  from mmcv.cnn import ConvModule
  from mmcv.ops.merge_cells import ConcatCell
  from mmengine.model import BaseModule, caffe2_xavier_init
  from mmdet.registry import MODELS
label_desc: Use image node_id 2 for calling the NASFCOS_FPN obj's underlying member method code with example usage: obj.forward(inputs) and returns: tuple