コード例 #1
0
 def test_build_grid_anchor_generator_with_non_default_parameters(self):
     anchor_generator_text_proto = """
   grid_anchor_generator {
     height: 128
     width: 512
     height_stride: 10
     width_stride: 20
     height_offset: 30
     width_offset: 40
     scales: [0.4, 2.2]
     aspect_ratios: [0.3, 4.5]
   }
  """
     anchor_generator_proto = anchor_generator_pb2.AnchorGenerator()
     text_format.Merge(anchor_generator_text_proto, anchor_generator_proto)
     anchor_generator_object = anchor_generator_builder.build(
         anchor_generator_proto)
     self.assertTrue(
         isinstance(anchor_generator_object,
                    grid_anchor_generator.GridAnchorGenerator))
     self.assert_almost_list_equal(anchor_generator_object._scales,
                                   [0.4, 2.2])
     self.assert_almost_list_equal(anchor_generator_object._aspect_ratios,
                                   [0.3, 4.5])
     with self.test_session() as sess:
         base_anchor_size, anchor_offset, anchor_stride = sess.run([
             anchor_generator_object._base_anchor_size,
             anchor_generator_object._anchor_offset,
             anchor_generator_object._anchor_stride
         ])
     self.assertAllEqual(anchor_offset, [30, 40])
     self.assertAllEqual(anchor_stride, [10, 20])
     self.assertAllEqual(base_anchor_size, [128, 512])
コード例 #2
0
    def test_build_ssd_anchor_generator_with_defaults(self):
        anchor_generator_text_proto = """
      ssd_anchor_generator {
        aspect_ratios: [1.0]
      }
    """
        anchor_generator_proto = anchor_generator_pb2.AnchorGenerator()
        text_format.Merge(anchor_generator_text_proto, anchor_generator_proto)
        anchor_generator_object = anchor_generator_builder.build(
            anchor_generator_proto)
        self.assertTrue(
            isinstance(
                anchor_generator_object,
                multiple_grid_anchor_generator.MultipleGridAnchorGenerator))
        for actual_scales, expected_scales in zip(
                list(anchor_generator_object._scales), [(0.1, 0.2, 0.2),
                                                        (0.35, 0.418),
                                                        (0.499, 0.570),
                                                        (0.649, 0.721),
                                                        (0.799, 0.871),
                                                        (0.949, 0.974)]):
            self.assert_almost_list_equal(expected_scales,
                                          actual_scales,
                                          delta=1e-2)
        for actual_aspect_ratio, expected_aspect_ratio in zip(
                list(anchor_generator_object._aspect_ratios),
            [(1.0, 2.0, 0.5)] + 5 * [(1.0, 1.0)]):
            self.assert_almost_list_equal(expected_aspect_ratio,
                                          actual_aspect_ratio)

        with self.test_session() as sess:
            base_anchor_size = sess.run(
                anchor_generator_object._base_anchor_size)
        self.assertAllClose(base_anchor_size, [1.0, 1.0])
コード例 #3
0
 def test_raise_value_error_on_empty_anchor_genertor(self):
     anchor_generator_text_proto = """
 """
     anchor_generator_proto = anchor_generator_pb2.AnchorGenerator()
     text_format.Merge(anchor_generator_text_proto, anchor_generator_proto)
     with self.assertRaises(ValueError):
         anchor_generator_builder.build(anchor_generator_proto)
コード例 #4
0
 def test_build_multiscale_anchor_generator_custom_aspect_ratios(self):
     anchor_generator_text_proto = """
   multiscale_anchor_generator {
     aspect_ratios: [1.0]
   }
 """
     anchor_generator_proto = anchor_generator_pb2.AnchorGenerator()
     text_format.Merge(anchor_generator_text_proto, anchor_generator_proto)
     anchor_generator_object = anchor_generator_builder.build(
         anchor_generator_proto)
     self.assertTrue(
         isinstance(
             anchor_generator_object, multiscale_grid_anchor_generator.
             MultiscaleGridAnchorGenerator))
     for level, anchor_grid_info in zip(
             range(3, 8), anchor_generator_object._anchor_grid_info):
         self.assertEqual(set(anchor_grid_info.keys()),
                          set(['level', 'info']))
         self.assertTrue(level, anchor_grid_info['level'])
         self.assertEqual(len(anchor_grid_info['info']), 4)
         self.assertAllClose(anchor_grid_info['info'][0], [2**0, 2**0.5])
         self.assertTrue(anchor_grid_info['info'][1], 1.0)
         self.assertAllClose(anchor_grid_info['info'][2],
                             [4.0 * 2**level, 4.0 * 2**level])
         self.assertAllClose(anchor_grid_info['info'][3],
                             [2**level, 2**level])
