class_docstr: Pixel shuffle decoder used to predict the line heatmap.
  
  Args:
      input_feat_dim: channel size of the input features.
      num_upsample: how many upsamples are performed.
      output_channel: number of output channels.
  Returns:
      the (B, 1, H, W) line heatmap.
class_docstr_tok: ["Pixel","shuffle","decoder","used","to","predict","the","line","heatmap",".","Args",":","input_feat_dim",":","channel","size","of","the","input","features",".","num_upsample",":","how","many","upsamples","are","performed",".","output_channel",":","number","of","output","channels",".","Returns",":","the","(","B",",","1",",","H",",","W",")","line","heatmap","."]
docstr: Get num of channels based on number of upsampling.
docstr_tok: ["Get","num","of","channels","based","on","number","of","upsampling","."]
code: def get_channel_conf(self, num_upsample: int) -> List[int]:
      """Get num of channels based on number of upsampling."""
      if num_upsample == 2:
          return [256, 64, 16]
      return [256, 64, 16, 4]
  
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 PixelShuffleDecoder obj's underlying member method code with example usage: obj.get_channel_conf(num_upsample) and returns: list, list