diff --git a/test/test_backbone_utils.py b/test/test_backbone_utils.py index bee52c06075..60d8f8d167d 100644 --- a/test/test_backbone_utils.py +++ b/test/test_backbone_utils.py @@ -23,30 +23,30 @@ def get_available_models(): @pytest.mark.parametrize("backbone_name", ("resnet18", "resnet50")) def test_resnet_fpn_backbone(backbone_name): x = torch.rand(1, 3, 300, 300, dtype=torch.float32, device="cpu") - model = resnet_fpn_backbone(backbone_name=backbone_name) + model = resnet_fpn_backbone(backbone_name=backbone_name, weights=None) assert isinstance(model, BackboneWithFPN) y = model(x) assert list(y.keys()) == ["0", "1", "2", "3", "pool"] with pytest.raises(ValueError, match=r"Trainable layers should be in the range"): - resnet_fpn_backbone(backbone_name=backbone_name, trainable_layers=6) + resnet_fpn_backbone(backbone_name=backbone_name, weights=None, trainable_layers=6) with pytest.raises(ValueError, match=r"Each returned layer should be in the range"): - resnet_fpn_backbone(backbone_name=backbone_name, returned_layers=[0, 1, 2, 3]) + resnet_fpn_backbone(backbone_name=backbone_name, weights=None, returned_layers=[0, 1, 2, 3]) with pytest.raises(ValueError, match=r"Each returned layer should be in the range"): - resnet_fpn_backbone(backbone_name=backbone_name, returned_layers=[2, 3, 4, 5]) + resnet_fpn_backbone(backbone_name=backbone_name, weights=None, returned_layers=[2, 3, 4, 5]) @pytest.mark.parametrize("backbone_name", ("mobilenet_v2", "mobilenet_v3_large", "mobilenet_v3_small")) def test_mobilenet_backbone(backbone_name): with pytest.raises(ValueError, match=r"Trainable layers should be in the range"): - mobilenet_backbone(backbone_name=backbone_name, fpn=False, trainable_layers=-1) + mobilenet_backbone(backbone_name=backbone_name, weights=None, fpn=False, trainable_layers=-1) with pytest.raises(ValueError, match=r"Each returned layer should be in the range"): - mobilenet_backbone(backbone_name=backbone_name, fpn=True, returned_layers=[-1, 0, 1, 2]) + mobilenet_backbone(backbone_name=backbone_name, weights=None, fpn=True, returned_layers=[-1, 0, 1, 2]) with pytest.raises(ValueError, match=r"Each returned layer should be in the range"): - mobilenet_backbone(backbone_name=backbone_name, fpn=True, returned_layers=[3, 4, 5, 6]) - model_fpn = mobilenet_backbone(backbone_name=backbone_name, fpn=True) + mobilenet_backbone(backbone_name=backbone_name, weights=None, fpn=True, returned_layers=[3, 4, 5, 6]) + model_fpn = mobilenet_backbone(backbone_name=backbone_name, weights=None, fpn=True) assert isinstance(model_fpn, BackboneWithFPN) - model = mobilenet_backbone(backbone_name=backbone_name, fpn=False) + model = mobilenet_backbone(backbone_name=backbone_name, weights=None, fpn=False) assert isinstance(model, torch.nn.Sequential) diff --git a/test/test_models.py b/test/test_models.py index 0d45d61df13..bbd96c1c3a4 100644 --- a/test/test_models.py +++ b/test/test_models.py @@ -428,7 +428,7 @@ def test_inception_v3_eval(): def test_fasterrcnn_double(): - model = models.detection.fasterrcnn_resnet50_fpn(num_classes=50) + model = models.detection.fasterrcnn_resnet50_fpn(num_classes=50, weights=None, weights_backbone=None) model.double() model.eval() input_shape = (3, 300, 300) @@ -467,7 +467,7 @@ def checkOut(out): assert "scores" in out[0] assert "labels" in out[0] - model = models.detection.fasterrcnn_resnet50_fpn(num_classes=50) + model = models.detection.fasterrcnn_resnet50_fpn(num_classes=50, weights=None, weights_backbone=None) model.cuda() model.eval() input_shape = (3, 300, 300) @@ -583,6 +583,7 @@ def test_segmentation_model(model_fn, dev): set_rng_seed(0) defaults = { "num_classes": 10, + "weights_backbone": None, "input_shape": (1, 3, 32, 32), } model_name = model_fn.__name__ @@ -644,6 +645,7 @@ def test_detection_model(model_fn, dev): set_rng_seed(0) defaults = { "num_classes": 50, + "weights_backbone": None, "input_shape": (3, 300, 300), } model_name = model_fn.__name__ @@ -738,7 +740,7 @@ def compute_mean_std(tensor): @pytest.mark.parametrize("model_fn", get_models_from_module(models.detection)) def test_detection_model_validation(model_fn): set_rng_seed(0) - model = model_fn(num_classes=50) + model = model_fn(num_classes=50, weights=None, weights_backbone=None) input_shape = (3, 300, 300) x = [torch.rand(input_shape)] @@ -851,7 +853,7 @@ def test_detection_model_trainable_backbone_layers(model_fn, disable_weight_load max_trainable = _model_tests_values[model_name]["max_trainable"] n_trainable_params = [] for trainable_layers in range(0, max_trainable + 1): - model = model_fn(weights_backbone="DEFAULT", trainable_backbone_layers=trainable_layers) + model = model_fn(weights=None, weights_backbone="DEFAULT", trainable_backbone_layers=trainable_layers) n_trainable_params.append(len([p for p in model.parameters() if p.requires_grad])) assert n_trainable_params == _model_tests_values[model_name]["n_trn_params_per_layer"] diff --git a/test/test_models_detection_negative_samples.py b/test/test_models_detection_negative_samples.py index 3746c2f7920..c4efbd96cf3 100644 --- a/test/test_models_detection_negative_samples.py +++ b/test/test_models_detection_negative_samples.py @@ -99,7 +99,9 @@ def test_assign_targets_to_proposals(self): ], ) def test_forward_negative_sample_frcnn(self, name): - model = torchvision.models.detection.__dict__[name](num_classes=2, min_size=100, max_size=100) + model = torchvision.models.detection.__dict__[name]( + weights=None, weights_backbone=None, num_classes=2, min_size=100, max_size=100 + ) images, targets = self._make_empty_sample() loss_dict = model(images, targets) @@ -108,7 +110,9 @@ def test_forward_negative_sample_frcnn(self, name): assert_equal(loss_dict["loss_rpn_box_reg"], torch.tensor(0.0)) def test_forward_negative_sample_mrcnn(self): - model = torchvision.models.detection.maskrcnn_resnet50_fpn(num_classes=2, min_size=100, max_size=100) + model = torchvision.models.detection.maskrcnn_resnet50_fpn( + weights=None, weights_backbone=None, num_classes=2, min_size=100, max_size=100 + ) images, targets = self._make_empty_sample(add_masks=True) loss_dict = model(images, targets) @@ -118,7 +122,9 @@ def test_forward_negative_sample_mrcnn(self): assert_equal(loss_dict["loss_mask"], torch.tensor(0.0)) def test_forward_negative_sample_krcnn(self): - model = torchvision.models.detection.keypointrcnn_resnet50_fpn(num_classes=2, min_size=100, max_size=100) + model = torchvision.models.detection.keypointrcnn_resnet50_fpn( + weights=None, weights_backbone=None, num_classes=2, min_size=100, max_size=100 + ) images, targets = self._make_empty_sample(add_keypoints=True) loss_dict = model(images, targets) @@ -128,7 +134,9 @@ def test_forward_negative_sample_krcnn(self): assert_equal(loss_dict["loss_keypoint"], torch.tensor(0.0)) def test_forward_negative_sample_retinanet(self): - model = torchvision.models.detection.retinanet_resnet50_fpn(num_classes=2, min_size=100, max_size=100) + model = torchvision.models.detection.retinanet_resnet50_fpn( + weights=None, weights_backbone=None, num_classes=2, min_size=100, max_size=100 + ) images, targets = self._make_empty_sample() loss_dict = model(images, targets) @@ -136,7 +144,9 @@ def test_forward_negative_sample_retinanet(self): assert_equal(loss_dict["bbox_regression"], torch.tensor(0.0)) def test_forward_negative_sample_fcos(self): - model = torchvision.models.detection.fcos_resnet50_fpn(num_classes=2, min_size=100, max_size=100) + model = torchvision.models.detection.fcos_resnet50_fpn( + weights=None, weights_backbone=None, num_classes=2, min_size=100, max_size=100 + ) images, targets = self._make_empty_sample() loss_dict = model(images, targets) @@ -145,7 +155,7 @@ def test_forward_negative_sample_fcos(self): assert_equal(loss_dict["bbox_ctrness"], torch.tensor(0.0)) def test_forward_negative_sample_ssd(self): - model = torchvision.models.detection.ssd300_vgg16(num_classes=2) + model = torchvision.models.detection.ssd300_vgg16(weights=None, weights_backbone=None, num_classes=2) images, targets = self._make_empty_sample() loss_dict = model(images, targets) diff --git a/test/test_models_detection_utils.py b/test/test_models_detection_utils.py index 5cfc7e04d3f..a160113cbbf 100644 --- a/test/test_models_detection_utils.py +++ b/test/test_models_detection_utils.py @@ -40,7 +40,7 @@ def test_resnet_fpn_backbone_frozen_layers(self, train_layers, exp_froz_params): # be frozen for each trainable_backbone_layers parameter value # i.e all 53 params are frozen if trainable_backbone_layers=0 # ad first 24 params are frozen if trainable_backbone_layers=2 - model = backbone_utils.resnet_fpn_backbone("resnet50", trainable_layers=train_layers) + model = backbone_utils.resnet_fpn_backbone("resnet50", weights=None, trainable_layers=train_layers) # boolean list that is true if the param at that index is frozen is_frozen = [not parameter.requires_grad for _, parameter in model.named_parameters()] # check that expected initial number of layers are frozen diff --git a/test/tracing/frcnn/trace_model.py b/test/tracing/frcnn/trace_model.py index 768954d29b2..b5ec50bdab1 100644 --- a/test/tracing/frcnn/trace_model.py +++ b/test/tracing/frcnn/trace_model.py @@ -6,7 +6,7 @@ HERE = osp.dirname(osp.abspath(__file__)) ASSETS = osp.dirname(osp.dirname(HERE)) -model = torchvision.models.detection.fasterrcnn_resnet50_fpn() +model = torchvision.models.detection.fasterrcnn_resnet50_fpn(weights=None, weights_backbone=None) model.eval() traced_model = torch.jit.script(model) diff --git a/torchvision/models/detection/backbone_utils.py b/torchvision/models/detection/backbone_utils.py index 20b78254fcc..b767756692b 100644 --- a/torchvision/models/detection/backbone_utils.py +++ b/torchvision/models/detection/backbone_utils.py @@ -62,7 +62,7 @@ def forward(self, x: Tensor) -> Dict[str, Tensor]: def resnet_fpn_backbone( *, backbone_name: str, - weights: Optional[WeightsEnum] = None, + weights: Optional[WeightsEnum], norm_layer: Callable[..., nn.Module] = misc_nn_ops.FrozenBatchNorm2d, trainable_layers: int = 3, returned_layers: Optional[List[int]] = None, @@ -171,8 +171,8 @@ def _validate_trainable_layers( def mobilenet_backbone( *, backbone_name: str, - weights: Optional[WeightsEnum] = None, - fpn: bool = True, + weights: Optional[WeightsEnum], + fpn: bool, norm_layer: Callable[..., nn.Module] = misc_nn_ops.FrozenBatchNorm2d, trainable_layers: int = 2, returned_layers: Optional[List[int]] = None, diff --git a/torchvision/models/detection/faster_rcnn.py b/torchvision/models/detection/faster_rcnn.py index 7d18fbe90a3..2c1e6358c58 100644 --- a/torchvision/models/detection/faster_rcnn.py +++ b/torchvision/models/detection/faster_rcnn.py @@ -384,7 +384,7 @@ def fasterrcnn_resnet50_fpn( weights: Optional[FasterRCNN_ResNet50_FPN_Weights] = None, progress: bool = True, num_classes: Optional[int] = None, - weights_backbone: Optional[ResNet50_Weights] = None, + weights_backbone: Optional[ResNet50_Weights] = ResNet50_Weights.IMAGENET1K_V1, trainable_backbone_layers: Optional[int] = None, **kwargs: Any, ) -> FasterRCNN: @@ -529,7 +529,7 @@ def fasterrcnn_mobilenet_v3_large_320_fpn( weights: Optional[FasterRCNN_MobileNet_V3_Large_320_FPN_Weights] = None, progress: bool = True, num_classes: Optional[int] = None, - weights_backbone: Optional[MobileNet_V3_Large_Weights] = None, + weights_backbone: Optional[MobileNet_V3_Large_Weights] = MobileNet_V3_Large_Weights.IMAGENET1K_V1, trainable_backbone_layers: Optional[int] = None, **kwargs: Any, ) -> FasterRCNN: @@ -586,7 +586,7 @@ def fasterrcnn_mobilenet_v3_large_fpn( weights: Optional[FasterRCNN_MobileNet_V3_Large_FPN_Weights] = None, progress: bool = True, num_classes: Optional[int] = None, - weights_backbone: Optional[MobileNet_V3_Large_Weights] = None, + weights_backbone: Optional[MobileNet_V3_Large_Weights] = MobileNet_V3_Large_Weights.IMAGENET1K_V1, trainable_backbone_layers: Optional[int] = None, **kwargs: Any, ) -> FasterRCNN: diff --git a/torchvision/models/detection/fcos.py b/torchvision/models/detection/fcos.py index 27e54a565f2..7b1b3f87ba8 100644 --- a/torchvision/models/detection/fcos.py +++ b/torchvision/models/detection/fcos.py @@ -670,7 +670,7 @@ def fcos_resnet50_fpn( weights: Optional[FCOS_ResNet50_FPN_Weights] = None, progress: bool = True, num_classes: Optional[int] = None, - weights_backbone: Optional[ResNet50_Weights] = None, + weights_backbone: Optional[ResNet50_Weights] = ResNet50_Weights.IMAGENET1K_V1, trainable_backbone_layers: Optional[int] = None, **kwargs: Any, ) -> FCOS: diff --git a/torchvision/models/detection/keypoint_rcnn.py b/torchvision/models/detection/keypoint_rcnn.py index 2a554a6f56e..dc03c693e1c 100644 --- a/torchvision/models/detection/keypoint_rcnn.py +++ b/torchvision/models/detection/keypoint_rcnn.py @@ -356,7 +356,7 @@ def keypointrcnn_resnet50_fpn( progress: bool = True, num_classes: Optional[int] = None, num_keypoints: Optional[int] = None, - weights_backbone: Optional[ResNet50_Weights] = None, + weights_backbone: Optional[ResNet50_Weights] = ResNet50_Weights.IMAGENET1K_V1, trainable_backbone_layers: Optional[int] = None, **kwargs: Any, ) -> KeypointRCNN: diff --git a/torchvision/models/detection/mask_rcnn.py b/torchvision/models/detection/mask_rcnn.py index fb60ffcbb0a..a6cb731c0df 100644 --- a/torchvision/models/detection/mask_rcnn.py +++ b/torchvision/models/detection/mask_rcnn.py @@ -333,7 +333,7 @@ def maskrcnn_resnet50_fpn( weights: Optional[MaskRCNN_ResNet50_FPN_Weights] = None, progress: bool = True, num_classes: Optional[int] = None, - weights_backbone: Optional[ResNet50_Weights] = None, + weights_backbone: Optional[ResNet50_Weights] = ResNet50_Weights.IMAGENET1K_V1, trainable_backbone_layers: Optional[int] = None, **kwargs: Any, ) -> MaskRCNN: diff --git a/torchvision/models/detection/retinanet.py b/torchvision/models/detection/retinanet.py index 49b9acf45e4..2242c1e09bb 100644 --- a/torchvision/models/detection/retinanet.py +++ b/torchvision/models/detection/retinanet.py @@ -612,7 +612,7 @@ def retinanet_resnet50_fpn( weights: Optional[RetinaNet_ResNet50_FPN_Weights] = None, progress: bool = True, num_classes: Optional[int] = None, - weights_backbone: Optional[ResNet50_Weights] = None, + weights_backbone: Optional[ResNet50_Weights] = ResNet50_Weights.IMAGENET1K_V1, trainable_backbone_layers: Optional[int] = None, **kwargs: Any, ) -> RetinaNet: diff --git a/torchvision/models/detection/ssd.py b/torchvision/models/detection/ssd.py index c30919e621c..a3b8ffda178 100644 --- a/torchvision/models/detection/ssd.py +++ b/torchvision/models/detection/ssd.py @@ -570,7 +570,7 @@ def ssd300_vgg16( weights: Optional[SSD300_VGG16_Weights] = None, progress: bool = True, num_classes: Optional[int] = None, - weights_backbone: Optional[VGG16_Weights] = None, + weights_backbone: Optional[VGG16_Weights] = VGG16_Weights.IMAGENET1K_FEATURES, trainable_backbone_layers: Optional[int] = None, **kwargs: Any, ) -> SSD: diff --git a/torchvision/models/detection/ssdlite.py b/torchvision/models/detection/ssdlite.py index 93023337d11..5fb5b402fef 100644 --- a/torchvision/models/detection/ssdlite.py +++ b/torchvision/models/detection/ssdlite.py @@ -212,7 +212,7 @@ def ssdlite320_mobilenet_v3_large( weights: Optional[SSDLite320_MobileNet_V3_Large_Weights] = None, progress: bool = True, num_classes: Optional[int] = None, - weights_backbone: Optional[MobileNet_V3_Large_Weights] = None, + weights_backbone: Optional[MobileNet_V3_Large_Weights] = MobileNet_V3_Large_Weights.IMAGENET1K_V1, trainable_backbone_layers: Optional[int] = None, norm_layer: Optional[Callable[..., nn.Module]] = None, **kwargs: Any, diff --git a/torchvision/models/segmentation/deeplabv3.py b/torchvision/models/segmentation/deeplabv3.py index 41ab34bae07..092a81f643b 100644 --- a/torchvision/models/segmentation/deeplabv3.py +++ b/torchvision/models/segmentation/deeplabv3.py @@ -215,7 +215,7 @@ def deeplabv3_resnet50( progress: bool = True, num_classes: Optional[int] = None, aux_loss: Optional[bool] = None, - weights_backbone: Optional[ResNet50_Weights] = None, + weights_backbone: Optional[ResNet50_Weights] = ResNet50_Weights.IMAGENET1K_V1, **kwargs: Any, ) -> DeepLabV3: """Constructs a DeepLabV3 model with a ResNet-50 backbone. @@ -256,7 +256,7 @@ def deeplabv3_resnet101( progress: bool = True, num_classes: Optional[int] = None, aux_loss: Optional[bool] = None, - weights_backbone: Optional[ResNet101_Weights] = None, + weights_backbone: Optional[ResNet101_Weights] = ResNet101_Weights.IMAGENET1K_V1, **kwargs: Any, ) -> DeepLabV3: """Constructs a DeepLabV3 model with a ResNet-101 backbone. @@ -297,7 +297,7 @@ def deeplabv3_mobilenet_v3_large( progress: bool = True, num_classes: Optional[int] = None, aux_loss: Optional[bool] = None, - weights_backbone: Optional[MobileNet_V3_Large_Weights] = None, + weights_backbone: Optional[MobileNet_V3_Large_Weights] = MobileNet_V3_Large_Weights.IMAGENET1K_V1, **kwargs: Any, ) -> DeepLabV3: """Constructs a DeepLabV3 model with a MobileNetV3-Large backbone. diff --git a/torchvision/models/segmentation/fcn.py b/torchvision/models/segmentation/fcn.py index 6a760be36dc..6b6d14ffe32 100644 --- a/torchvision/models/segmentation/fcn.py +++ b/torchvision/models/segmentation/fcn.py @@ -111,7 +111,7 @@ def fcn_resnet50( progress: bool = True, num_classes: Optional[int] = None, aux_loss: Optional[bool] = None, - weights_backbone: Optional[ResNet50_Weights] = None, + weights_backbone: Optional[ResNet50_Weights] = ResNet50_Weights.IMAGENET1K_V1, **kwargs: Any, ) -> FCN: """Constructs a Fully-Convolutional Network model with a ResNet-50 backbone. @@ -152,7 +152,7 @@ def fcn_resnet101( progress: bool = True, num_classes: Optional[int] = None, aux_loss: Optional[bool] = None, - weights_backbone: Optional[ResNet101_Weights] = None, + weights_backbone: Optional[ResNet101_Weights] = ResNet101_Weights.IMAGENET1K_V1, **kwargs: Any, ) -> FCN: """Constructs a Fully-Convolutional Network model with a ResNet-101 backbone. diff --git a/torchvision/models/segmentation/lraspp.py b/torchvision/models/segmentation/lraspp.py index 33684526c6b..fc6d14d366b 100644 --- a/torchvision/models/segmentation/lraspp.py +++ b/torchvision/models/segmentation/lraspp.py @@ -121,7 +121,7 @@ def lraspp_mobilenet_v3_large( weights: Optional[LRASPP_MobileNet_V3_Large_Weights] = None, progress: bool = True, num_classes: Optional[int] = None, - weights_backbone: Optional[MobileNet_V3_Large_Weights] = None, + weights_backbone: Optional[MobileNet_V3_Large_Weights] = MobileNet_V3_Large_Weights.IMAGENET1K_V1, **kwargs: Any, ) -> LRASPP: """Constructs a Lite R-ASPP Network model with a MobileNetV3-Large backbone.