Beispiel #1
0
  def test_with_no_scores_field(self):
    box_mask_list = np_box_mask_list.BoxMaskList(
        box_data=self.boxes1, mask_data=self.masks1)
    max_output_size = 3
    iou_threshold = 0.5

    with self.assertRaises(ValueError):
      np_box_mask_list_ops.non_max_suppression(
          box_mask_list, max_output_size, iou_threshold)
  def test_with_no_scores_field(self):
    box_mask_list = np_box_mask_list.BoxMaskList(
        box_data=self.boxes1, mask_data=self.masks1)
    max_output_size = 3
    iou_threshold = 0.5

    with self.assertRaises(ValueError):
      np_box_mask_list_ops.non_max_suppression(
          box_mask_list, max_output_size, iou_threshold)
Beispiel #3
0
    def _get_overlaps_and_scores_mask_mode(self, detected_boxes,
                                           detected_scores, detected_masks,
                                           groundtruth_boxes,
                                           groundtruth_masks,
                                           groundtruth_is_group_of_list):
        """Computes overlaps and scores between detected and groudntruth masks.

    Args:
      detected_boxes: A numpy array of shape [N, 4] representing detected box
        coordinates
      detected_scores: A 1-d numpy array of length N representing classification
        score
      detected_masks: A uint8 numpy array of shape [N, height, width]. If not
        None, the scores will be computed based on masks.
      groundtruth_boxes: A numpy array of shape [M, 4] representing ground truth
        box coordinates
      groundtruth_masks: A uint8 numpy array of shape [M, height, width].
      groundtruth_is_group_of_list: A boolean numpy array of length M denoting
        whether a ground truth box has group-of tag. If a groundtruth box is
        group-of box, every detection matching this box is ignored.

    Returns:
      iou: A float numpy array of size [num_detected_boxes, num_gt_boxes]. If
          gt_non_group_of_boxlist.num_boxes() == 0 it will be None.
      ioa: A float numpy array of size [num_detected_boxes, num_gt_boxes]. If
          gt_group_of_boxlist.num_boxes() == 0 it will be None.
      scores: The score of the detected boxlist.
      num_boxes: Number of non-maximum suppressed detected boxes.
    """

        #print('len(detected_boxes)',len(detected_boxes))
        detected_boxlist = np_box_mask_list.BoxMaskList(
            box_data=detected_boxes, mask_data=detected_masks)
        detected_boxlist.add_field('scores', detected_scores)
        #print('detected_boxlist.num_boxes()',detected_boxlist.num_boxes())
        detected_boxlist = np_box_mask_list_ops.non_max_suppression(
            detected_boxlist, self.nms_max_output_boxes,
            self.nms_iou_threshold)
        #print('sfter nms',detected_boxlist.num_boxes())
        gt_non_group_of_boxlist = np_box_mask_list.BoxMaskList(
            box_data=groundtruth_boxes[~groundtruth_is_group_of_list],
            mask_data=groundtruth_masks[~groundtruth_is_group_of_list])
        gt_group_of_boxlist = np_box_mask_list.BoxMaskList(
            box_data=groundtruth_boxes[groundtruth_is_group_of_list],
            mask_data=groundtruth_masks[groundtruth_is_group_of_list])
        iou = np_box_mask_list_ops.iou(detected_boxlist,
                                       gt_non_group_of_boxlist)
        ioa = np.transpose(
            np_box_mask_list_ops.ioa(gt_group_of_boxlist, detected_boxlist))
        scores = detected_boxlist.get_field('scores')
        num_boxes = detected_boxlist.num_boxes()
        return iou, ioa, scores, num_boxes
