def evaluate(self): for k, v in self.evaluation_accumulators.items(): self.evaluation_accumulators[k] = np.vstack(v) pred_j3ds = self.evaluation_accumulators['pred_j3d'] target_j3ds = self.evaluation_accumulators['target_j3d'] pred_j3ds = torch.from_numpy(pred_j3ds).float() target_j3ds = torch.from_numpy(target_j3ds).float() print(f'Evaluating on {pred_j3ds.shape[0]} number of poses...') pred_pelvis = (pred_j3ds[:, [2], :] + pred_j3ds[:, [3], :]) / 2.0 target_pelvis = (target_j3ds[:, [2], :] + target_j3ds[:, [3], :]) / 2.0 pred_j3ds -= pred_pelvis target_j3ds -= target_pelvis errors = torch.sqrt( ((pred_j3ds - target_j3ds)**2).sum(dim=-1)).mean(dim=-1).cpu().numpy() S1_hat = batch_compute_similarity_transform_torch( pred_j3ds, target_j3ds) errors_pa = torch.sqrt( ((S1_hat - target_j3ds)**2).sum(dim=-1)).mean(dim=-1).cpu().numpy() pred_verts = self.evaluation_accumulators['pred_verts'] target_theta = self.evaluation_accumulators['target_theta'] m2mm = 1000 pve = np.mean( compute_error_verts(target_theta=target_theta, pred_verts=pred_verts)) * m2mm accel = np.mean(compute_accel(pred_j3ds)) * m2mm accel_err = np.mean( compute_error_accel(joints_pred=pred_j3ds, joints_gt=target_j3ds)) * m2mm mpjpe = np.mean(errors) * m2mm pa_mpjpe = np.mean(errors_pa) * m2mm eval_dict = { 'mpjpe': mpjpe, 'pa-mpjpe': pa_mpjpe, 'accel': accel, 'pve': pve, 'accel_err': accel_err } log_str = f'Epoch {self.epoch}, ' log_str += ' '.join( [f'{k.upper()}: {v:.4f},' for k, v in eval_dict.items()]) logger.info(log_str) for k, v in eval_dict.items(): self.writer.add_scalar(f'error/{k}', v, global_step=self.epoch) # return accel_err return pa_mpjpe
def evaluate(self): for k, v in self.evaluation_accumulators.items(): self.evaluation_accumulators[k] = np.vstack(v) pred_j3ds = self.evaluation_accumulators['pred_j3d'] target_j3ds = self.evaluation_accumulators['target_j3d'] pred_j3ds = torch.from_numpy(pred_j3ds).float() target_j3ds = torch.from_numpy(target_j3ds).float() print(f'Evaluating on {pred_j3ds.shape[0]} number of poses...') pred_pelvis = (pred_j3ds[:, [2], :] + pred_j3ds[:, [3], :]) / 2.0 target_pelvis = (target_j3ds[:, [2], :] + target_j3ds[:, [3], :]) / 2.0 pred_j3ds -= pred_pelvis target_j3ds -= target_pelvis # Absolute error (MPJPE) errors = torch.sqrt( ((pred_j3ds - target_j3ds)**2).sum(dim=-1)).mean(dim=-1).cpu().numpy() S1_hat = batch_compute_similarity_transform_torch( pred_j3ds, target_j3ds) errors_pa = torch.sqrt( ((S1_hat - target_j3ds)**2).sum(dim=-1)).mean(dim=-1).cpu().numpy() pred_verts = self.evaluation_accumulators['pred_verts'] target_theta = self.evaluation_accumulators['target_theta'] # pk.dump(target_theta, open("3dpw_thetas.pkl", "wb")) # np.savez("amass_eval_test.npz", pred_j3ds = pred_j3ds.numpy(), target_j3ds = target_j3ds.numpy()) m2mm = 1000 pve = np.mean( compute_error_verts(target_theta=target_theta, pred_verts=pred_verts)) * m2mm accel = np.mean(compute_accel(pred_j3ds)) * m2mm accel_err = np.mean( compute_error_accel(joints_pred=pred_j3ds, joints_gt=target_j3ds)) * m2mm mpjpe = np.mean(errors) * m2mm pa_mpjpe = np.mean(errors_pa) * m2mm eval_dict = { 'mpjpe': mpjpe, 'pa-mpjpe': pa_mpjpe, 'pve': pve, 'accel': accel, 'accel_err': accel_err } log_str = ' '.join( [f'{k.upper()}: {v:.4f},' for k, v in eval_dict.items()]) print(log_str)