hugoycj
Initial commit
3d3e4e9
raw
history blame contribute delete
736 Bytes
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the license found in the
# LICENSE file in the root directory of this source tree.
import random
import numpy as np
import torch
def compute_ARE(rotation1, rotation2):
if isinstance(rotation1, torch.Tensor):
rotation1 = rotation1.cpu().detach().numpy()
if isinstance(rotation2, torch.Tensor):
rotation2 = rotation2.cpu().detach().numpy()
R_rel = np.einsum("Bij,Bjk ->Bik", rotation1.transpose(0, 2, 1), rotation2)
t = (np.trace(R_rel, axis1=1, axis2=2) - 1) / 2
theta = np.arccos(np.clip(t, -1, 1))
error = theta * 180 / np.pi
return np.minimum(error, np.abs(180 - error))