Ejemplo n.º 1
0
    def __init__(self, learning_rate: float = 0.0001, num_classes: int = 91,
                 backbone: str = None, fpn: bool = True,
                 pretrained_backbone: str = None, trainable_backbone_layers: int = 3,
                 **kwargs, ):
        """
        Args:
            learning_rate: the learning rate
            num_classes: number of detection classes (including background)
            pretrained: if true, returns a model pre-trained on COCO train2017
            pretrained_backbone (str): if "imagenet", returns a model with backbone pre-trained on Imagenet
            trainable_backbone_layers: number of trainable resnet layers starting from final block
        """
        super().__init__()
        self.learning_rate = learning_rate
        self.num_classes = num_classes
        self.backbone = backbone
        if backbone is None:
            self.model = retinanet_resnet50_fpn(pretrained=True, **kwargs)

            self.model.head = RetinaNetHead(in_channels=self.model.backbone.out_channels,
                                            num_anchors=self.model.head.classification_head.num_anchors,
                                            num_classes=num_classes, **kwargs)

        else:
            backbone_model = create_retinanet_backbone(self.backbone, fpn, pretrained_backbone,
                                                       trainable_backbone_layers, **kwargs)
            self.model = RetinaNet(backbone_model, num_classes=num_classes, **kwargs)
Ejemplo n.º 2
0
    def test_retina_fpn(self):
        for bbone in fpn_supported_models:
            backbone = retinanet.create_retinanet_backbone(backbone=bbone,
                                                           pretrained=None)
            self.assertTrue(isinstance(backbone, nn.Module))

            retina_model = retinanet.create_retinanet(num_classes=3,
                                                      backbone=backbone)
            self.assertTrue(isinstance(retina_model, nn.Module))
Ejemplo n.º 3
0
 def test_train_sanity_fit_cuda(self):
     for bbone in fpn_supported_models:
         backbone = retinanet.create_retinanet_backbone(backbone=bbone,
                                                        pretrained=None)
         self.assertTrue(isinstance(backbone, nn.Module))
         retina_model = retinanet.create_retinanet(num_classes=3,
                                                   backbone=backbone)
         self.assertTrue(isinstance(retina_model, nn.Module))
         result = retinanet.train_sanity_fit(retina_model,
                                             train_loader,
                                             "cuda",
                                             num_batches=10)
         self.assertTrue(result)
Ejemplo n.º 4
0
 def test_val_step_fpn(self):
     for bbone in fpn_supported_models:
         backbone = retinanet.create_retinanet_backbone(backbone=bbone,
                                                        pretrained=None)
         self.assertTrue(isinstance(backbone, nn.Module))
         retina_model = retinanet.create_vision_retinanet(num_classes=3,
                                                          backbone=backbone)
         self.assertTrue(isinstance(retina_model, nn.Module))
         val_metrics = retinanet.val_step(retina_model,
                                          train_loader,
                                          "cpu",
                                          num_batches=4)
         self.assertIsInstance(val_metrics, Dict)
         exp_keys = ("iou", "giou")
         for exp_k in exp_keys:
             self.assertTrue(exp_k in val_metrics.keys())
Ejemplo n.º 5
0
 def test_fit(self):
     for bbone in fpn_supported_models:
         backbone = retinanet.create_retinanet_backbone(backbone=bbone,
                                                        pretrained=None)
         self.assertTrue(isinstance(backbone, nn.Module))
         retina_model = retinanet.create_vision_retinanet(num_classes=3,
                                                          backbone=backbone)
         self.assertTrue(isinstance(retina_model, nn.Module))
         opt = torch.optim.SGD(retina_model.parameters(), lr=1e-3)
         history = retinanet.fit(retina_model,
                                 1,
                                 train_loader,
                                 val_loader,
                                 "cpu",
                                 opt,
                                 num_batches=4)
         self.assertIsInstance(history, Dict)
         exp_keys = ("train", "val")
         for exp_k in exp_keys:
             self.assertTrue(exp_k in history.keys())
Ejemplo n.º 6
0
 def test_train_step_fpn_cuda(self):
     for bbone in fpn_supported_models:
         backbone = retinanet.create_retinanet_backbone(backbone=bbone,
                                                        pretrained=None)
         self.assertTrue(isinstance(backbone, nn.Module))
         retina_model = retinanet.create_retinanet(num_classes=3,
                                                   backbone=backbone)
         self.assertTrue(isinstance(retina_model, nn.Module))
         opt = torch.optim.SGD(retina_model.parameters(), lr=1e-3)
         train_metrics = retinanet.train_step(retina_model,
                                              train_loader,
                                              "cuda",
                                              opt,
                                              num_batches=4)
         self.assertIsInstance(train_metrics, Dict)
         exp_keys = (
             "loss_classifier",
             "loss_box_reg",
         )
         for exp_k in exp_keys:
             self.assertTrue(exp_k in train_metrics.keys())
                                               train_loader,
                                               device="cuda",
                                               optimizer=optimizer,
                                               scheduler=lr_scheduler,
                                               log_interval=100,
                                               scaler=scaler)
        val_metrics = faster_rcnn.val_step(model, test_loader, device="cuda")
        print("Training Metrics: ")
        pprint(train_metrics)
        print("Validation metrics")
        pprint(val_metrics)

    # Training Retina Net

    backbone = retinanet.create_retinanet_backbone("resnet50",
                                                   fpn=True,
                                                   pretrained="imagenet",
                                                   trainable_backbone_layers=3)

    # our dataset has two classes only - background and person
    num_classes = 2
    model = retinanet.create_vision_retinanet(num_classes=num_classes,
                                              backbone=backbone)

    # Let's use Mixed Precision training

    scaler = amp.GradScaler()
    params = [p for p in model.parameters() if p.requires_grad]
    optimizer = torch.optim.SGD(params,
                                lr=0.005,
                                momentum=0.9,
                                weight_decay=0.0005)