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","."]
code: def __init__(
      self,
      input_feat_dim: int = 128,
      num_upsample: int = 2,
      output_channel: int = 2,
  ) -> None:
      super().__init__()
      # Get channel parameters
      self.channel_conf = self.get_channel_conf(num_upsample)
  
      # Define the pixel shuffle
      self.pixshuffle = nn.PixelShuffle(2)
  
      # Process the feature
      conv_block_lst = []
      # The input block
      conv_block_lst.append(
          nn.Sequential(
              nn.Conv2d(
                  input_feat_dim,
                  self.channel_conf[0],
                  kernel_size=3,
                  stride=1,
                  padding=1,
              ),
              nn.BatchNorm2d(self.channel_conf[0]),
              nn.ReLU(inplace=True),
          )
      )
  
      # Intermediate block
      for channel in self.channel_conf[1:-1]:
          conv_block_lst.append(
              nn.Sequential(
                  nn.Conv2d(
                      channel,
                      channel,
                      kernel_size=3,
                      stride=1,
                      padding=1,
                  ),
                  nn.BatchNorm2d(channel),
                  nn.ReLU(inplace=True),
              )
          )
  
      # Output block
      conv_block_lst.append(
          nn.Sequential(
              nn.Conv2d(
                  self.channel_conf[-1],
                  output_channel,
                  kernel_size=1,
                  stride=1,
                  padding=0,
              )
          )
      )
      self.conv_block_lst = nn.ModuleList(conv_block_lst)
  
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 1 to create a new PixelShuffleDecoder object from inherited base classes: Module with example: obj = PixelShuffleDecoder(input_feat_dim, num_upsample, output_channel)