code: def forward(self, x: List[torch.Tensor]) -> torch.Tensor:
      if len(x) != len(self.out_branches):
          raise AssertionError
      # Conv1x1 to get the same number of channels
      _x: List[torch.Tensor] = [
          branch(t) for branch, t in zip(self.in_branches, x)
      ]
      out: List[torch.Tensor] = [_x[-1]]
      for t in _x[:-1][::-1]:
          out.append(self.upsample(out[-1]) + t)
  
      # Conv and final upsampling
      out = [
          branch(t) for branch, t in zip(self.out_branches, out[::-1])
      ]
  
      return torch.cat(out, dim=1)
  
imports: from typing import Any, Callable, Dict, List, Optional
  import numpy
  import torch
  from torch import nn
  from torch.nn import functional
  from torchvision.models import resnet34, resnet50
  from torchvision.models._utils import IntermediateLayerGetter
  from torchvision.ops.deform_conv import DeformConv2d
  from doctr.file_utils import CLASS_NAME
  from ...classification import mobilenet_v3_large
  from ...utils import _bf16_to_float32, load_pretrained_params
  from .base import DBPostProcessor, _DBNet
label_desc: Use image node_id 2 for calling the FeaturePyramidNetwork obj's underlying member method code with example usage: obj.forward(x) and returns: torch