コード例 #5
0
    def test_build_ssd_anchor_generator_without_reduced_boxes(self):
        anchor_generator_text_proto = """
      ssd_anchor_generator {
        aspect_ratios: [1.0]
        reduce_boxes_in_lowest_layer: false
      }
    """
        anchor_generator_proto = anchor_generator_pb2.AnchorGenerator()
        text_format.Merge(anchor_generator_text_proto, anchor_generator_proto)
        anchor_generator_object = anchor_generator_builder.build(
            anchor_generator_proto)
        self.assertIsInstance(
            anchor_generator_object,
            multiple_grid_anchor_generator.MultipleGridAnchorGenerator)

        for actual_scales, expected_scales in zip(
                list(anchor_generator_object._scales), [(0.2, 0.264),
                                                        (0.35, 0.418),
                                                        (0.499, 0.570),
                                                        (0.649, 0.721),
                                                        (0.799, 0.871),
                                                        (0.949, 0.974)]):
            self.assert_almost_list_equal(expected_scales,
                                          actual_scales,
                                          delta=1e-2)

        for actual_aspect_ratio, expected_aspect_ratio in zip(
                list(anchor_generator_object._aspect_ratios),
                6 * [(1.0, 1.0)]):
            self.assert_almost_list_equal(expected_aspect_ratio,
                                          actual_aspect_ratio)

        self.assertAllClose(anchor_generator_object._base_anchor_size,
                            [1.0, 1.0])
コード例 #6
0
    def test_build_ssd_anchor_generator_with_non_default_parameters(self):
        anchor_generator_text_proto = """
      ssd_anchor_generator {
        num_layers: 2
        min_scale: 0.3
        max_scale: 0.8
        aspect_ratios: [2.0]
      }
    """
        anchor_generator_proto = anchor_generator_pb2.AnchorGenerator()
        text_format.Merge(anchor_generator_text_proto, anchor_generator_proto)
        anchor_generator_object = anchor_generator_builder.build(
            anchor_generator_proto)
        self.assertTrue(
            isinstance(
                anchor_generator_object,
                multiple_grid_anchor_generator.MultipleGridAnchorGenerator))

        for actual_scales, expected_scales in zip(
                list(anchor_generator_object._scales), [(0.1, 0.3, 0.3),
                                                        (0.8, )]):
            self.assert_almost_list_equal(expected_scales,
                                          actual_scales,
                                          delta=1e-2)

        for actual_aspect_ratio, expected_aspect_ratio in zip(
                list(anchor_generator_object._aspect_ratios), [(1.0, 2.0, 0.5),
                                                               (2.0, )]):
            self.assert_almost_list_equal(expected_aspect_ratio,
                                          actual_aspect_ratio)

        with self.test_session() as sess:
            base_anchor_size = sess.run(
                anchor_generator_object._base_anchor_size)
        self.assertAllClose(base_anchor_size, [1.0, 1.0])
コード例 #7
0
    def test_build_flexible_anchor_generator(self):
        anchor_generator_text_proto = """
      flexible_grid_anchor_generator {
        anchor_grid {
          base_sizes: [1.5]
          aspect_ratios: [1.0]
          height_stride: 16
          width_stride: 20
          height_offset: 8
          width_offset: 9
        }
        anchor_grid {
          base_sizes: [1.0, 2.0]
          aspect_ratios: [1.0, 0.5]
          height_stride: 32
          width_stride: 30
          height_offset: 10
          width_offset: 11
        }
      }
    """
        anchor_generator_proto = anchor_generator_pb2.AnchorGenerator()
        text_format.Merge(anchor_generator_text_proto, anchor_generator_proto)
        anchor_generator_object = anchor_generator_builder.build(
            anchor_generator_proto)
        self.assertIsInstance(
            anchor_generator_object,
            flexible_grid_anchor_generator.FlexibleGridAnchorGenerator)

        for actual_base_sizes, expected_base_sizes in zip(
                list(anchor_generator_object._base_sizes), [(1.5, ),
                                                            (1.0, 2.0)]):
            self.assert_almost_list_equal(expected_base_sizes,
                                          actual_base_sizes)

        for actual_aspect_ratios, expected_aspect_ratios in zip(
                list(anchor_generator_object._aspect_ratios), [(1.0, ),
                                                               (1.0, 0.5)]):
            self.assert_almost_list_equal(expected_aspect_ratios,
                                          actual_aspect_ratios)

        for actual_strides, expected_strides in zip(
                list(anchor_generator_object._anchor_strides), [(16, 20),
                                                                (32, 30)]):
            self.assert_almost_list_equal(expected_strides, actual_strides)

        for actual_offsets, expected_offsets in zip(
                list(anchor_generator_object._anchor_offsets), [(8, 9),
                                                                (10, 11)]):
            self.assert_almost_list_equal(expected_offsets, actual_offsets)

        self.assertTrue(anchor_generator_object._normalize_coordinates)
