def test_create_ssd_mobilenet_v2_model_from_config(self):
   model_text_proto = """
     ssd {
       feature_extractor {
         type: 'ssd_mobilenet_v2'
         conv_hyperparams {
           regularizer {
               l2_regularizer {
               }
             }
             initializer {
               truncated_normal_initializer {
               }
             }
         }
       }
       box_coder {
         faster_rcnn_box_coder {
         }
       }
       matcher {
         argmax_matcher {
         }
       }
       similarity_calculator {
         iou_similarity {
         }
       }
       anchor_generator {
         ssd_anchor_generator {
           aspect_ratios: 1.0
         }
       }
       image_resizer {
         fixed_shape_resizer {
           height: 320
           width: 320
         }
       }
       box_predictor {
         convolutional_box_predictor {
           conv_hyperparams {
             regularizer {
               l2_regularizer {
               }
             }
             initializer {
               truncated_normal_initializer {
               }
             }
           }
         }
       }
       normalize_loc_loss_by_codesize: true
       loss {
         classification_loss {
           weighted_softmax {
           }
         }
         localization_loss {
           weighted_smooth_l1 {
           }
         }
       }
       weight_regression_loss_by_score: true
     }"""
   model_proto = model_pb2.DetectionModel()
   text_format.Merge(model_text_proto, model_proto)
   model = self.create_model(model_proto)
   self.assertIsInstance(model, ssd_meta_arch.SSDMetaArch)
   self.assertIsInstance(model._feature_extractor,
                         SSDMobileNetV2FeatureExtractor)
   self.assertTrue(model._normalize_loc_loss_by_codesize)
   self.assertTrue(model._target_assigner._weight_regression_loss_by_score)
 def test_create_ssd_inception_v2_model_from_config(self):
   model_text_proto = """
     ssd {
       feature_extractor {
         type: 'ssd_inception_v2'
         conv_hyperparams {
           regularizer {
               l2_regularizer {
               }
             }
             initializer {
               truncated_normal_initializer {
               }
             }
         }
         override_base_feature_extractor_hyperparams: true
       }
       box_coder {
         faster_rcnn_box_coder {
         }
       }
       matcher {
         argmax_matcher {
         }
       }
       similarity_calculator {
         iou_similarity {
         }
       }
       anchor_generator {
         ssd_anchor_generator {
           aspect_ratios: 1.0
         }
       }
       image_resizer {
         fixed_shape_resizer {
           height: 320
           width: 320
         }
       }
       box_predictor {
         convolutional_box_predictor {
           conv_hyperparams {
             regularizer {
               l2_regularizer {
               }
             }
             initializer {
               truncated_normal_initializer {
               }
             }
           }
         }
       }
       loss {
         classification_loss {
           weighted_softmax {
           }
         }
         localization_loss {
           weighted_smooth_l1 {
           }
         }
       }
       use_expected_classification_loss_under_sampling: true
       minimum_negative_sampling: 10
       desired_negative_sampling_ratio: 2
     }"""
   model_proto = model_pb2.DetectionModel()
   text_format.Merge(model_text_proto, model_proto)
   model = self.create_model(model_proto)
   self.assertIsInstance(model, ssd_meta_arch.SSDMetaArch)
   self.assertIsInstance(model._feature_extractor,
                         SSDInceptionV2FeatureExtractor)
   self.assertIsNotNone(model._expected_classification_loss_under_sampling)
   self.assertEqual(
       model._expected_classification_loss_under_sampling.keywords, {
           'minimum_negative_sampling': 10,
           'desired_negative_sampling_ratio': 2
       })
 def test_create_rfcn_resnet_v1_model_from_config(self):
   model_text_proto = """
     faster_rcnn {
       num_classes: 3
       image_resizer {
         keep_aspect_ratio_resizer {
           min_dimension: 600
           max_dimension: 1024
         }
       }
       feature_extractor {
         type: 'faster_rcnn_resnet101'
       }
       first_stage_anchor_generator {
         grid_anchor_generator {
           scales: [0.25, 0.5, 1.0, 2.0]
           aspect_ratios: [0.5, 1.0, 2.0]
           height_stride: 16
           width_stride: 16
         }
       }
       first_stage_box_predictor_conv_hyperparams {
         regularizer {
           l2_regularizer {
           }
         }
         initializer {
           truncated_normal_initializer {
           }
         }
       }
       initial_crop_size: 14
       maxpool_kernel_size: 2
       maxpool_stride: 2
       second_stage_box_predictor {
         rfcn_box_predictor {
           conv_hyperparams {
             op: CONV
             regularizer {
               l2_regularizer {
               }
             }
             initializer {
               truncated_normal_initializer {
               }
             }
           }
         }
       }
       second_stage_post_processing {
         batch_non_max_suppression {
           score_threshold: 0.01
           iou_threshold: 0.6
           max_detections_per_class: 100
           max_total_detections: 300
         }
         score_converter: SOFTMAX
       }
     }"""
   model_proto = model_pb2.DetectionModel()
   text_format.Merge(model_text_proto, model_proto)
   for extractor_type, extractor_class in FRCNN_RESNET_FEAT_MAPS.items():
     model_proto.faster_rcnn.feature_extractor.type = extractor_type
     model = model_builder.build(model_proto, is_training=True)
     self.assertIsInstance(model, rfcn_meta_arch.RFCNMetaArch)
     self.assertIsInstance(model._feature_extractor, extractor_class)
  def test_create_ssd_resnet_v1_ppn_model_from_config(self):
    model_text_proto = """
      ssd {
        feature_extractor {
          type: 'ssd_resnet_v1_50_ppn'
          conv_hyperparams {
            regularizer {
                l2_regularizer {
                }
              }
              initializer {
                truncated_normal_initializer {
                }
              }
          }
        }
        box_coder {
          mean_stddev_box_coder {
          }
        }
        matcher {
          bipartite_matcher {
          }
        }
        similarity_calculator {
          iou_similarity {
          }
        }
        anchor_generator {
          ssd_anchor_generator {
            aspect_ratios: 1.0
          }
        }
        image_resizer {
          fixed_shape_resizer {
            height: 320
            width: 320
          }
        }
        box_predictor {
          weight_shared_convolutional_box_predictor {
            depth: 1024
            class_prediction_bias_init: -4.6
            conv_hyperparams {
              activation: RELU_6,
              regularizer {
                l2_regularizer {
                  weight: 0.0004
                }
              }
              initializer {
                variance_scaling_initializer {
                }
              }
            }
            num_layers_before_predictor: 2
            kernel_size: 1
          }
        }
        loss {
          classification_loss {
            weighted_softmax {
            }
          }
          localization_loss {
            weighted_l2 {
            }
          }
          classification_weight: 1.0
          localization_weight: 1.0
        }
      }"""
    model_proto = model_pb2.DetectionModel()
    text_format.Merge(model_text_proto, model_proto)

    for extractor_type, extractor_class in SSD_RESNET_V1_PPN_FEAT_MAPS.items():
      model_proto.ssd.feature_extractor.type = extractor_type
      model = model_builder.build(model_proto, is_training=True)
      self.assertIsInstance(model, ssd_meta_arch.SSDMetaArch)
      self.assertIsInstance(model._feature_extractor, extractor_class)
