code: def forward(
      self, feature_maps: List[torch.Tensor]
  ) -> List[torch.Tensor]:
      x = feature_maps[-1]
      outputs = []
      num_feature_maps = len(feature_maps)
      for index, (upsample_block, decoder_block) in enumerate(
          zip(self.upsamples, self.blocks)
      ):
          encoder_input = feature_maps[num_feature_maps - index - 2]
  
          x = upsample_block(x, output_size=encoder_input.size()[2:])
  
          x = torch.cat([x, encoder_input], dim=1)
          x = decoder_block(x)
          outputs.append(x)
  
      # Returns list of tensors in same order as input (fine-to-coarse)
      return outputs[::-1]
  
file_path: pytorch-toolbelt/pytorch_toolbelt/modules/decoders/unet.py
imports: from typing import List, Union, Type, Tuple, Mapping
  import torch
  import logging
  from torch import nn
  from pytorch_toolbelt.modules.unet import UnetBlock, UnetResidualBlock
  from pytorch_toolbelt.modules.interfaces import AbstractDecoder, FeatureMapsSpecification
  from pytorch_toolbelt.modules.upsample import AbstractResizeLayer, UpsampleLayerType, instantiate_upsample_block, DeconvolutionUpsample2d
  from pytorch_toolbelt.modules.normalization import NORM_BATCH, instantiate_normalization_block
  from pytorch_toolbelt.modules.activations import ACT_RELU
label_desc: Use image node_id 4 for calling the UNetDecoder obj's underlying member method code with example usage: obj.forward(feature_maps) and returns: outputs