class_docstr: FPN-like feature fusion module in PANet.
  
  Args:
      in_channels (int): Number of input channels.
      init_cfg (dict or list[dict], optional): Initialization configs.
class_docstr_tok: ["FPN-like","feature","fusion","module","in","PANet",".","Args",":","in_channels","(","int",")",":","Number","of","input","channels",".","init_cfg","(","dict","or","list","[","dict","]",",","optional",")",":","Initialization","configs","."]
docstr: Args:
      c2, c3, c4, c5 (Tensor): Each has the shape of
          :math:`(N, C_i, H_i, W_i)`.
  
  Returns:
      list[Tensor]: A list of 4 tensors of the same shape as input.
docstr_tok: ["Args",":","c2",",","c3",",","c4",",","c5","(","Tensor",")",":","Each","has","the","shape","of",":","math",":","`","(","N",",","C_i",",","H_i",",","W_i",")","`",".","Returns",":","list","[","Tensor","]",":","A","list","of","4","tensors","of","the","same","shape","as","input","."]
code: def forward(
      self,
      c2: torch.Tensor,
      c3: torch.Tensor,
      c4: torch.Tensor,
      c5: torch.Tensor,
  ) -> List[torch.Tensor]:
      """
      Args:
          c2, c3, c4, c5 (Tensor): Each has the shape of
              :math:`(N, C_i, H_i, W_i)`.
  
      Returns:
          list[Tensor]: A list of 4 tensors of the same shape as input.
      """
      # upsample
      c4 = self.up_add1(self._upsample_add(c5, c4))  # c4 shape
      c3 = self.up_add2(self._upsample_add(c4, c3))
      c2 = self.up_add3(self._upsample_add(c3, c2))
  
      # downsample
      c3 = self.down_add1(self._upsample_add(c3, c2))
      c4 = self.down_add2(self._upsample_add(c4, c3))
      c5 = self.down_add3(self._upsample_add(c5, c4))  # c4 / 2
      return c2, c3, c4, c5
  
file_path: mmocr/mmocr/models/textdet/necks/fpem_ffm.py
imports: from typing import Dict, List, Optional, Tuple, Union
  import torch
  import torch.nn.functional
  from mmengine.model import BaseModule, ModuleList
  from torch import nn
  from mmocr.registry import MODELS
label_desc: Use image node_id 2 for calling the FPEM obj's underlying member method code with example usage: obj.forward(c2, c3, c4, c5) and returns: c2,  c3,  c4,  c5