code: def _get_extra_info(joints_2d):
      # joints_2d expected to be (N * J * 2)
      ws = (
          joints_2d[..., 0].max(dim=1, keepdims=True)[0]
          - joints_2d[..., 0].min(dim=1, keepdims=True)[0]
      )
      hs = (
          joints_2d[..., 1].max(dim=1, keepdims=True)[0]
          - joints_2d[..., 1].min(dim=1, keepdims=True)[0]
      )
      # output shape should be (N, )
      return hs, ws
  
imports: import torch
  import torch.nn
  import numpy
  import pickle
  from lib.utils.misc import init_weights, load_pickle
  from lib.utils.utils import Transform3D, transform_3d, transform_3d_v2
  from lib.models.building_blocks import ResBlock
  from lib.models.scaler import get_scaler
  from lib.models.rotater import get_rotater
  from lib.models.lifter import get_lifter_before, get_lifter_after
  from lib.models.simple_model import LinearModelBefore, LinearModelAfter, Linear
  from lib.utils.utils import rotate, rotate2
label_desc: Use image node_id 4 for calling the PoseModel obj's underlying member method code with example usage: obj._get_extra_info(joints_2d) and returns: hs,  ws