in phosa/pose_optimization.py [0:0]
def compute_offscreen_loss(self, verts):
"""
Computes loss for offscreen penalty. This is used to prevent the degenerate
solution of moving the object offscreen to minimize the chamfer loss.
"""
# On-screen means xy between [-1, 1] and far > depth > 0
proj = nr.projection(
verts,
self.renderer.K,
self.renderer.R,
self.renderer.t,
self.renderer.dist_coeffs,
orig_size=1,
)
xy, z = proj[:, :, :2], proj[:, :, 2:]
zeros = torch.zeros_like(z)
lower_right = torch.max(xy - 1, zeros).sum(dim=(1, 2)) # Amount greater than 1
upper_left = torch.max(-1 - xy, zeros).sum(dim=(1, 2)) # Amount less than -1
behind = torch.max(-z, zeros).sum(dim=(1, 2))
too_far = torch.max(z - self.renderer.far, zeros).sum(dim=(1, 2))
return lower_right + upper_left + behind + too_far