Exemple #1
0
    def setUp(self):
        """Set up mock YOLO model.

    Here we set up a simple mock YOLO model that will always predict 4
    detections that happen to always be exactly the anchors that are set up
    in the above MockAnchorGenerator.  Because we let max_detections=5,
    we will also always end up with an extra padded row in the detection
    results.
    """
        is_training = False
        self._num_classes = 1
        mock_anchor_generator = MockAnchorGenerator2x2()
        mock_box_predictor = test_utils.MockBoxPredictor(
            is_training, self._num_classes)
        mock_box_coder = test_utils.MockBoxCoder()
        fake_feature_extractor = FakeYOLOFeatureExtractor()
        mock_matcher = test_utils.MockMatcher()
        region_similarity_calculator = sim_calc.IouSimilarity()

        def image_resizer_fn(image):
            return tf.identity(image)

        classification_loss = losses.WeightedSigmoidClassificationLoss(
            anchorwise_output=True)
        localization_loss = losses.WeightedSmoothL1LocalizationLoss(
            anchorwise_output=True)
        non_max_suppression_fn = functools.partial(
            post_processing.batch_multiclass_non_max_suppression,
            score_thresh=-20.0,
            iou_thresh=1.0,
            max_size_per_class=5,
            max_total_size=5)
        classification_loss_weight = 1.0
        localization_loss_weight = 1.0
        normalize_loss_by_num_matches = False

        # This hard example miner is expected to be a no-op.
        hard_example_miner = losses.HardExampleMiner(num_hard_examples=None,
                                                     iou_threshold=1.0)

        self._num_anchors = 4
        self._code_size = 4
        self._model = yolo_meta_arch.YOLOMetaArch(
            is_training, mock_anchor_generator, mock_box_predictor,
            mock_box_coder, fake_feature_extractor, mock_matcher,
            region_similarity_calculator, image_resizer_fn,
            non_max_suppression_fn, tf.identity, classification_loss,
            localization_loss, classification_loss_weight,
            localization_loss_weight, normalize_loss_by_num_matches,
            hard_example_miner)
def _build_yolo_model(yolo_config, is_training):
    """Builds an YOLO detection model based on the model config.

  Args:
    yolo_config: A yolo.proto object containing the config for the desired
      YOLOMetaArch.
    is_training: True if this model is being built for training purposes.

  Returns:
    YOLOMetaArch based on the config.
  Raises:
    ValueError: If yolo_config.type is not recognized (i.e. not registered in
      model_class_map).
  """
    num_classes = yolo_config.num_classes

    # Feature extractor
    feature_extractor = _build_yolo_feature_extractor(
        yolo_config.feature_extractor, is_training)

    box_coder = box_coder_builder.build(yolo_config.box_coder)
    matcher = matcher_builder.build(yolo_config.matcher)
    region_similarity_calculator = sim_calc.build(
        yolo_config.similarity_calculator)
    yolo_box_predictor = box_predictor_builder.build(hyperparams_builder.build,
                                                     yolo_config.box_predictor,
                                                     is_training, num_classes)
    anchor_generator = anchor_generator_builder.build(
        yolo_config.anchor_generator)
    image_resizer_fn = image_resizer_builder.build(yolo_config.image_resizer)
    non_max_suppression_fn, score_conversion_fn = post_processing_builder.build(
        yolo_config.post_processing)
    (classification_loss, localization_loss, classification_weight,
     localization_weight,
     hard_example_miner) = losses_builder.build(yolo_config.loss)
    normalize_loss_by_num_matches = yolo_config.normalize_loss_by_num_matches

    return yolo_meta_arch.YOLOMetaArch(
        is_training, anchor_generator, yolo_box_predictor, box_coder,
        feature_extractor, matcher, region_similarity_calculator,
        image_resizer_fn, non_max_suppression_fn, score_conversion_fn,
        classification_loss, localization_loss, classification_weight,
        localization_weight, normalize_loss_by_num_matches, hard_example_miner)
def _build_ssd_model(ssd_config, is_training):
    """Builds an SSD detection model based on the model config.

  Args:
    ssd_config: A ssd.proto object containing the config for the desired
      SSDMetaArch.
    is_training: True if this model is being built for training purposes.

  Returns:
    SSDMetaArch based on the config.
  Raises:
    ValueError: If ssd_config.type is not recognized (i.e. not registered in
      model_class_map).
  """
    num_classes = ssd_config.num_classes

    # Feature extractor
    feature_extractor = _build_ssd_feature_extractor(
        ssd_config.feature_extractor, is_training)

    box_coder = box_coder_builder.build(ssd_config.box_coder)
    matcher = matcher_builder.build(ssd_config.matcher)
    region_similarity_calculator = sim_calc.build(
        ssd_config.similarity_calculator)
    ssd_box_predictor = box_predictor_builder.build(hyperparams_builder.build,
                                                    ssd_config.box_predictor,
                                                    is_training, num_classes)
    anchor_generator = anchor_generator_builder.build(
        ssd_config.anchor_generator)
    image_resizer_fn = image_resizer_builder.build(ssd_config.image_resizer)
    non_max_suppression_fn, score_conversion_fn = post_processing_builder.build(
        ssd_config.post_processing)
    (classification_loss, localization_loss, classification_weight,
     localization_weight,
     hard_example_miner) = losses_builder.build(ssd_config.loss)
    normalize_loss_by_num_matches = ssd_config.normalize_loss_by_num_matches

    common_kwargs = {
        'is_training': is_training,
        'anchor_generator': anchor_generator,
        'box_predictor': ssd_box_predictor,
        'box_coder': box_coder,
        'feature_extractor': feature_extractor,
        'matcher': matcher,
        'region_similarity_calculator': region_similarity_calculator,
        'image_resizer_fn': image_resizer_fn,
        'non_max_suppression_fn': non_max_suppression_fn,
        'score_conversion_fn': score_conversion_fn,
        'classification_loss': classification_loss,
        'localization_loss': localization_loss,
        'classification_loss_weight': classification_weight,
        'localization_loss_weight': localization_weight,
        'normalize_loss_by_num_matches': normalize_loss_by_num_matches,
        'hard_example_miner': hard_example_miner
    }

    if isinstance(anchor_generator,
                  yolo_grid_anchor_generator.YoloGridAnchorGenerator):
        return yolo_meta_arch.YOLOMetaArch(**common_kwargs)
    else:
        return ssd_meta_arch.SSDMetaArch(**common_kwargs)
