コード例 #1
0
ファイル: test_rpn.py プロジェクト: MrParosk/detectron2
    def test_rpn_scriptability(self):
        cfg = get_cfg()
        proposal_generator = RPN(cfg, {
            "res4": ShapeSpec(channels=1024, stride=16)
        }).eval()
        num_images = 2
        images_tensor = torch.rand(num_images, 30, 40)
        image_sizes = [(32, 32), (30, 40)]
        images = ImageList(images_tensor, image_sizes)
        features = {"res4": torch.rand(num_images, 1024, 1, 2)}

        fields = {"proposal_boxes": Boxes, "objectness_logits": torch.Tensor}
        proposal_generator_ts = scripting_with_instances(
            proposal_generator, fields)

        proposals, _ = proposal_generator(images, features)
        proposals_ts, _ = proposal_generator_ts(images, features)

        for proposal, proposal_ts in zip(proposals, proposals_ts):
            self.assertEqual(proposal.image_size, proposal_ts.image_size)
            self.assertTrue(
                torch.equal(proposal.proposal_boxes.tensor,
                            proposal_ts.proposal_boxes.tensor))
            self.assertTrue(
                torch.equal(proposal.objectness_logits,
                            proposal_ts.objectness_logits))
コード例 #2
0
ファイル: test_rpn.py プロジェクト: zhuhui1214/detectron2
    def test_rpn(self):
        torch.manual_seed(121)
        cfg = get_cfg()
        backbone = build_backbone(cfg)
        proposal_generator = RPN(cfg, backbone.output_shape())
        num_images = 2
        images_tensor = torch.rand(num_images, 20, 30)
        image_sizes = [(10, 10), (20, 30)]
        images = ImageList(images_tensor, image_sizes)
        image_shape = (15, 15)
        num_channels = 1024
        features = {"res4": torch.rand(num_images, num_channels, 1, 2)}
        gt_boxes = torch.tensor([[1, 1, 3, 3], [2, 2, 6, 6]], dtype=torch.float32)
        gt_instances = Instances(image_shape)
        gt_instances.gt_boxes = Boxes(gt_boxes)
        with EventStorage():  # capture events in a new storage to discard them
            proposals, proposal_losses = proposal_generator(
                images, features, [gt_instances[0], gt_instances[1]]
            )

        expected_losses = {
            "loss_rpn_cls": torch.tensor(0.0804563984),
            "loss_rpn_loc": torch.tensor(0.0990132466),
        }
        for name in expected_losses.keys():
            err_msg = "proposal_losses[{}] = {}, expected losses = {}".format(
                name, proposal_losses[name], expected_losses[name]
            )
            self.assertTrue(torch.allclose(proposal_losses[name], expected_losses[name]), err_msg)

        expected_proposal_boxes = [
            Boxes(torch.tensor([[0, 0, 10, 10], [7.3365392685, 0, 10, 10]])),
            Boxes(
                torch.tensor(
                    [
                        [0, 0, 30, 20],
                        [0, 0, 16.7862777710, 13.1362524033],
                        [0, 0, 30, 13.3173446655],
                        [0, 0, 10.8602609634, 20],
                        [7.7165775299, 0, 27.3875980377, 20],
                    ]
                )
            ),
        ]

        expected_objectness_logits = [
            torch.tensor([0.1225359365, -0.0133192837]),
            torch.tensor([0.1415634006, 0.0989848152, 0.0565387346, -0.0072308783, -0.0428492837]),
        ]

        for proposal, expected_proposal_box, im_size, expected_objectness_logit in zip(
            proposals, expected_proposal_boxes, image_sizes, expected_objectness_logits
        ):
            self.assertEqual(len(proposal), len(expected_proposal_box))
            self.assertEqual(proposal.image_size, im_size)
            self.assertTrue(
                torch.allclose(proposal.proposal_boxes.tensor, expected_proposal_box.tensor)
            )
            self.assertTrue(torch.allclose(proposal.objectness_logits, expected_objectness_logit))