예제 #5
0
 def testGetContextFeatureLengthFromModelConfig(self):
   model_config = model_pb2.DetectionModel()
   model_config.faster_rcnn.context_config.context_feature_length = 100
   context_feature_length = config_util.get_context_feature_length(
       model_config)
   self.assertAllEqual(context_feature_length, 100)
예제 #6
0
  def _create_model(
      self,
      model_fn=ssd_meta_arch.SSDMetaArch,
      apply_hard_mining=True,
      normalize_loc_loss_by_codesize=False,
      add_background_class=True,
      random_example_sampling=False,
      expected_loss_weights=model_pb2.DetectionModel().ssd.loss.NONE,
      min_num_negative_samples=1,
      desired_negative_sampling_ratio=3,
      use_keras=False,
      predict_mask=False,
      use_static_shapes=False,
      nms_max_size_per_class=5,
      calibration_mapping_value=None):
    is_training = False
    num_classes = 1
    mock_anchor_generator = MockAnchorGenerator2x2()
    if use_keras:
      mock_box_predictor = test_utils.MockKerasBoxPredictor(
          is_training, num_classes, add_background_class=add_background_class)
    else:
      mock_box_predictor = test_utils.MockBoxPredictor(
          is_training, num_classes, add_background_class=add_background_class)
    mock_box_coder = test_utils.MockBoxCoder()
    if use_keras:
      fake_feature_extractor = FakeSSDKerasFeatureExtractor()
    else:
      fake_feature_extractor = FakeSSDFeatureExtractor()
    mock_matcher = test_utils.MockMatcher()
    region_similarity_calculator = sim_calc.IouSimilarity()
    encode_background_as_zeros = False

    def image_resizer_fn(image):
      return [tf.identity(image), tf.shape(image)]

    classification_loss = losses.WeightedSigmoidClassificationLoss()
    localization_loss = losses.WeightedSmoothL1LocalizationLoss()
    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=nms_max_size_per_class,
        max_total_size=nms_max_size_per_class,
        use_static_shapes=use_static_shapes)
    score_conversion_fn = tf.identity
    calibration_config = calibration_pb2.CalibrationConfig()
    if calibration_mapping_value:
      calibration_text_proto = """
      function_approximation {
        x_y_pairs {
            x_y_pair {
              x: 0.0
              y: %f
            }
            x_y_pair {
              x: 1.0
              y: %f
            }}}""" % (calibration_mapping_value, calibration_mapping_value)
      text_format.Merge(calibration_text_proto, calibration_config)
      score_conversion_fn = (
          post_processing_builder._build_calibrated_score_converter(  # pylint: disable=protected-access
              tf.identity, calibration_config))
    classification_loss_weight = 1.0
    localization_loss_weight = 1.0
    negative_class_weight = 1.0
    normalize_loss_by_num_matches = False

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

    random_example_sampler = None
    if random_example_sampling:
      random_example_sampler = sampler.BalancedPositiveNegativeSampler(
          positive_fraction=0.5)

    target_assigner_instance = target_assigner.TargetAssigner(
        region_similarity_calculator,
        mock_matcher,
        mock_box_coder,
        negative_class_weight=negative_class_weight)

    model_config = model_pb2.DetectionModel()
    if expected_loss_weights == model_config.ssd.loss.NONE:
      expected_loss_weights_fn = None
    else:
      raise ValueError('Not a valid value for expected_loss_weights.')

    code_size = 4

    kwargs = {}
    if predict_mask:
      kwargs.update({
          'mask_prediction_fn': test_utils.MockMaskHead(num_classes=1).predict,
      })

    model = model_fn(
        is_training=is_training,
        anchor_generator=mock_anchor_generator,
        box_predictor=mock_box_predictor,
        box_coder=mock_box_coder,
        feature_extractor=fake_feature_extractor,
        encode_background_as_zeros=encode_background_as_zeros,
        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_loss_weight,
        localization_loss_weight=localization_loss_weight,
        normalize_loss_by_num_matches=normalize_loss_by_num_matches,
        hard_example_miner=hard_example_miner,
        target_assigner_instance=target_assigner_instance,
        add_summaries=False,
        normalize_loc_loss_by_codesize=normalize_loc_loss_by_codesize,
        freeze_batchnorm=False,
        inplace_batchnorm_update=False,
        add_background_class=add_background_class,
        random_example_sampler=random_example_sampler,
        expected_loss_weights_fn=expected_loss_weights_fn,
        **kwargs)
    return model, num_classes, mock_anchor_generator.num_anchors(), code_size
 def create_default_faster_rcnn_model_proto(self):
     """Creates a DetectionModel proto with FasterRCNN model fields populated."""
     model_text_proto = """
   faster_rcnn {
     inplace_batchnorm_update: false
     num_classes: 3
     image_resizer {
       keep_aspect_ratio_resizer {
         min_dimension: 600
         max_dimension: 1024
       }
     }
     first_stage_anchor_generator {
       grid_anchor_generator {
         scales: [0.25, 0.5, 1.0, 2.0]
         aspect_ratios: [0.5, 1.0, 2.0]
         height_stride: 16
         width_stride: 16
       }
     }
     first_stage_box_predictor_conv_hyperparams {
       regularizer {
         l2_regularizer {
         }
       }
       initializer {
         truncated_normal_initializer {
         }
       }
     }
     initial_crop_size: 14
     maxpool_kernel_size: 2
     maxpool_stride: 2
     second_stage_box_predictor {
       mask_rcnn_box_predictor {
         conv_hyperparams {
           regularizer {
             l2_regularizer {
             }
           }
           initializer {
             truncated_normal_initializer {
             }
           }
         }
         fc_hyperparams {
           op: FC
           regularizer {
             l2_regularizer {
             }
           }
           initializer {
             truncated_normal_initializer {
             }
           }
         }
       }
     }
     second_stage_post_processing {
       batch_non_max_suppression {
         score_threshold: 0.01
         iou_threshold: 0.6
         max_detections_per_class: 100
         max_total_detections: 300
       }
       score_converter: SOFTMAX
     }
   }"""
     model_proto = model_pb2.DetectionModel()
     text_format.Merge(model_text_proto, model_proto)
     (model_proto.faster_rcnn.feature_extractor.type
      ) = self.default_faster_rcnn_feature_extractor()
     return model_proto
 def test_create_faster_rcnn_resnet101_with_mask_prediction_enabled(self):
   model_text_proto = """
     faster_rcnn {
       num_classes: 3
       image_resizer {
         keep_aspect_ratio_resizer {
           min_dimension: 600
           max_dimension: 1024
         }
       }
       feature_extractor {
         type: 'faster_rcnn_resnet101'
       }
       first_stage_anchor_generator {
         grid_anchor_generator {
           scales: [0.25, 0.5, 1.0, 2.0]
           aspect_ratios: [0.5, 1.0, 2.0]
           height_stride: 16
           width_stride: 16
         }
       }
       first_stage_box_predictor_conv_hyperparams {
         regularizer {
           l2_regularizer {
           }
         }
         initializer {
           truncated_normal_initializer {
           }
         }
       }
       initial_crop_size: 14
       maxpool_kernel_size: 2
       maxpool_stride: 2
       second_stage_box_predictor {
         mask_rcnn_box_predictor {
           fc_hyperparams {
             op: FC
             regularizer {
               l2_regularizer {
               }
             }
             initializer {
               truncated_normal_initializer {
               }
             }
           }
           conv_hyperparams {
             regularizer {
               l2_regularizer {
               }
             }
             initializer {
               truncated_normal_initializer {
               }
             }
           }
           predict_instance_masks: true
         }
       }
       second_stage_mask_prediction_loss_weight: 3.0
       second_stage_post_processing {
         batch_non_max_suppression {
           score_threshold: 0.01
           iou_threshold: 0.6
           max_detections_per_class: 100
           max_total_detections: 300
         }
         score_converter: SOFTMAX
       }
     }"""
   model_proto = model_pb2.DetectionModel()
   text_format.Merge(model_text_proto, model_proto)
   model = model_builder.build(model_proto, is_training=True)
   self.assertAlmostEqual(model._second_stage_mask_loss_weight, 3.0)