コード例 #8
0
    def test_build_ssd_anchor_generator_with_non_default_parameters(self):
        anchor_generator_text_proto = """
      ssd_anchor_generator {
        num_layers: 2
        min_scale: 0.3
        max_scale: 0.8
        aspect_ratios: [2.0]
        height_stride: 16
        height_stride: 32
        width_stride: 20
        width_stride: 30
        height_offset: 8
        height_offset: 16
        width_offset: 0
        width_offset: 10
      }
    """
        anchor_generator_proto = anchor_generator_pb2.AnchorGenerator()
        text_format.Merge(anchor_generator_text_proto, anchor_generator_proto)
        anchor_generator_object = anchor_generator_builder.build(
            anchor_generator_proto)
        self.assertTrue(
            isinstance(
                anchor_generator_object,
                multiple_grid_anchor_generator.MultipleGridAnchorGenerator))

        for actual_scales, expected_scales in zip(
                list(anchor_generator_object._scales), [(0.1, 0.3, 0.3),
                                                        (0.8, 0.894)]):
            self.assert_almost_list_equal(expected_scales,
                                          actual_scales,
                                          delta=1e-2)

        for actual_aspect_ratio, expected_aspect_ratio in zip(
                list(anchor_generator_object._aspect_ratios), [(1.0, 2.0, 0.5),
                                                               (2.0, 1.0)]):
            self.assert_almost_list_equal(expected_aspect_ratio,
                                          actual_aspect_ratio)

        for actual_strides, expected_strides in zip(
                list(anchor_generator_object._anchor_strides), [(16, 20),
                                                                (32, 30)]):
            self.assert_almost_list_equal(expected_strides, actual_strides)

        for actual_offsets, expected_offsets in zip(
                list(anchor_generator_object._anchor_offsets), [(8, 0),
                                                                (16, 10)]):
            self.assert_almost_list_equal(expected_offsets, actual_offsets)

        self.assertAllClose(anchor_generator_object._base_anchor_size,
                            [1.0, 1.0])
コード例 #9
0
 def test_build_multiscale_anchor_generator_with_anchors_in_pixel_coordinates(
         self):
     anchor_generator_text_proto = """
   multiscale_anchor_generator {
     aspect_ratios: [1.0]
     normalize_coordinates: false
   }
 """
     anchor_generator_proto = anchor_generator_pb2.AnchorGenerator()
     text_format.Merge(anchor_generator_text_proto, anchor_generator_proto)
     anchor_generator_object = anchor_generator_builder.build(
         anchor_generator_proto)
     self.assertIsInstance(
         anchor_generator_object,
         multiscale_grid_anchor_generator.MultiscaleGridAnchorGenerator)
     self.assertFalse(anchor_generator_object._normalize_coordinates)
コード例 #10
0
 def test_build_grid_anchor_generator_with_defaults(self):
   anchor_generator_text_proto = """
     grid_anchor_generator {
     }
    """
   anchor_generator_proto = anchor_generator_pb2.AnchorGenerator()
   text_format.Merge(anchor_generator_text_proto, anchor_generator_proto)
   anchor_generator_object = anchor_generator_builder.build(
       anchor_generator_proto)
   self.assertIsInstance(anchor_generator_object,
                         grid_anchor_generator.GridAnchorGenerator)
   self.assertListEqual(anchor_generator_object._scales, [])
   self.assertListEqual(anchor_generator_object._aspect_ratios, [])
   self.assertAllEqual(anchor_generator_object._anchor_offset, [0, 0])
   self.assertAllEqual(anchor_generator_object._anchor_stride, [16, 16])
   self.assertAllEqual(anchor_generator_object._base_anchor_size, [256, 256])
