9 def __init__(self, deploy_cfg, model_cfg, backend_model, device='cuda', batch_size=1):
11 mmpose의 Deploy(TensorRT) 모델을 구동시키기 위한 클래스
13 deploy_cfg (str): deploy config 파일 경로
14 model_cfg (str): 모델이 정의된 config 파일 경로
15 backend_model (list[str]): TensorRT 모델 저장 경로
16 device (str): 모델을 구동할 디바이스
17 batch_size (int): 모델의 입력 배치 사이즈
44 def make_src(self, image, image_id, bboxes=None):
46 박스영역을 잘라내고 잘라낸 이미지에 대한 정보를 생성하는 기능
48 image (np.array): RGB 이미지
49 image_id (int): 이미지 아이디
50 bboxes (np.array): 객체 영역의 박스
52 crop_images (list[np.array]): 박스 영역을 자른 이미지
53 bboxes (np.array): crop_images의 박스
54 track_ids (list[float]): 추적 아이디
55 image_ids (list[int]): 이미지 아이디 리스트
58 h, w = image.shape[:2]
59 return [image], np.array([[0, 0, w, h]]), np.array([0]), [image_id]
61 num_person, dim = bboxes.shape
62 box_index = 1
if dim == 6
else 0
63 track_ids = bboxes[:, 0]
if dim == 6
else np.arange(num_person)
64 image_ids = [image_id]*num_person
65 crop_images = crop_image(image, bboxes[:, box_index:box_index+4])
67 return crop_images, bboxes[:, box_index:box_index+4], track_ids, image_ids
90 image (np.array): RGB 이미지
91 bboxes (np.array): 객체 영역의 박스
95 is_batch = isinstance(images, (list, tuple))
98 images = [images]
if not is_batch
else images
102 bboxes = [
None]*len(images)
105 crop_images, bbox_list, track_ids, image_ids = [], [], [], []
106 for image_id, (image, bbox)
in enumerate(zip(images, bboxes)):
107 crops, bbs, tids, imids = self.
make_src(image, image_id, bbox)
108 crop_images.extend(crops)
109 bbox_list.append(bbs)
110 track_ids.append(tids)
111 image_ids.extend(imids)
113 bbox_list = np.vstack(bbox_list)
114 track_ids = np.hstack(track_ids)
118 with torch.no_grad():
121 for image
in crop_images:
130 inference_result = self.
model.test_step(processed_input)
133 for item
in inference_result:
141 for res, bbox, track_id, img_id
in zip(results, bbox_list, track_ids, image_ids):
142 keypoints = res.pred_instances.keypoints + bbox[:2]
143 keypoint_scores = np.expand_dims(res.pred_instances.keypoint_scores, axis=-1)
144 keypoints = np.dstack((keypoints, keypoint_scores))
147 if keypoints.ndim == 3:
148 keypoints = keypoints[0]
151 if pre_img_id != img_id:
153 pose_results.append([])
156 data = {
'track_id': track_id,
'bbox': bbox,
'keypoints': keypoints}
157 pose_results[-1].append(data)
163 if len(pose_results) == 0:
165 return pose_results[0]