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)
      init_cfg (dict or list[dict], optional): Initialization config dict.
          Default: None
class_docstr_tok: ["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",")","init_cfg","(","dict","or","list","[","dict","]",",","optional",")",":","Initialization","config","dict",".","Default",":","None"]
code: def __init__(
      self,
      rfp_steps,
      rfp_backbone,
      aspp_out_channels,
      aspp_dilations=(1, 3, 6, 1),
      init_cfg=None,
      **kwargs,
  ):
      assert init_cfg is None, (
          "To prevent abnormal initialization "
          "behavior, init_cfg is not allowed to be set"
      )
      super().__init__(init_cfg=init_cfg, **kwargs)
      self.rfp_steps = rfp_steps
      # Be careful! Pretrained weights cannot be loaded when use
      # nn.ModuleList
      self.rfp_modules = ModuleList()
      for rfp_idx in range(1, rfp_steps):
          rfp_module = MODELS.build(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: mmdetection/mmdet/models/necks/rfp.py
imports: import torch
  import torch.nn
  import torch.nn.functional
  from mmengine.model import BaseModule, ModuleList, constant_init, xavier_init
  from mmdet.registry import MODELS
  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, init_cfg)