class_docstr: Inspired by: Depth Map Super-Resolution by Deep Multi-Scale Guidance
  http://personal.ie.cuhk.edu.hk/~ccloy/files/eccv_2016_depth.pdf
code: def forward(self, batch):
      rgb_img = batch[dataset_keys.COLOR_IMG] / 255
      low_res_depth = batch[dataset_keys.LOW_RES_DEPTH_IMG]
      min_d = low_res_depth.amin((1, 2, 3), keepdim=True)
      max_d = low_res_depth.amax((1, 2, 3), keepdim=True)
      low_res_depth_norm = (low_res_depth - min_d) / (
          (max_d - min_d) + 1e-8
      )
      low_res_upsampled = F.interpolate(
          low_res_depth_norm, rgb_img.shape[2:], mode="bicubic"
      )
  
      rgb_features = [
          self.rgb_encoder1(rgb_img),
      ]
      for block in self.rgb_encoder_blocks:
          rgb_features.append(block(rgb_features[-1]))
  
      rec = self.depth_decoder1(low_res_depth_norm)
      for i, block in enumerate(self.depth_decoder_blocks):
          rec = torch.cat((rec, rgb_features[-(i + 1)]), 1)
          rec = block(rec)
      rec = torch.cat((rec, rgb_features[0]), 1)
      rec = self.depth_decoder_n(rec)
  
      output = (low_res_upsampled + rec) * (max_d - min_d) + min_d
      return {dataset_keys.PREDICTION_DEPTH_IMG: output}
  
file_path: ARKitScenes/depth_upsampling/models/msg/msg.py
imports: import numpy
  import torch
  import torch.nn
  from torch.nn import functional
  from .blocks import ConvPReLu, DeconvPReLu
  import dataset_keys
label_desc: Use image node_id 2 for calling the MSGNet obj's underlying member method code with example usage: obj.forward(batch) and returns: dict