예제 #9
0
 def test_create_ssd_mobilenet_v2_fpnlite_model_from_config(self):
     model_text_proto = """
   ssd {
     freeze_batchnorm: true
     inplace_batchnorm_update: true
     feature_extractor {
       type: 'ssd_mobilenet_v2_fpn'
       use_depthwise: true
       fpn {
         min_level: 3
         max_level: 7
         additional_layer_depth: 128
       }
       conv_hyperparams {
         regularizer {
             l2_regularizer {
             }
           }
           initializer {
             truncated_normal_initializer {
             }
           }
       }
     }
     box_coder {
       faster_rcnn_box_coder {
       }
     }
     matcher {
       argmax_matcher {
       }
     }
     similarity_calculator {
       iou_similarity {
       }
     }
     anchor_generator {
       ssd_anchor_generator {
         aspect_ratios: 1.0
       }
     }
     image_resizer {
       fixed_shape_resizer {
         height: 320
         width: 320
       }
     }
     box_predictor {
       convolutional_box_predictor {
         conv_hyperparams {
           regularizer {
             l2_regularizer {
             }
           }
           initializer {
             truncated_normal_initializer {
             }
           }
         }
       }
     }
     normalize_loc_loss_by_codesize: true
     loss {
       classification_loss {
         weighted_softmax {
         }
       }
       localization_loss {
         weighted_smooth_l1 {
         }
       }
     }
   }"""
     model_proto = model_pb2.DetectionModel()
     text_format.Merge(model_text_proto, model_proto)
     model = self.create_model(model_proto)
     self.assertIsInstance(model, ssd_meta_arch.SSDMetaArch)
     self.assertIsInstance(model._feature_extractor,
                           SSDMobileNetV2FpnFeatureExtractor)
     self.assertTrue(model._normalize_loc_loss_by_codesize)
     self.assertTrue(model._freeze_batchnorm)
     self.assertTrue(model._inplace_batchnorm_update)
