class_docstr: Progressive Shuffle head takes the largest feature map and progressively upsample it to the original image size.
  Upsampling is done by doing [Conv3x3 + BN + Activation + Conv1x1 + PixelShuffle].
  At each stage number of channels is reduced by a factor given by `reduction_factor`.
code: def forward(self, feature_maps, output_size=None):
      x = self.blocks(feature_maps[self.feature_map_index])
      output = self.final(x)
  
      if self.output_name is not None:
          return {self.output_name: output}
      else:
          return output
  
file_path: pytorch-toolbelt/pytorch_toolbelt/modules/heads/progressive_shuffle.py
imports: from typing import Optional, Callable, Mapping
  import numpy
  from torch import nn
  from pytorch_toolbelt.modules import instantiate_activation_block
  from pytorch_toolbelt.modules.interfaces import AbstractHead, FeatureMapsSpecification
  from pytorch_toolbelt.modules.normalization import NORM_BATCH, instantiate_normalization_block
label_desc: Use image node_id 2 for calling the ProgressiveShuffleHead obj's underlying member method code with example usage: obj.forward(feature_maps, output_size) and returns: dict, output