Guest User

Untitled

a guest
Jun 24th, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.53 KB | None | 0 0
  1. def _get_best_yaw_obj_from_pos(self, obj_id, grid_pos, height=1.0, use_iou=True):
  2. obj = self.objects[obj_id]
  3. obj_fine_class = obj['fine_class']
  4.  
  5. cx, cy = self.env.house.to_coor(grid_pos[0], grid_pos[1])
  6. self.env.cam.pos.x = cx
  7. self.env.cam.pos.y = height
  8. self.env.cam.pos.z = cy
  9.  
  10. best_yaw, best_coverage, best_mask = None, 0, None
  11. for yaw in self.angles:
  12. self.env.cam.yaw = yaw
  13. self.env.cam.updateDirection()
  14.  
  15. seg = self.env.render(mode='semantic')
  16. c = self.semantic_classes[obj_fine_class.lower()]
  17. mask = np.all(seg == c, axis=2)
  18. if use_iou:
  19. coverage = self._compute_iou(mask)
  20. else:
  21. coverage = np.sum(mask) / (seg.shape[0] * seg.shape[1])
  22.  
  23. if best_yaw == None:
  24. best_yaw = yaw
  25. best_coverage = coverage
  26. best_mask = mask
  27. else:
  28. if coverage > best_coverage:
  29. best_yaw = yaw
  30. best_coverage = coverage
  31. best_mask = mask
  32.  
  33. return best_yaw, best_coverage, best_mask
  34.  
  35. def _compute_iou(self, cand_mask, ref_mask=None):
  36. """
  37. Given (h, w) cand_mask, we wanna our ref_mask to be in the center of image,
  38. with [0.25h:0.75h, 0.25w:0.75w] occupied.
  39. """
  40. if ref_mask is None:
  41. h, w = cand_mask.shape[0], cand_mask.shape[1]
  42. ref_mask = np.zeros((h,w), np.int8)
  43. ref_mask[int(0.25*h):int(0.85*h), int(0.25*w):int(0.75*w)] = 1
  44. inter = (cand_mask > 0) & (ref_mask > 0)
  45. union = (cand_mask > 0) | (ref_mask > 0)
  46. iou = inter.sum() / (union.sum() + 1e-5)
  47. return iou
Add Comment
Please, Sign In to add comment