in empose/eval/metrics.py [0:0]
def get_metrics(self, eucl_idxs_select=True, angle_idxs_select=True):
"""
Compute the aggregated metrics that we want to report.
:return: The computed metrics in a dictionary.
"""
# Mean and median euclidean distance over all batches and joints.
if len(self.eucl_dists) > 0:
eucl_dists = np.concatenate(self.eucl_dists, axis=0)
eucl_dists_pa = np.concatenate(self.eucl_dists_pa, axis=0)
eucl_idxs = self.eucl_idxs if eucl_idxs_select else list(range(eucl_dists.shape[1]))
eucl_mean_per_joint = np.mean(eucl_dists, axis=0)[eucl_idxs]
eucl_mean_all = np.mean(eucl_mean_per_joint)
eucl_std_all = np.std(eucl_dists[:, eucl_idxs])
eucl_mean_pa_per_joint = np.mean(eucl_dists_pa, axis=0)[eucl_idxs]
eucl_mean_pa_all = np.mean(eucl_mean_pa_per_joint)
eucl_std_pa_all = np.std(eucl_dists_pa[:, eucl_idxs])
else:
eucl_mean_all = 0.0
eucl_std_all = 0.0
eucl_mean_pa_all = 0.0
eucl_std_pa_all = 0.0
# Mean and median angular difference.
if len(self.angle_diffs) > 0:
angle_diffs = np.concatenate(self.angle_diffs, axis=0)
angle_idxs = self.angle_idxs if angle_idxs_select else list(range(angle_diffs.shape[1]))
angle_mean_per_joint = np.mean(angle_diffs, axis=0)[angle_idxs]
angle_mean_all = np.mean(angle_mean_per_joint)
angle_std_all = np.std(angle_diffs[:, angle_idxs])
else:
angle_mean_all = 0.0
angle_std_all = 0.0
metrics = {'MPJPE [mm]': eucl_mean_all * 1000.0,
'MPJPE STD': eucl_std_all * 1000.0,
'PA-MPJPE [mm]': eucl_mean_pa_all * 1000.0,
'PA-MPJPE STD': eucl_std_pa_all * 1000.0,
'MPJAE [deg]': angle_mean_all,
'MPJAE STD': angle_std_all}
return metrics