54 data_list (list[dict]) : 행동인식 모델의 입력으로 사용할 원천 데이터(dict type)를 담고있는 리스트
56 keypoints (np.array) : 스켈레톤 좌표(x, y) 및 스코어, shape (17, 3)
57 TODO -> image_features (np.array or Tensor): 영상 특징
58 clip_len (int) : data_list에서 샘플링하는 수량
59 device (str) : inference에 사용할 디바이스
62 pose_heatmap or pose_heatmap_for_action, pose_heatmap_for_pose (Tensor): 스켈레톤 좌표를 사용해서 생성한 이미지
63 shape (1, 17, clip_len, 64, 64) or (1, 17, clip_len_pose=6, 64, 64)
64 TODO -> image_features (Tensor) : 영상특징, shape (1, C, clip_len, 1)
72 for anno
in data_list:
73 kps.append(anno[
'keypoints'])
76 sample[
'keypoint'] = kps[..., :2]
77 sample[
'keypoint_score'] = kps[..., 2]
79 sample = pose_sampling(sample, clip_len=clip_len)
80 sample = pose_compact(sample)
81 sample = pose_resize(sample, scale=(64, 64))
85 sample = make_pose_heatmap(sample)
87 sample[
'pose_heatmap'] = torch.from_numpy(sample[
'pose_heatmap']).to(device).unsqueeze(0)
94 sample_pose = copy.deepcopy(sample)
97 frames = sample_pose[
'keypoint'].shape[1]
98 start = (frames - clip_len_pose)//2
99 end = start+clip_len_pose
100 sample_pose[
'keypoint'] = sample_pose[
'keypoint'][:,start:end, :, : ]
101 sample_pose[
'keypoint_score'] = sample_pose[
'keypoint_score'][:,start:end, : ]
102 sample_pose = pose_compact(sample_pose)
103 sample_pose = pose_resize(sample_pose, scale=(64, 64))
106 sample = make_pose_heatmap(sample)
107 sample_pose = make_pose_heatmap(sample_pose)
108 sample[
'pose_heatmap_for_action'] = torch.from_numpy(sample[
'pose_heatmap']).to(device).unsqueeze(0)
109 sample[
'pose_heatmap_for_pose'] = torch.from_numpy(sample_pose[
'pose_heatmap']).to(device).unsqueeze(0)
113 def run_recognizer(self, data_list, k=60, clip_len=20, use_valid=True, device='cuda:0
'):
116 data_list (list[dict]) : 행동인식 모델의 입력으로 사용할 원천 데이터(dict type)를 담고있는 리스트
118 keypoints (np.array) : 스켈레톤 좌표(x, y) 및 스코어, shape (17, 3)
119 frame_id (int) : 프레임 번호
120 TODO -> image_features (np.array or Tensor): 영상 특징
121 k (int) : 행동인식하는데 사용하는 프레임 구간
122 clip_len (int) : data_list에서 샘플링하는 수량
123 use_valid (bool) : 유효성 검사 사용 유무
124 device (str) : inference에 사용할 디바이스
133 if not utils.check_valid(data_list, k):
137 data_list = utils.insert_dummy_pose(data_list)
143 with torch.no_grad():