def _report_metric(self, res_file, metrics, pck_thr=0.3): """Keypoint evaluation. Args: res_file (str): Json file stored prediction results. metrics (str | list[str]): Metric to be performed. Options: 'PCK', 'NME'. pck_thr (float): PCK threshold, default: 0.3. Returns: dict: Evaluation results for evaluation metric. """ info_str = [] with open(res_file, 'r') as fin: preds = json.load(fin) assert len(preds) == len(self.db) outputs = [] gts = [] masks = [] for pred, item in zip(preds, self.db): outputs.append(np.array(pred['keypoints'])[:, :-1]) gts.append(np.array(item['joints_3d'])[:, :-1]) masks.append((np.array(item['joints_3d_visible'])[:, 0]) > 0) outputs = np.array(outputs) gts = np.array(gts) masks = np.array(masks) normalize_factor = self._get_normalize_factor(gts) if 'PCK' in metrics: _, pck, _ = keypoint_pck_accuracy(outputs, gts, masks, pck_thr, normalize_factor) info_str.append(('PCK', pck)) if 'NME' in metrics: info_str.append( ('NME', keypoint_nme(outputs, gts, masks, normalize_factor))) return info_str
def _report_metric(self, res_file, metrics): """Keypoint evaluation. Args: res_file (str): Json file stored prediction results. metrics (str | list[str]): Metric to be performed. Options: 'NME'. Returns: dict: Evaluation results for evaluation metric. """ info_str = [] with open(res_file, 'r') as fin: preds = json.load(fin) assert len(preds) == len(self.db) outputs = [] gts = [] masks = [] box_sizes = [] for pred, item in zip(preds, self.db): outputs.append(np.array(pred['keypoints'])[:, :-1]) gts.append(np.array(item['joints_3d'])[:, :-1]) masks.append((np.array(item['joints_3d_visible'])[:, 0]) > 0) box_sizes.append(item['box_size']) outputs = np.array(outputs) gts = np.array(gts) masks = np.array(masks) box_sizes = np.array(box_sizes).reshape([-1, 1]) if 'NME' in metrics: normalize_factor = self._get_normalize_factor(box_sizes) info_str.append( ('NME', keypoint_nme(outputs, gts, masks, normalize_factor))) return info_str
def _report_metric(self, res_file, metrics, pck_thr=0.2, pckh_thr=0.7, auc_nor=30): """Keypoint evaluation. Args: res_file (str): Json file stored prediction results. metrics (str | list[str]): Metric to be performed. Options: 'PCK', 'PCKh', 'AUC', 'EPE', 'NME'. pck_thr (float): PCK threshold, default as 0.2. pckh_thr (float): PCKh threshold, default as 0.7. auc_nor (float): AUC normalization factor, default as 30 pixel. Returns: List: Evaluation results for evaluation metric. """ info_str = [] with open(res_file, 'r') as fin: preds = json.load(fin) assert len(preds) == len(self.db) outputs = [] gts = [] masks = [] box_sizes = [] threshold_bbox = [] threshold_head_box = [] for pred, item in zip(preds, self.db): outputs.append(np.array(pred['keypoints'])[:, :-1]) gts.append(np.array(item['joints_3d'])[:, :-1]) masks.append((np.array(item['joints_3d_visible'])[:, 0]) > 0) if 'PCK' in metrics: bbox = np.array(item['bbox']) bbox_thr = np.max(bbox[2:]) threshold_bbox.append(np.array([bbox_thr, bbox_thr])) if 'PCKh' in metrics: head_box_thr = item['head_size'] threshold_head_box.append( np.array([head_box_thr, head_box_thr])) box_sizes.append(item.get('box_size', 1)) outputs = np.array(outputs) gts = np.array(gts) masks = np.array(masks) threshold_bbox = np.array(threshold_bbox) threshold_head_box = np.array(threshold_head_box) box_sizes = np.array(box_sizes).reshape([-1, 1]) if 'PCK' in metrics: _, pck, _ = keypoint_pck_accuracy(outputs, gts, masks, pck_thr, threshold_bbox) info_str.append(('PCK', pck)) if 'PCKh' in metrics: _, pckh, _ = keypoint_pck_accuracy(outputs, gts, masks, pckh_thr, threshold_head_box) info_str.append(('PCKh', pckh)) if 'AUC' in metrics: info_str.append(('AUC', keypoint_auc(outputs, gts, masks, auc_nor))) if 'EPE' in metrics: info_str.append(('EPE', keypoint_epe(outputs, gts, masks))) if 'NME' in metrics: normalize_factor = self._get_normalize_factor(gts=gts, box_sizes=box_sizes) info_str.append( ('NME', keypoint_nme(outputs, gts, masks, normalize_factor))) return info_str