예제 #10
0
    def test_create_center_net_model(self):
        """Test building a CenterNet model from proto txt."""
        proto_txt = """
      center_net {
        num_classes: 10
        feature_extractor {
          type: "resnet_v2_101"
          channel_stds: [4, 5, 6]
          bgr_ordering: true
        }
        image_resizer {
          keep_aspect_ratio_resizer {
            min_dimension: 512
            max_dimension: 512
            pad_to_max_dimension: true
          }
        }
      }
    """
        # Set up the configuration proto.
        config = text_format.Merge(proto_txt, model_pb2.DetectionModel())
        config.center_net.object_center_params.CopyFrom(
            self.get_fake_object_center_proto())
        config.center_net.object_detection_task.CopyFrom(
            self.get_fake_object_detection_proto())
        config.center_net.keypoint_estimation_task.append(
            self.get_fake_keypoint_proto())
        config.center_net.keypoint_label_map_path = (
            self.get_fake_label_map_file_path())
        config.center_net.mask_estimation_task.CopyFrom(
            self.get_fake_mask_proto())
        config.center_net.densepose_estimation_task.CopyFrom(
            self.get_fake_densepose_proto())

        # Build the model from the configuration.
        model = model_builder.build(config, is_training=True)

        # Check object center related parameters.
        self.assertEqual(model._num_classes, 10)
        self.assertIsInstance(model._center_params.classification_loss,
                              losses.PenaltyReducedLogisticFocalLoss)
        self.assertEqual(model._center_params.classification_loss._alpha, 3.0)
        self.assertEqual(model._center_params.classification_loss._beta, 4.0)
        self.assertAlmostEqual(model._center_params.min_box_overlap_iou, 0.2)
        self.assertAlmostEqual(model._center_params.heatmap_bias_init,
                               3.14,
                               places=4)
        self.assertEqual(model._center_params.max_box_predictions, 15)

        # Check object detection related parameters.
        self.assertAlmostEqual(model._od_params.offset_loss_weight, 0.1)
        self.assertAlmostEqual(model._od_params.scale_loss_weight, 0.2)
        self.assertAlmostEqual(model._od_params.task_loss_weight, 0.5)
        self.assertIsInstance(model._od_params.localization_loss,
                              losses.L1LocalizationLoss)

        # Check keypoint estimation related parameters.
        kp_params = model._kp_params_dict['human_pose']
        self.assertAlmostEqual(kp_params.task_loss_weight, 0.9)
        self.assertAlmostEqual(kp_params.keypoint_regression_loss_weight, 1.0)
        self.assertAlmostEqual(kp_params.keypoint_offset_loss_weight, 0.5)
        self.assertAlmostEqual(kp_params.heatmap_bias_init, 2.14, places=4)
        self.assertEqual(kp_params.classification_loss._alpha, 3.0)
        self.assertEqual(kp_params.keypoint_indices, [0, 1, 2, 3])
        self.assertEqual(kp_params.keypoint_labels,
                         ['nose', 'left_shoulder', 'right_shoulder', 'hip'])
        self.assertAllClose(kp_params.keypoint_std_dev, [0.3, 1.0, 1.0, 0.0])
        self.assertEqual(kp_params.classification_loss._beta, 4.0)
        self.assertIsInstance(kp_params.localization_loss,
                              losses.L1LocalizationLoss)
        self.assertAlmostEqual(kp_params.keypoint_candidate_score_threshold,
                               0.3)
        self.assertEqual(kp_params.num_candidates_per_keypoint, 12)
        self.assertEqual(kp_params.peak_max_pool_kernel_size, 5)
        self.assertAlmostEqual(kp_params.unmatched_keypoint_score, 0.05)
        self.assertAlmostEqual(kp_params.box_scale, 1.7)
        self.assertAlmostEqual(kp_params.candidate_search_scale, 0.2)
        self.assertEqual(kp_params.candidate_ranking_mode,
                         'score_distance_ratio')
        self.assertEqual(kp_params.offset_peak_radius, 3)
        self.assertEqual(kp_params.per_keypoint_offset, True)
        self.assertEqual(kp_params.predict_depth, True)
        self.assertEqual(kp_params.per_keypoint_depth, True)
        self.assertAlmostEqual(kp_params.keypoint_depth_loss_weight, 0.3)

        # Check mask related parameters.
        self.assertAlmostEqual(model._mask_params.task_loss_weight, 0.7)
        self.assertIsInstance(model._mask_params.classification_loss,
                              losses.WeightedSoftmaxClassificationLoss)
        self.assertEqual(model._mask_params.mask_height, 8)
        self.assertEqual(model._mask_params.mask_width, 8)
        self.assertAlmostEqual(model._mask_params.score_threshold, 0.7)
        self.assertAlmostEqual(model._mask_params.heatmap_bias_init,
                               -2.0,
                               places=4)

        # Check DensePose related parameters.
        self.assertEqual(model._densepose_params.class_id, 0)
        self.assertIsInstance(model._densepose_params.classification_loss,
                              losses.WeightedSoftmaxClassificationLoss)
        self.assertIsInstance(model._densepose_params.localization_loss,
                              losses.L1LocalizationLoss)
        self.assertAlmostEqual(model._densepose_params.part_loss_weight, 1.0)
        self.assertAlmostEqual(model._densepose_params.coordinate_loss_weight,
                               2.0)
        self.assertEqual(model._densepose_params.num_parts, 24)
        self.assertAlmostEqual(model._densepose_params.task_loss_weight, 0.5)
        self.assertTrue(model._densepose_params.upsample_to_input_res)
        self.assertEqual(model._densepose_params.upsample_method, 'bilinear')
        self.assertAlmostEqual(model._densepose_params.heatmap_bias_init,
                               -2.0,
                               places=4)

        # Check feature extractor parameters.
        self.assertIsInstance(
            model._feature_extractor, center_net_resnet_feature_extractor.
            CenterNetResnetFeatureExtractor)
        self.assertAllClose(model._feature_extractor._channel_means, [0, 0, 0])
        self.assertAllClose(model._feature_extractor._channel_stds, [4, 5, 6])
        self.assertTrue(model._feature_extractor._bgr_ordering)
