class_docstr: RFP (Recursive Feature Pyramid)
  
  This is an implementation of RFP in `DetectoRS
  <https://arxiv.org/pdf/2006.02334.pdf>`_. Different from standard FPN, the
  input of RFP should be multi level features along with origin input image
  of backbone.
  
  Args:
      rfp_steps (int): Number of unrolled steps of RFP.
      rfp_backbone (dict): Configuration of the backbone for RFP.
      aspp_out_channels (int): Number of output channels of ASPP module.
      aspp_dilations (tuple[int]): Dilation rates of four branches.
          Default: (1, 3, 6, 1)
code: def __init__(
      self,
      rfp_steps,
      rfp_backbone,
      aspp_out_channels,
      aspp_dilations=(1, 3, 6, 1),
      **kwargs,
  ):
      super().__init__(**kwargs)
      self.rfp_steps = rfp_steps
      self.rfp_modules = nn.ModuleList()
      for rfp_idx in range(1, rfp_steps):
          rfp_module = build_backbone(rfp_backbone)
          self.rfp_modules.append(rfp_module)
      self.rfp_aspp = ASPP(
          self.out_channels, aspp_out_channels, aspp_dilations
      )
      self.rfp_weight = nn.Conv2d(
          self.out_channels,
          1,
          kernel_size=1,
          stride=1,
          padding=0,
          bias=True,
      )
  
file_path: insightface/detection/scrfd/mmdet/models/necks/rfp.py
imports: import torch
  import torch.nn
  import torch.nn.functional
  from mmcv.cnn import constant_init, kaiming_init, xavier_init
  from ..builder import NECKS, build_backbone
  from .fpn import FPN
label_desc: Use image node_id 1 to create a new RFP object from inherited base classes: FPN with example: obj = RFP(rfp_steps, rfp_backbone, aspp_out_channels, aspp_dilations)