in meshrcnn/utils/metrics.py [0:0]
def _scale_meshes(pred_meshes, gt_meshes, scale):
if isinstance(scale, float):
# Assume scale is a single scalar to use for both preds and GT
pred_scale = gt_scale = scale
elif isinstance(scale, tuple):
# Rescale preds and GT with different scalars
pred_scale, gt_scale = scale
elif scale.startswith("gt-"):
# Rescale both preds and GT so that the largest edge length of each GT
# mesh is target
target = float(scale[3:])
bbox = gt_meshes.get_bounding_boxes() # (N, 3, 2)
long_edge = (bbox[:, :, 1] - bbox[:, :, 0]).max(dim=1)[0] # (N,)
scale = target / long_edge
if scale.numel() == 1:
scale = scale.expand(len(pred_meshes))
pred_scale, gt_scale = scale, scale
else:
raise ValueError("Invalid scale: %r" % scale)
pred_meshes = pred_meshes.scale_verts(pred_scale)
gt_meshes = gt_meshes.scale_verts(gt_scale)
return pred_meshes, gt_meshes