class_docstr: Full network for SOLD².
  
  Args:
      model_cfg: the configuration as a Dict.
  Returns:
      a Dict with the following values:
          junctions: heatmap of junctions.
          heatmap: line heatmap.
          descriptors: semi-dense descriptors.
class_docstr_tok: ["Full","network","for","SOLD\u00b2",".","Args",":","model_cfg",":","the","configuration","as","a","Dict",".","Returns",":","a","Dict","with","the","following","values",":","junctions",":","heatmap","of","junctions",".","heatmap",":","line","heatmap",".","descriptors",":","semi-dense","descriptors","."]
code: def forward(self, input_images: Tensor) -> Dict[str, Tensor]:
      # The backbone
      features = self.backbone_net(input_images)
  
      # junction decoder
      junctions = self.junction_decoder(features)
  
      # heatmap decoder
      heatmaps = self.heatmap_decoder(features)
  
      outputs = {"junctions": junctions, "heatmap": heatmaps}
  
      # Descriptor decoder
      if "use_descriptor" in self.cfg:
          outputs["descriptors"] = self.descriptor_decoder(features)
  
      return outputs
  
imports: from typing import Any, Dict, List, NamedTuple, Optional, Tuple, Type, Union
  import torch
  import torch.nn.functional
  from torch import nn
  from torch.nn.functional import pixel_shuffle, softmax
  from kornia.core import Module, Tensor
label_desc: Use image node_id 2 for calling the SOLD2Net obj's underlying member method code with example usage: obj.forward(input_images) and returns: outputs