docstr: Head for HigherHRNet network
  
  Args:
      num_joints (int): number of keypoints
      hrloss (object): HrHRNetLoss instance
      swahr (bool): whether to use swahr
      width (int): hrnet channel width
docstr_tok: ["Head","for","HigherHRNet","network","Args",":","num_joints","(","int",")",":","number","of","keypoints","hrloss","(","object",")",":","HrHRNetLoss","instance","swahr","(","bool",")",":","whether","to","use","swahr","width","(","int",")",":","hrnet","channel","width"]
code: def __init__(
      self, num_joints, loss="HrHRNetLoss", swahr=False, width=32
  ):
      """
      Head for HigherHRNet network
  
      Args:
          num_joints (int): number of keypoints
          hrloss (object): HrHRNetLoss instance
          swahr (bool): whether to use swahr
          width (int): hrnet channel width
      """
      super(HrHRNetHead, self).__init__()
      self.loss = loss
  
      self.num_joints = num_joints
      num_featout1 = num_joints * 2
      num_featout2 = num_joints
      self.swahr = swahr
      self.conv1 = L.Conv2d(width, num_featout1, 1, 1, 0, bias=True)
      self.conv2 = L.Conv2d(width, num_featout2, 1, 1, 0, bias=True)
      self.deconv = nn.Sequential(
          L.ConvTranspose2d(
              num_featout1 + width, width, 4, 2, 1, 0, bias=False
          ),
          L.BatchNorm2d(width),
          L.ReLU(),
      )
      self.blocks = nn.Sequential(
          *(
              BasicBlock(
                  num_channels=width,
                  num_filters=width,
                  has_se=False,
                  freeze_norm=False,
                  name="HrHRNetHead_{}".format(i),
              )
              for i in range(4)
          )
      )
  
      self.interpolate = L.Upsample(2, mode="bilinear")
      self.concat = L.Concat(dim=1)
      if swahr:
          self.scalelayer0 = nn.Sequential(
              L.Conv2d(width, num_joints, 1, 1, 0, bias=True),
              L.BatchNorm2d(num_joints),
              L.ReLU(),
              L.Conv2d(
                  num_joints,
                  num_joints,
                  9,
                  1,
                  4,
                  groups=num_joints,
                  bias=True,
              ),
          )
          self.scalelayer1 = nn.Sequential(
              L.Conv2d(width, num_joints, 1, 1, 0, bias=True),
              L.BatchNorm2d(num_joints),
              L.ReLU(),
              L.Conv2d(
                  num_joints,
                  num_joints,
                  9,
                  1,
                  4,
                  groups=num_joints,
                  bias=True,
              ),
          )
  
file_path: PaddleDetection/ppdet/modeling/heads/keypoint_hrhrnet_head.py
imports: import paddle
  import paddle.nn
  from ppdet.core.workspace import register
  from ..None import layers
  from ..backbones.hrnet import BasicBlock
label_desc: Use image node_id 1 to create a new HrHRNetHead object from inherited base classes: nn with example: obj = HrHRNetHead(num_joints, loss, swahr, width)