예제 #11
0
def _load_model_proto(filename):
    model_proto = model_pb2.DetectionModel()
    with open(filename, 'r') as fp:
        text_format.Merge(fp.read(), model_proto)
    return model_proto
예제 #12
0
 def test_create_ssd_vgg16_model_from_config(self):
     model_text_proto = """
   ssd {
     feature_extractor {
       type: 'ssd_vgg_16'
       conv_hyperparams {
         regularizer {
             l2_regularizer {
             }
           }
           initializer {
             truncated_normal_initializer {
             }
           }
       }
     }
     box_coder {
       faster_rcnn_box_coder {
       }
     }
     matcher {
       argmax_matcher {
       }
     }
     similarity_calculator {
       iou_similarity {
       }
     }
     anchor_generator {
       ssd_anchor_generator {
         aspect_ratios: 1.0
       }
     }
     image_resizer {
       fixed_shape_resizer {
         height: 300
         width: 300
       }
     }
     box_predictor {
       convolutional_box_predictor {
         conv_hyperparams {
           regularizer {
             l2_regularizer {
             }
           }
           initializer {
             truncated_normal_initializer {
             }
           }
         }
       }
     }
     loss {
       classification_loss {
         weighted_softmax {
         }
       }
       localization_loss {
         weighted_smooth_l1 {
         }
       }
     }
   }"""
     model_proto = model_pb2.DetectionModel()
     text_format.Merge(model_text_proto, model_proto)
     model = self.create_model(model_proto)
     self.assertIsInstance(model, ssd_meta_arch.SSDMetaArch)
     self.assertIsInstance(model._feature_extractor,
                           SSDVgg16FeatureExtractor)
     image = tf.placeholder(tf.float32, shape=[32, 300, 300, 3])
     print model._feature_extractor.extract_features(image)
