Beispiel #1
0
def build(region_similarity_calculator_config):
  """Builds region similarity calculator based on the configuration.

  Builds one of [IouSimilarity, IoaSimilarity, NegSqDistSimilarity] objects. See
  core/region_similarity_calculator.proto for details.

  Args:
    region_similarity_calculator_config: RegionSimilarityCalculator
      configuration proto.

  Returns:
    region_similarity_calculator: RegionSimilarityCalculator object.

  Raises:
    ValueError: On unknown region similarity calculator.
  """

  if not isinstance(
      region_similarity_calculator_config,
      region_similarity_calculator_pb2.RegionSimilarityCalculator):
    raise ValueError(
        'region_similarity_calculator_config not of type '
        'region_similarity_calculator_pb2.RegionsSimilarityCalculator')

  similarity_calculator = region_similarity_calculator_config.WhichOneof(
      'region_similarity')
  if similarity_calculator == 'iou_similarity':
    return region_similarity_calculator.IouSimilarity()
  if similarity_calculator == 'ioa_similarity':
    return region_similarity_calculator.IoaSimilarity()
  if similarity_calculator == 'neg_sq_dist_similarity':
    return region_similarity_calculator.NegSqDistSimilarity()

  raise ValueError('Unknown region similarity calculator.')
def build(region_similarity_calculator_config):
    """Builds region similarity calculator based on the configuration.

  Builds one of [IouSimilarity, IoaSimilarity, NegSqDistSimilarity] objects. See
  core/region_similarity_calculator.proto for details.

  Args:
    region_similarity_calculator_config: RegionSimilarityCalculator
      configuration proto.

  Returns:
    region_similarity_calculator: RegionSimilarityCalculator object.

  Raises:
    ValueError: On unknown region similarity calculator.
  """

    if not isinstance(
            region_similarity_calculator_config,
            region_similarity_calculator_pb2.RegionSimilarityCalculator):
        raise ValueError(
            'region_similarity_calculator_config not of type '
            'region_similarity_calculator_pb2.RegionsSimilarityCalculator')

    similarity_calculator = region_similarity_calculator_config.WhichOneof(
        'region_similarity')
    if similarity_calculator == 'iou_similarity':
        return region_similarity_calculator.IouSimilarity()
    if similarity_calculator == 'ioa_similarity':
        return region_similarity_calculator.IoaSimilarity()
    if similarity_calculator == 'ioa_similarity_inversed':
        return region_similarity_calculator.IoaSimilarityInversed()
    if similarity_calculator == 'ioa_similarity_combined':
        return region_similarity_calculator.IoaSimilarityCombined(
            region_similarity_calculator_config.ioa_similarity_combined.
            anchor_related_weight)
    if similarity_calculator == 'neg_sq_dist_similarity':
        return region_similarity_calculator.NegSqDistSimilarity()
    if similarity_calculator == 'thresholded_iou_similarity':
        return region_similarity_calculator.ThresholdedIouSimilarity(
            region_similarity_calculator_config.thresholded_iou_similarity.
            iou_threshold)
    if similarity_calculator == 'ioa_weighted_neg_sq_dist_similarity':
        return region_similarity_calculator.IoaWeightedNegSqDistSimilarity()
    if similarity_calculator == 'ioa_weighted_neg_sq_center_dist_similarity':
        return region_similarity_calculator.IoaWeightedNegSqCenterDistSimilarity(
        )
    if similarity_calculator == 'relative_distance_similarity':
        return region_similarity_calculator.RelativeDistanceSimilarity(
            region_similarity_calculator_config.relative_distance_similarity.
            positive_threshold, region_similarity_calculator_config.
            relative_distance_similarity.negative_threshold)

    raise ValueError('Unknown region similarity calculator.')
    def __init__(self,
                 similarity_calc,
                 matcher,
                 box_coder,
                 positive_class_weight=1.0,
                 negative_class_weight=1.0,
                 unmatched_cls_target=None):
        """Construct Multibox Target Assigner.

    Args:
      similarity_calc: a RegionSimilarityCalculator
      matcher: an object_detection.core.Matcher used to match groundtruth to
        anchors.
      box_coder: an object_detection.core.BoxCoder used to encode matching
        groundtruth boxes with respect to anchors.
      positive_class_weight: classification weight to be associated to positive
        anchors (default: 1.0)
      negative_class_weight: classification weight to be associated to negative
        anchors (default: 1.0)
      unmatched_cls_target: a float32 tensor with shape [d_1, d_2, ..., d_k]
        which is consistent with the classification target for each
        anchor (and can be empty for scalar targets).  This shape must thus be
        compatible with the groundtruth labels that are passed to the "assign"
        function (which have shape [num_gt_boxes, d_1, d_2, ..., d_k]).
        If set to None, unmatched_cls_target is set to be [0] for each anchor.

    Raises:
      ValueError: if similarity_calc is not a RegionSimilarityCalculator or
        if matcher is not a Matcher or if box_coder is not a BoxCoder
    """
        if not isinstance(similarity_calc,
                          sim_calc.RegionSimilarityCalculator):
            raise ValueError(
                'similarity_calc must be a RegionSimilarityCalculator')
        if not isinstance(matcher, mat.Matcher):
            raise ValueError('matcher must be a Matcher')
        if not isinstance(box_coder, bcoder.BoxCoder):
            raise ValueError('box_coder must be a BoxCoder')
        self._similarity_calc = similarity_calc
        self._similarity_calc_ioa = sim_calc.IoaSimilarity()
        self._matcher = matcher
        self._box_coder = box_coder
        self._positive_class_weight = positive_class_weight
        self._negative_class_weight = negative_class_weight
        if unmatched_cls_target is None:
            self._unmatched_cls_target = tf.constant([0], tf.float32)
        else:
            self._unmatched_cls_target = unmatched_cls_target
        self._unmatched_conf_target = tf.constant([0], tf.float32)
 def graph_fn():
     corners1 = tf.constant([[4.0, 3.0, 7.0, 5.0],
                             [5.0, 6.0, 10.0, 7.0]])
     corners2 = tf.constant([[3.0, 4.0, 6.0, 8.0],
                             [14.0, 14.0, 15.0, 15.0],
                             [0.0, 0.0, 20.0, 20.0]])
     boxes1 = box_list.BoxList(corners1)
     boxes2 = box_list.BoxList(corners2)
     ioa_similarity_calculator = region_similarity_calculator.IoaSimilarity(
     )
     ioa_similarity_1 = ioa_similarity_calculator.compare(
         boxes1, boxes2)
     ioa_similarity_2 = ioa_similarity_calculator.compare(
         boxes2, boxes1)
     return ioa_similarity_1, ioa_similarity_2
 def test_get_correct_pairwise_similarity_based_on_ioa(self):
     corners1 = tf.constant([[4.0, 3.0, 7.0, 5.0], [5.0, 6.0, 10.0, 7.0]])
     corners2 = tf.constant([[3.0, 4.0, 6.0, 8.0], [14.0, 14.0, 15.0, 15.0],
                             [0.0, 0.0, 20.0, 20.0]])
     exp_output_1 = [[2.0 / 12.0, 0, 6.0 / 400.0],
                     [1.0 / 12.0, 0.0, 5.0 / 400.0]]
     exp_output_2 = [[2.0 / 6.0, 1.0 / 5.0], [0, 0], [6.0 / 6.0, 5.0 / 5.0]]
     boxes1 = box_list.BoxList(corners1)
     boxes2 = box_list.BoxList(corners2)
     ioa_similarity_calculator = region_similarity_calculator.IoaSimilarity(
     )
     ioa_similarity_1 = ioa_similarity_calculator.compare(boxes1, boxes2)
     ioa_similarity_2 = ioa_similarity_calculator.compare(boxes2, boxes1)
     with self.test_session() as sess:
         iou_output_1, iou_output_2 = sess.run(
             [ioa_similarity_1, ioa_similarity_2])
         self.assertAllClose(iou_output_1, exp_output_1)
         self.assertAllClose(iou_output_2, exp_output_2)
