Spaces:
Running
on
Zero
Running
on
Zero
| import os, sys | |
| sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..')) | |
| import numpy as np | |
| from copy import deepcopy | |
| from metrics.iou import sampling_iou | |
| from objects.motions import transform_all_parts | |
| from objects.dict_utils import get_bbox_vertices | |
| ''' | |
| This file computes the Average Overlap Ratio (AOR) metric\n | |
| ''' | |
| def AOR(tgt, num_states=10, transform_use_plucker=False): | |
| tree = tgt["diffuse_tree"] | |
| states = np.linspace(0, 1, num_states) | |
| original_bbox_vertices = np.array([get_bbox_vertices(tgt, i) for i in range(len(tgt["diffuse_tree"]))], dtype=np.float32) | |
| ious = [] | |
| for state_idx, state in enumerate(states): | |
| ious_per_state = [] | |
| bbox_vertices = deepcopy(original_bbox_vertices) | |
| part_trans = transform_all_parts(bbox_vertices, tgt, state, transform_use_plucker) | |
| for node in tree: | |
| children = node['children'] | |
| num_children = len(children) | |
| if num_children < 2: | |
| continue | |
| for i in range(num_children-1): | |
| for j in range(i+1, num_children): | |
| child_id = children[i] | |
| sibling_id = children[j] | |
| bbox_v_0 = deepcopy(bbox_vertices[child_id]) | |
| bbox_v_1 = deepcopy(bbox_vertices[sibling_id]) | |
| iou = sampling_iou(bbox_v_0, bbox_v_1, part_trans[child_id], part_trans[sibling_id], num_samples=10000) | |
| if np.isnan(iou): | |
| continue | |
| ious_per_state.append(iou) | |
| if len(ious_per_state) > 0: | |
| ious.append(np.mean(ious_per_state)) | |
| if len(ious) == 0: | |
| return -1 | |
| return float(np.mean(ious)) | |