コード例 #3
0
 def verify_rpn(self, conv_dims, expected_conv_dims):
     torch.manual_seed(121)
     cfg = get_cfg()
     cfg.MODEL.RPN.CONV_DIMS = conv_dims
     backbone = build_backbone(cfg)
     proposal_generator = RPN(cfg, backbone.output_shape())
     for k, conv in enumerate(proposal_generator.rpn_head.conv):
         self.assertEqual(expected_conv_dims[k], conv.out_channels)
     return proposal_generator
コード例 #4
0
ファイル: test_rpn.py プロジェクト: MrParosk/detectron2
    def test_rpn(self):
        torch.manual_seed(121)
        cfg = get_cfg()
        backbone = build_backbone(cfg)
        proposal_generator = RPN(cfg, backbone.output_shape())
        num_images = 2
        images_tensor = torch.rand(num_images, 20, 30)
        image_sizes = [(10, 10), (20, 30)]
        images = ImageList(images_tensor, image_sizes)
        image_shape = (15, 15)
        num_channels = 1024
        features = {"res4": torch.rand(num_images, num_channels, 1, 2)}
        gt_boxes = torch.tensor([[1, 1, 3, 3], [2, 2, 6, 6]],
                                dtype=torch.float32)
        gt_instances = Instances(image_shape)
        gt_instances.gt_boxes = Boxes(gt_boxes)
        with EventStorage():  # capture events in a new storage to discard them
            proposals, proposal_losses = proposal_generator(
                images, features, [gt_instances[0], gt_instances[1]])

        expected_losses = {
            "loss_rpn_cls": torch.tensor(0.08011703193),
            "loss_rpn_loc": torch.tensor(0.101470276),
        }
        for name in expected_losses.keys():
            err_msg = "proposal_losses[{}] = {}, expected losses = {}".format(
                name, proposal_losses[name], expected_losses[name])
            self.assertTrue(
                torch.allclose(proposal_losses[name], expected_losses[name]),
                err_msg)

        self.assertEqual(len(proposals), len(image_sizes))
        for proposal, im_size in zip(proposals, image_sizes):
            self.assertEqual(proposal.image_size, im_size)

        expected_proposal_box = torch.tensor([[0, 0, 10, 10],
                                              [7.2702, 0, 10, 10]])
        expected_objectness_logit = torch.tensor([0.1596, -0.0007])
        self.assertTrue(
            torch.allclose(proposals[0].proposal_boxes.tensor,
                           expected_proposal_box,
                           atol=1e-4))
        self.assertTrue(
            torch.allclose(proposals[0].objectness_logits,
                           expected_objectness_logit,
                           atol=1e-4))
コード例 #5
0
    def test_rpn(self):
        torch.manual_seed(121)
        cfg = get_cfg()
        backbone = build_backbone(cfg)
        proposal_generator = RPN(cfg, backbone.output_shape())
        (gt_instances, features, images,
         image_sizes) = self.get_gt_and_features()
        with EventStorage():  # capture events in a new storage to discard them
            proposals, proposal_losses = proposal_generator(
                images, features, [gt_instances[0], gt_instances[1]])

        expected_losses = {
            "loss_rpn_cls": torch.tensor(0.08011703193),
            "loss_rpn_loc": torch.tensor(0.101470276),
        }
        for name in expected_losses.keys():
            err_msg = "proposal_losses[{}] = {}, expected losses = {}".format(
                name, proposal_losses[name], expected_losses[name])
            self.assertTrue(
                torch.allclose(proposal_losses[name], expected_losses[name]),
                err_msg)

        self.assertEqual(len(proposals), len(image_sizes))
        for proposal, im_size in zip(proposals, image_sizes):
            self.assertEqual(proposal.image_size, im_size)

        expected_proposal_box = torch.tensor([[0, 0, 10, 10],
                                              [7.2702, 0, 10, 10]])
        expected_objectness_logit = torch.tensor([0.1596, -0.0007])
        self.assertTrue(
            torch.allclose(proposals[0].proposal_boxes.tensor,
                           expected_proposal_box,
                           atol=1e-4))
        self.assertTrue(
            torch.allclose(proposals[0].objectness_logits,
                           expected_objectness_logit,
                           atol=1e-4))