Beispiel #6
0
    def test_assign_ignore(self):
        similarity_calc = region_similarity_calculator.IoaSimilarity()
        matcher = argmax_matcher.ArgMaxMatcher(0.5)
        box_coder = mean_stddev_box_coder.MeanStddevBoxCoder()
        target_assigner = targetassigner.TargetAssigner(
            similarity_calc, matcher, box_coder, unmatched_cls_target=None)

        prior_means = tf.constant([[0.5, 0.5, 1.0, 0.8], [0, 0.5, .5, 1.0],
                                   [0.0, 0.0, 0.5, 0.5]])
        prior_stddevs = tf.constant(3 * [4 * [.1]])
        priors = box_list.BoxList(prior_means)
        priors.add_field('stddev', prior_stddevs)

        box_corners = [[0.0, 0.0, 0.5, 0.5], [0.5, 0.5, 0.9, 0.9]]
        boxes = box_list.BoxList(tf.constant(box_corners))
        exp_cls_targets = [[1], [0], [1]]
        exp_cls_weights = [1, 1, 0]
        exp_reg_targets = [[0, 0, -1, 1], [0, 0, 0, 0], [0, 0, 0, 0]]
        exp_reg_weights = [1, 0, 0]
        exp_matching_anchors = [0, 2]

        # ignore
        ignore = tf.constant([True, False], dtype=tf.bool)
        boxes.add_field(fields.BoxListFields.ignore, ignore)

        result = target_assigner.assign(priors, boxes)
        (cls_targets, cls_weights, reg_targets, reg_weights, match) = result

        with self.test_session() as sess:
            cls_targets_out, cls_weights_out, reg_targets_out, reg_weights_out, matching_anchors_out  = \
                sess.run([cls_targets, cls_weights, reg_targets, reg_weights, match.matched_column_indices()])

            self.assertAllClose(cls_targets_out, exp_cls_targets)
            self.assertAllClose(cls_weights_out, exp_cls_weights)
            self.assertAllClose(reg_targets_out, exp_reg_targets)
            self.assertAllClose(reg_weights_out, exp_reg_weights)
            self.assertAllClose(matching_anchors_out, exp_matching_anchors)
            self.assertEquals(cls_targets_out.dtype, np.float32)
            self.assertEquals(cls_weights_out.dtype, np.float32)
            self.assertEquals(reg_targets_out.dtype, np.float32)
            self.assertEquals(reg_weights_out.dtype, np.float32)
Beispiel #7
0
def build(region_similarity_calculator_config):

    if not isinstance(
            region_similarity_calculator_config,
            region_similarity_calculator_pb2.RegionSimilarityCalculator):
        raise ValueError(
            'region_similarity_calculator_config not of type '
            'region_similarity_calculator_pb2.RegionsSimilarityCalculator')

    similarity_calculator = region_similarity_calculator_config.WhichOneof(
        'region_similarity')
    if similarity_calculator == 'iou_similarity':
        return region_similarity_calculator.IouSimilarity()
    if similarity_calculator == 'ioa_similarity':
        return region_similarity_calculator.IoaSimilarity()
    if similarity_calculator == 'neg_sq_dist_similarity':
        return region_similarity_calculator.NegSqDistSimilarity()
    if similarity_calculator == 'thresholded_iou_similarity':
        return region_similarity_calculator.ThresholdedIouSimilarity(
            region_similarity_calculator_config.thresholded_iou_similarity.
            iou_threshold)

    raise ValueError('Unknown region similarity calculator.')