Beispiel #4
0
 def test_nms_disabled_max_output_size_equals_one(self):
     box_mask_list = np_box_mask_list.BoxMaskList(box_data=self.boxes2,
                                                  mask_data=self.masks2)
     box_mask_list.add_field('scores', np.array([.9, .75, .6], dtype=float))
     max_output_size = 1
     iou_threshold = 1.  # No NMS
     expected_boxes = np.array([[3.0, 4.0, 6.0, 8.0]], dtype=float)
     expected_masks = np.array([[[0, 1, 0], [1, 1, 1], [0, 0, 0]]],
                               dtype=np.uint8)
     nms_box_mask_list = np_box_mask_list_ops.non_max_suppression(
         box_mask_list, max_output_size, iou_threshold)
     self.assertAllClose(nms_box_mask_list.get(), expected_boxes)
     self.assertAllClose(nms_box_mask_list.get_masks(), expected_masks)
 def test_nms_disabled_max_output_size_equals_one(self):
   box_mask_list = np_box_mask_list.BoxMaskList(
       box_data=self.boxes2, mask_data=self.masks2)
   box_mask_list.add_field('scores',
                           np.array([.9, .75, .6], dtype=float))
   max_output_size = 1
   iou_threshold = 1.  # No NMS
   expected_boxes = np.array([[3.0, 4.0, 6.0, 8.0]], dtype=float)
   expected_masks = np.array(
       [[[0, 1, 0], [1, 1, 1], [0, 0, 0]]], dtype=np.uint8)
   nms_box_mask_list = np_box_mask_list_ops.non_max_suppression(
       box_mask_list, max_output_size, iou_threshold)
   self.assertAllClose(nms_box_mask_list.get(), expected_boxes)
   self.assertAllClose(nms_box_mask_list.get_masks(), expected_masks)
  def _get_overlaps_and_scores_mask_mode(
      self, detected_boxes, detected_scores, detected_masks, groundtruth_boxes,
      groundtruth_masks, groundtruth_is_group_of_list):
    """Computes overlaps and scores between detected and groudntruth masks.

    Args:
      detected_boxes: A numpy array of shape [N, 4] representing detected box
          coordinates
      detected_scores: A 1-d numpy array of length N representing classification
          score
      detected_masks: A uint8 numpy array of shape [N, height, width]. If not
          None, the scores will be computed based on masks.
      groundtruth_boxes: A numpy array of shape [M, 4] representing ground truth
          box coordinates
      groundtruth_masks: A uint8 numpy array of shape [M, height, width].
      groundtruth_is_group_of_list: A boolean numpy array of length M denoting
          whether a ground truth box has group-of tag. If a groundtruth box
          is group-of box, every detection matching this box is ignored.

    Returns:
      iou: A float numpy array of size [num_detected_boxes, num_gt_boxes]. If
          gt_non_group_of_boxlist.num_boxes() == 0 it will be None.
      ioa: A float numpy array of size [num_detected_boxes, num_gt_boxes]. If
          gt_group_of_boxlist.num_boxes() == 0 it will be None.
      scores: The score of the detected boxlist.
      num_boxes: Number of non-maximum suppressed detected boxes.
    """
    detected_boxlist = np_box_mask_list.BoxMaskList(
        box_data=detected_boxes, mask_data=detected_masks)
    detected_boxlist.add_field('scores', detected_scores)
    detected_boxlist = np_box_mask_list_ops.non_max_suppression(
        detected_boxlist, self.nms_max_output_boxes, self.nms_iou_threshold)
    gt_non_group_of_boxlist = np_box_mask_list.BoxMaskList(
        box_data=groundtruth_boxes[~groundtruth_is_group_of_list],
        mask_data=groundtruth_masks[~groundtruth_is_group_of_list])
    gt_group_of_boxlist = np_box_mask_list.BoxMaskList(
        box_data=groundtruth_boxes[groundtruth_is_group_of_list],
        mask_data=groundtruth_masks[groundtruth_is_group_of_list])
    iou = np_box_mask_list_ops.iou(detected_boxlist, gt_non_group_of_boxlist)
    ioa = np.transpose(
        np_box_mask_list_ops.ioa(gt_group_of_boxlist, detected_boxlist))
    scores = detected_boxlist.get_field('scores')
    num_boxes = detected_boxlist.num_boxes()
    return iou, ioa, scores, num_boxes