class_docstr: Inspired by: Multi-Scale Progressive Fusion Learning for Depth Map Super-Resolution
  https://arxiv.org/pdf/2011.11865v1.pdf
  
  variables:
      decoder_channel_output_scales: available scale factors for reducing channels
      in decoder based on encoder input channels.
  params:
      decoder_channel_scale: used to control decoder size
code: def __init__(self, upsample_factor, decoder_channel_scale=2):
      super(MSPF, self).__init__()
      self.encoder = DenseNet121()
      assert (
          decoder_channel_scale in self.decoder_channel_output_scales
      ), f"decoder scale factor not supported {decoder_channel_scale} - supported {self.decoder_channel_output_scales}"
      input_channels = self.encoder.skip_out_channels[::-1]
      output_channels = [
          int(ch / decoder_channel_scale)
          for ch in self.encoder.skip_out_channels[::-1]
      ]
  
      self.decoder = MultiscaleDepthDecoder(
          input_channels, output_channels, upsample_factor
      )
  
file_path: ARKitScenes/depth_upsampling/models/mspf/mspf.py
imports: from torch import nn
  import dataset_keys
  from models.mspf.MultiScaleDepthSR import MultiscaleDepthDecoder
  from models.mspf.densenet import DenseNet121
label_desc: Use image node_id 1 to create a new MSPF object from inherited base classes: nn with example: obj = MSPF(upsample_factor, decoder_channel_scale)