Exemple #4
0
def _build_ssd_model(ssd_config,
                     is_training,
                     add_summaries,
                     add_background_class=True):
    """Builds an SSD detection model based on the model config.

  Args:
    ssd_config: A ssd.proto object containing the config for the desired
      SSDMetaArch.
    is_training: True if this model is being built for training purposes.
    add_summaries: Whether to add tf summaries in the model.
    add_background_class: Whether to add an implicit background class to one-hot
      encodings of groundtruth labels. Set to false if using groundtruth labels
      with an explicit background class or using multiclass scores instead of
      truth in the case of distillation.
  Returns:
    SSDMetaArch based on the config.

  Raises:
    ValueError: If ssd_config.type is not recognized (i.e. not registered in
      model_class_map).
  """
    num_classes = ssd_config.num_classes

    # Feature extractor
    feature_extractor = _build_ssd_feature_extractor(
        feature_extractor_config=ssd_config.feature_extractor,
        is_training=is_training)

    box_coder = box_coder_builder.build(ssd_config.box_coder)
    matcher = matcher_builder.build(ssd_config.matcher)
    region_similarity_calculator = sim_calc.build(
        ssd_config.similarity_calculator)
    encode_background_as_zeros = ssd_config.encode_background_as_zeros
    negative_class_weight = ssd_config.negative_class_weight
    ssd_box_predictor = box_predictor_builder.build(hyperparams_builder.build,
                                                    ssd_config.box_predictor,
                                                    is_training, num_classes)
    anchor_generator = anchor_generator_builder.build(
        ssd_config.anchor_generator)
    image_resizer_fn = image_resizer_builder.build(ssd_config.image_resizer)
    non_max_suppression_fn, score_conversion_fn = post_processing_builder.build(
        ssd_config.post_processing)
    (classification_loss, localization_loss, classification_weight,
     localization_weight, hard_example_miner,
     random_example_sampler) = losses_builder.build(ssd_config.loss)
    normalize_loss_by_num_matches = ssd_config.normalize_loss_by_num_matches
    normalize_loc_loss_by_codesize = ssd_config.normalize_loc_loss_by_codesize

    common_kwargs = {
        'is_training': is_training,
        'anchor_generator': anchor_generator,
        'box_predictor': ssd_box_predictor,
        'box_coder': box_coder,
        'feature_extractor': feature_extractor,
        'matcher': matcher,
        'region_similarity_calculator': region_similarity_calculator,
        'image_resizer_fn': image_resizer_fn,
        'non_max_suppression_fn': non_max_suppression_fn,
        'score_conversion_fn': score_conversion_fn,
        'classification_loss': classification_loss,
        'localization_loss': localization_loss,
        'classification_loss_weight': classification_weight,
        'localization_loss_weight': localization_weight,
        'normalize_loss_by_num_matches': normalize_loss_by_num_matches,
        'hard_example_miner': hard_example_miner
    }

    if isinstance(anchor_generator,
                  yolo_grid_anchor_generator.YoloGridAnchorGenerator):
        return yolo_meta_arch.YOLOMetaArch(**common_kwargs)
    else:
        #return ssd_meta_arch.SSDMetaArch(**common_kwargs)
        return ssd_meta_arch.SSDMetaArch(
            is_training,
            anchor_generator,
            ssd_box_predictor,
            box_coder,
            feature_extractor,
            matcher,
            region_similarity_calculator,
            encode_background_as_zeros,
            negative_class_weight,
            image_resizer_fn,
            non_max_suppression_fn,
            score_conversion_fn,
            classification_loss,
            localization_loss,
            classification_weight,
            localization_weight,
            normalize_loss_by_num_matches,
            hard_example_miner,
            add_summaries=add_summaries,
            normalize_loc_loss_by_codesize=normalize_loc_loss_by_codesize,
            freeze_batchnorm=ssd_config.freeze_batchnorm,
            inplace_batchnorm_update=ssd_config.inplace_batchnorm_update,
            add_background_class=add_background_class,
            random_example_sampler=random_example_sampler)