コード例 #11
0
def generate_ssd_model(num_classes):

    ssd_config = ssd_pb2.Ssd()
    ssd_config.num_classes = num_classes

    # config box_coder
    from object_detection.protos import box_coder_pb2
    from object_detection.protos import faster_rcnn_box_coder_pb2
    box_coder = box_coder_pb2.BoxCoder()
    faster_rcnn_box_coder = faster_rcnn_box_coder_pb2.FasterRcnnBoxCoder()
    faster_rcnn_box_coder.y_scale = 10.0
    faster_rcnn_box_coder.x_scale = 10.0
    faster_rcnn_box_coder.height_scale = 5.0
    faster_rcnn_box_coder.width_scale = 5.0
    box_coder.faster_rcnn_box_coder.CopyFrom(faster_rcnn_box_coder)
    ssd_config.box_coder.CopyFrom(box_coder)

    # config matcher
    from object_detection.protos import matcher_pb2
    from object_detection.protos import argmax_matcher_pb2
    argmax_matcher = argmax_matcher_pb2.ArgMaxMatcher()
    argmax_matcher.matched_threshold = 0.5
    argmax_matcher.unmatched_threshold = 0.5
    argmax_matcher.ignore_thresholds = False
    argmax_matcher.negatives_lower_than_unmatched = True
    argmax_matcher.force_match_for_each_row = True
    matcher = matcher_pb2.Matcher()
    matcher.argmax_matcher.CopyFrom(argmax_matcher)
    ssd_config.matcher.CopyFrom(matcher)

    # config anchor generator
    from object_detection.protos import anchor_generator_pb2
    from object_detection.protos import ssd_anchor_generator_pb2
    ssd_anchor_generator = ssd_anchor_generator_pb2.SsdAnchorGenerator()
    ssd_anchor_generator.num_layers = 6
    ssd_anchor_generator.min_scale = 0.2
    ssd_anchor_generator.max_scale = 0.95
    ssd_anchor_generator.aspect_ratios.extend([1.0, 2.0, 0.5, 3.0, 0.3333])
    anchor_generator = anchor_generator_pb2.AnchorGenerator()
    anchor_generator.ssd_anchor_generator.CopyFrom(ssd_anchor_generator)
    ssd_config.anchor_generator.CopyFrom(anchor_generator)

    return ssd_config
コード例 #12
0
 def test_build_ssd_anchor_generator_with_custom_interpolated_scale(self):
   anchor_generator_text_proto = """
     ssd_anchor_generator {
       aspect_ratios: [0.5]
       interpolated_scale_aspect_ratio: 0.5
       reduce_boxes_in_lowest_layer: false
     }
   """
   anchor_generator_proto = anchor_generator_pb2.AnchorGenerator()
   text_format.Merge(anchor_generator_text_proto, anchor_generator_proto)
   anchor_generator_object = anchor_generator_builder.build(
       anchor_generator_proto)
   self.assertIsInstance(anchor_generator_object,
                         multiple_grid_anchor_generator.
                         MultipleGridAnchorGenerator)
   for actual_aspect_ratio, expected_aspect_ratio in zip(
       list(anchor_generator_object._aspect_ratios),
       6 * [(0.5, 0.5)]):
     self.assert_almost_list_equal(expected_aspect_ratio, actual_aspect_ratio)
コード例 #13
0
 def test_build_ssd_anchor_generator_with_custom_scales(self):
     anchor_generator_text_proto = """
   ssd_anchor_generator {
     aspect_ratios: [1.0]
     scales: [0.1, 0.15, 0.2, 0.4, 0.6, 0.8]
     reduce_boxes_in_lowest_layer: false
   }
 """
     anchor_generator_proto = anchor_generator_pb2.AnchorGenerator()
     text_format.Merge(anchor_generator_text_proto, anchor_generator_proto)
     anchor_generator_object = anchor_generator_builder.build(
         anchor_generator_proto)
     self.assertIsInstance(
         anchor_generator_object,
         multiple_grid_anchor_generator.MultipleGridAnchorGenerator)
     for actual_scales, expected_scales in zip(
             list(anchor_generator_object._scales),
         [(0.1, math.sqrt(0.1 * 0.15)), (0.15, math.sqrt(0.15 * 0.2)),
          (0.2, math.sqrt(0.2 * 0.4)), (0.4, math.sqrt(0.4 * 0.6)),
          (0.6, math.sqrt(0.6 * 0.8)), (0.8, math.sqrt(0.8 * 1.0))]):
         self.assert_almost_list_equal(expected_scales,
                                       actual_scales,
                                       delta=1e-2)