docstr: :param payloads: a list of {
                              "image": RGB channel raw image or pre-processed tensor
                              "transform_info": None means "image" is RGB channel raw image, otherwise "image" is pre-processed tensor and this if the transformation info
                              }
  :return:
  for each payload in payloads:
      preprocessed_payload = __preprocess(payload)
      results = run PersonDetection against preprocessed_payload
      postprocessed_results = __postprocess(results)
  the final results will be a list of {
                                          "bboxes": N x 4 numpy array in format (x0, y0, x1, y1),
                                          "class_ids": N x 1 numpy array contaning class ids for each bounding box, id = 0 means person,
                                          "scores": N x 1 numpy array containing confidence score for each bounding box
                                      }
docstr_tok: [":","param","payloads",":","a","list","of","{","``","image","''",":","RGB","channel","raw","image","or","pre-processed","tensor","``","transform_info","''",":","None","means","``","image","''","is","RGB","channel","raw","image",",","otherwise","``","image","''","is","pre-processed","tensor","and","this","if","the","transformation","info","}",":","return",":","for","each","payload","in","payloads",":","preprocessed_payload","=","__preprocess","(","payload",")","results","=","run","PersonDetection","against","preprocessed_payload","postprocessed_results","=","__postprocess","(","results",")","the","final","results","will","be","a","list","of","{","``","bboxes","''",":","N","x","4","numpy","array","in","format","(","x0",",","y0",",","x1",",","y1",")",",","``","class_ids","''",":","N","x","1","numpy","array","contaning","class","ids","for","each","bounding","box",",","id","=","0","means","person",",","``","scores","''",":","N","x","1","numpy","array","containing","confidence","score","for","each","bounding","box","}"]
code: def process(self, payloads: List = [], **kwargs) -> List[object]:
      """
      :param payloads: a list of {
                                  "image": RGB channel raw image or pre-processed tensor
                                  "transform_info": None means "image" is RGB channel raw image, otherwise "image" is pre-processed tensor and this if the transformation info
                                  }
      :return:
      for each payload in payloads:
          preprocessed_payload = __preprocess(payload)
          results = run PersonDetection against preprocessed_payload
          postprocessed_results = __postprocess(results)
      the final results will be a list of {
                                              "bboxes": N x 4 numpy array in format (x0, y0, x1, y1),
                                              "class_ids": N x 1 numpy array contaning class ids for each bounding box, id = 0 means person,
                                              "scores": N x 1 numpy array containing confidence score for each bounding box
                                          }
      """
      results = []
      for image in payloads:
          if image["transform_info"] is None:
              img, transform_info = self.__preprocess(image["image"])
          else:  # image already preprocessed
              img = image["image"]
              transform_info = image["transform_info"]
  
          if not self.torch:
              self.__model.set_input(
                  "input0",
                  self.__new_nd_array(img, ctx=self.device_ctx),
              )
              self.__model.run()
              class_IDs, nms_ret, bounding_boxs, scores, keypoints = (
                  self.__model.get_output(0),
                  self.__model.get_output(1),
                  self.__model.get_output(2),
                  self.__model.get_output(3),
                  self.__model.get_output(4),
              )
              # dd = class_IDs.asnumpy()
              # print(dd.shape, dd)
              # raise
              np_bbox, np_ids, np_scores, np_kpts = self.__postprocess(
                  bounding_boxs,
                  class_IDs,
                  scores,
                  keypoints,
                  transform_info,
                  nms_ret,
              )
          else:
              # img = np.load('input.npy')
              (
                  class_IDs,
                  idxs,
                  bounding_boxs,
                  scores,
                  keypoints,
              ) = self.__model(torch.as_tensor(img).cuda())
              # dd = bounding_boxs.cpu().numpy()
              # print(dd.shape, dd)
              # raise
              np_bbox, np_ids, np_scores, np_kpts = self.__postprocess(
                  bounding_boxs,
                  class_IDs,
                  scores,
                  keypoints,
                  transform_info,
                  idxs,
              )
  
          results.append(
              {
                  "bboxes": np_bbox,
                  "class_ids": np_ids,
                  "scores": np_scores,
                  "keypoints": np_kpts,
              }
          )
          # self.visualize(np_bbox, np_scores, image["image"], transform_info)
          # print(np_bbox.shape, np_ids.shape, np_scores.shape, np_kpts.shape)
      return results
  
file_path: gluon-cv/scripts/pose/directpose/tvm_evaluation/pose_model.py
imports: import tvm
  from tvm.contrib import graph_runtime
  from typing import List
  import cv2
  import numpy
label_desc: Use image node_id 3 for calling the PoseEstimationInferenceModel obj's underlying member method code with example usage: obj.process(payloads) and returns: results