class_docstr: CrowdPose dataset for bottom-up pose estimation. 
  
  The dataset loads raw features and apply specified transforms
  to return a dict containing the image tensors and other information.
  
  CrowdPose keypoint indexes::
  
      0: 'left_shoulder',
      1: 'right_shoulder',
      2: 'left_elbow',
      3: 'right_elbow',
      4: 'left_wrist',
      5: 'right_wrist',
      6: 'left_hip',
      7: 'right_hip',
      8: 'left_knee',
      9: 'right_knee',
      10: 'left_ankle',
      11: 'right_ankle',
      12: 'top_head',
      13: 'neck'
  
  Args:
      dataset_dir (str): Root path to the dataset.
      anno_path (str): Relative path to the annotation file.
      image_dir (str): Path to a directory where images are held.
          Default: None.
      num_joints (int): keypoint numbers
      transform (composed(operators)): A sequence of data transforms.
      shard (list): [rank, worldsize], the distributed env params
      test_mode (bool): Store True when building test or
          validation dataset. Default: False.
code: def parse_dataset(self):
      self.coco = COCO(self.ann_file)
  
      self.img_ids = self.coco.getImgIds()
      if not self.test_mode:
          self.img_ids = [
              img_id
              for img_id in self.img_ids
              if len(self.coco.getAnnIds(imgIds=img_id, iscrowd=None))
              > 0
          ]
      blocknum = int(len(self.img_ids) / self.shard[1])
      self.img_ids = self.img_ids[
          (blocknum * self.shard[0]) : (blocknum * (self.shard[0] + 1))
      ]
      self.num_images = len(self.img_ids)
      self.id2name, self.name2id = self._get_mapping_id_name(
          self.coco.imgs
      )
  
      self.dataset_name = "crowdpose"
      print("=> num_images: {}".format(self.num_images))
  
imports: import os
  import cv2
  import numpy
  import json
  import copy
  import pycocotools
  from pycocotools.coco import COCO
  from .dataset import DetDataset
  from ppdet.core.workspace import register, serializable
label_desc: Use image node_id 2 for calling the KeypointBottomUpCrowdPoseDataset obj's underlying member method code with example usage: obj.parse_dataset() without return types