예제 #13
0
import sys

sys.path.append('external')
from object_detection.core import target_assigner
from object_detection.builders import box_coder_builder, matcher_builder, box_predictor_builder
from object_detection.builders import anchor_generator_builder, losses_builder
from object_detection.builders import image_resizer_builder, post_processing_builder
from object_detection.builders import region_similarity_calculator_builder as sim_calc_builder
from object_detection.protos import model_pb2
from object_detection.core import box_list
from google.protobuf import text_format
import tensorflow as tf

# input
model = model_pb2.DetectionModel()
f = open('model.config', 'r')
text_format.Merge(f.read(), model)
f.close()
num_classes = 20
groundtruth_class = tf.get_variable('groundtruth_class', shape=[24, 5, 20])
groundtruth_box = tf.get_variable('groundtruth_box', shape=[24, 5, 4])

groundtruth_classes_with_background_list = [
    tf.pad(one_hot_encoding, [[0, 0], [1, 0]], mode='CONSTANT')
    for one_hot_encoding in tf.unstack(groundtruth_class)
]
groundtruth_boxlists = [
    box_list.BoxList(boxes) for boxes in tf.unstack(groundtruth_box)
]

# construct models
  def test_create_ssd_resnet_v1_fpn_model_from_config(self):
    model_text_proto = """
      ssd {
        feature_extractor {
          type: 'ssd_resnet50_v1_fpn'
          conv_hyperparams {
            regularizer {
                l2_regularizer {
                }
              }
              initializer {
                truncated_normal_initializer {
                }
              }
          }
          batch_norm_trainable: true
        }
        box_coder {
          faster_rcnn_box_coder {
          }
        }
        matcher {
          argmax_matcher {
          }
        }
        similarity_calculator {
          iou_similarity {
          }
        }
        anchor_generator {
          multiscale_anchor_generator {
            aspect_ratios: [1.0, 2.0, 0.5]
            scales_per_octave: 2
          }
        }
        image_resizer {
          fixed_shape_resizer {
            height: 320
            width: 320
          }
        }
        box_predictor {
          weight_shared_convolutional_box_predictor {
            depth: 32
            conv_hyperparams {
              regularizer {
                l2_regularizer {
                }
              }
              initializer {
                truncated_normal_initializer {
                }
              }
            }
            num_layers_before_predictor: 1
          }
        }
        loss {
          classification_loss {
            weighted_sigmoid_focal {
              alpha: 0.25
              gamma: 2.0
            }
          }
          localization_loss {
            weighted_smooth_l1 {
            }
          }
          classification_weight: 1.0
          localization_weight: 1.0
        }
      }"""
    model_proto = model_pb2.DetectionModel()
    text_format.Merge(model_text_proto, model_proto)

    for extractor_type, extractor_class in SSD_RESNET_V1_FPN_FEAT_MAPS.items():
      model_proto.ssd.feature_extractor.type = extractor_type
      model = model_builder.build(model_proto, is_training=True)
      self.assertIsInstance(model, ssd_meta_arch.SSDMetaArch)
      self.assertIsInstance(model._feature_extractor, extractor_class)
 def test_unknown_meta_architecture(self):
     model_proto = model_pb2.DetectionModel()
     with self.assertRaisesRegex(ValueError, 'Unknown meta architecture'):
         model_builder.build(model_proto, is_training=True)
 def test_create_embedded_ssd_mobilenet_v1_model_from_config(self):
   model_text_proto = """
     ssd {
       feature_extractor {
         type: 'embedded_ssd_mobilenet_v1'
         conv_hyperparams {
           regularizer {
               l2_regularizer {
               }
             }
             initializer {
               truncated_normal_initializer {
               }
             }
         }
         batch_norm_trainable: true
       }
       box_coder {
         faster_rcnn_box_coder {
         }
       }
       matcher {
         argmax_matcher {
         }
       }
       similarity_calculator {
         iou_similarity {
         }
       }
       anchor_generator {
         ssd_anchor_generator {
           aspect_ratios: 1.0
         }
       }
       image_resizer {
         fixed_shape_resizer {
           height: 256
           width: 256
         }
       }
       box_predictor {
         convolutional_box_predictor {
           conv_hyperparams {
             regularizer {
               l2_regularizer {
               }
             }
             initializer {
               truncated_normal_initializer {
               }
             }
           }
         }
       }
       loss {
         classification_loss {
           weighted_softmax {
           }
         }
         localization_loss {
           weighted_smooth_l1 {
           }
         }
       }
     }"""
   model_proto = model_pb2.DetectionModel()
   text_format.Merge(model_text_proto, model_proto)
   model = self.create_model(model_proto)
   self.assertIsInstance(model, ssd_meta_arch.SSDMetaArch)
   self.assertIsInstance(model._feature_extractor,
                         EmbeddedSSDMobileNetV1FeatureExtractor)
 def create_default_ssd_model_proto(self):
     """Creates a DetectionModel proto with ssd model fields populated."""
     model_text_proto = """
   ssd {
     feature_extractor {
       conv_hyperparams {
         regularizer {
             l2_regularizer {
             }
           }
           initializer {
             truncated_normal_initializer {
             }
           }
       }
     }
     box_coder {
       faster_rcnn_box_coder {
       }
     }
     matcher {
       argmax_matcher {
       }
     }
     similarity_calculator {
       iou_similarity {
       }
     }
     anchor_generator {
       ssd_anchor_generator {
         aspect_ratios: 1.0
       }
     }
     image_resizer {
       fixed_shape_resizer {
         height: 320
         width: 320
       }
     }
     box_predictor {
       convolutional_box_predictor {
         conv_hyperparams {
           regularizer {
             l2_regularizer {
             }
           }
           initializer {
             truncated_normal_initializer {
             }
           }
         }
       }
     }
     loss {
       classification_loss {
         weighted_softmax {
         }
       }
       localization_loss {
         weighted_smooth_l1 {
         }
       }
     }
   }"""
     model_proto = model_pb2.DetectionModel()
     text_format.Merge(model_text_proto, model_proto)
     model_proto.ssd.feature_extractor.type = (
         self.default_ssd_feature_extractor())
     return model_proto
 def test_create_faster_rcnn_inception_resnet_v2_model_from_config(self):
   model_text_proto = """
     faster_rcnn {
       num_classes: 3
       image_resizer {
         keep_aspect_ratio_resizer {
           min_dimension: 600
           max_dimension: 1024
         }
       }
       feature_extractor {
         type: 'faster_rcnn_inception_resnet_v2'
       }
       first_stage_anchor_generator {
         grid_anchor_generator {
           scales: [0.25, 0.5, 1.0, 2.0]
           aspect_ratios: [0.5, 1.0, 2.0]
           height_stride: 16
           width_stride: 16
         }
       }
       first_stage_box_predictor_conv_hyperparams {
         regularizer {
           l2_regularizer {
           }
         }
         initializer {
           truncated_normal_initializer {
           }
         }
       }
       initial_crop_size: 17
       maxpool_kernel_size: 1
       maxpool_stride: 1
       second_stage_box_predictor {
         mask_rcnn_box_predictor {
           fc_hyperparams {
             op: FC
             regularizer {
               l2_regularizer {
               }
             }
             initializer {
               truncated_normal_initializer {
               }
             }
           }
         }
       }
       second_stage_post_processing {
         batch_non_max_suppression {
           score_threshold: 0.01
           iou_threshold: 0.6
           max_detections_per_class: 100
           max_total_detections: 300
         }
         score_converter: SOFTMAX
       }
     }"""
   model_proto = model_pb2.DetectionModel()
   text_format.Merge(model_text_proto, model_proto)
   model = model_builder.build(model_proto, is_training=True)
   self.assertIsInstance(model, faster_rcnn_meta_arch.FasterRCNNMetaArch)
   self.assertIsInstance(
       model._feature_extractor,
       frcnn_inc_res.FasterRCNNInceptionResnetV2FeatureExtractor)
예제 #19
0
 def testGetMaxNumContextFeaturesFromModelConfig(self):
   model_config = model_pb2.DetectionModel()
   model_config.faster_rcnn.context_config.max_num_context_features = 10
   max_num_context_features = config_util.get_max_num_context_features(
       model_config)
   self.assertAllEqual(max_num_context_features, 10)