class_docstr: Feature pyramid network decoder with summation between intermediate layers:
  
      Input
      feature_map[0] -> bottleneck[0](feature_map[0]) + upsample(fpn[1]) -> fpn[0]
      feature_map[1] -> bottleneck[1](feature_map[1]) + upsample(fpn[2]) -> fpn[1]
      feature_map[2] -> bottleneck[2](feature_map[2]) + upsample(fpn[3]) -> fpn[2]
      ...
      feature_map[n-1] -> bottleneck[n-1](feature_map[n-1]) + upsample(context) -> fpn[n]
      feature_map[n] -> context_block(feature_map[n]) -> context
class_docstr_tok: ["Feature","pyramid","network","decoder","with","summation","between","intermediate","layers",":","Input","feature_map","[","0","]","-",">","bottleneck","[","0","]","(","feature_map","[","0","]",")","+","upsample","(","fpn","[","1","]",")","-",">","fpn","[","0","]","feature_map","[","1","]","-",">","bottleneck","[","1","]","(","feature_map","[","1","]",")","+","upsample","(","fpn","[","2","]",")","-",">","fpn","[","1","]","feature_map","[","2","]","-",">","bottleneck","[","2","]","(","feature_map","[","2","]",")","+","upsample","(","fpn","[","3","]",")","-",">","fpn","[","2","]","...","feature_map","[","n-1","]","-",">","bottleneck","[","n-1","]","(","feature_map","[","n-1","]",")","+","upsample","(","context",")","-",">","fpn","[","n","]","feature_map","[","n","]","-",">","context_block","(","feature_map","[","n","]",")","-",">","context"]
code: def forward(self, feature_maps: List[Tensor]) -> List[Tensor]:
      # Lateral connections
      lateral_maps = [
          lateral(feature_map)
          for feature_map, lateral in zip(feature_maps, self.lateral)
      ]
  
      last_feature_map = lateral_maps[-1]
      remaining_feature_maps = lateral_maps[:-1][::-1]
  
      outputs = [last_feature_map]
  
      for feature_map, upsample, output_block in zip(
          remaining_feature_maps, self.upsamples, self.outputs
      ):
          upsampled = upsample(
              outputs[-1], output_size=feature_map.shape[-2:]
          )
  
          fpn = output_block(feature_map + upsampled)
          outputs.append(fpn)
  
      # Returns list of tensors in same order as input (fine-to-coarse)
      fine_to_coarse = outputs[::-1]
      return fine_to_coarse
  
file_path: pytorch-toolbelt/pytorch_toolbelt/modules/decoders/fpn.py
imports: import inspect
  from typing import List, Union, Callable, Type
  import torch
  from torch import Tensor, nn
  from pytorch_toolbelt.modules.interfaces import AbstractDecoder, FeatureMapsSpecification
  from ..None import conv1x1, conv3x3, instantiate_upsample_block, UpsampleLayerType, AbstractResizeLayer
label_desc: Use image node_id 3 for calling the FPNDecoder obj's underlying member method code with example usage: obj.forward(feature_maps) and returns: fine_to_coarse