Skip to content

Commit f51d5f8

Browse files
authored
Setting weights_backbone to its fully BC value (#5653)
* Replace default `weights_backbone=None` with its BC values. * Fixing tests * Fix linter
1 parent 0a612cb commit f51d5f8

16 files changed

+51
-39
lines changed

test/test_backbone_utils.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,30 +23,30 @@ def get_available_models():
2323
@pytest.mark.parametrize("backbone_name", ("resnet18", "resnet50"))
2424
def test_resnet_fpn_backbone(backbone_name):
2525
x = torch.rand(1, 3, 300, 300, dtype=torch.float32, device="cpu")
26-
model = resnet_fpn_backbone(backbone_name=backbone_name)
26+
model = resnet_fpn_backbone(backbone_name=backbone_name, weights=None)
2727
assert isinstance(model, BackboneWithFPN)
2828
y = model(x)
2929
assert list(y.keys()) == ["0", "1", "2", "3", "pool"]
3030

3131
with pytest.raises(ValueError, match=r"Trainable layers should be in the range"):
32-
resnet_fpn_backbone(backbone_name=backbone_name, trainable_layers=6)
32+
resnet_fpn_backbone(backbone_name=backbone_name, weights=None, trainable_layers=6)
3333
with pytest.raises(ValueError, match=r"Each returned layer should be in the range"):
34-
resnet_fpn_backbone(backbone_name=backbone_name, returned_layers=[0, 1, 2, 3])
34+
resnet_fpn_backbone(backbone_name=backbone_name, weights=None, returned_layers=[0, 1, 2, 3])
3535
with pytest.raises(ValueError, match=r"Each returned layer should be in the range"):
36-
resnet_fpn_backbone(backbone_name=backbone_name, returned_layers=[2, 3, 4, 5])
36+
resnet_fpn_backbone(backbone_name=backbone_name, weights=None, returned_layers=[2, 3, 4, 5])
3737

3838

3939
@pytest.mark.parametrize("backbone_name", ("mobilenet_v2", "mobilenet_v3_large", "mobilenet_v3_small"))
4040
def test_mobilenet_backbone(backbone_name):
4141
with pytest.raises(ValueError, match=r"Trainable layers should be in the range"):
42-
mobilenet_backbone(backbone_name=backbone_name, fpn=False, trainable_layers=-1)
42+
mobilenet_backbone(backbone_name=backbone_name, weights=None, fpn=False, trainable_layers=-1)
4343
with pytest.raises(ValueError, match=r"Each returned layer should be in the range"):
44-
mobilenet_backbone(backbone_name=backbone_name, fpn=True, returned_layers=[-1, 0, 1, 2])
44+
mobilenet_backbone(backbone_name=backbone_name, weights=None, fpn=True, returned_layers=[-1, 0, 1, 2])
4545
with pytest.raises(ValueError, match=r"Each returned layer should be in the range"):
46-
mobilenet_backbone(backbone_name=backbone_name, fpn=True, returned_layers=[3, 4, 5, 6])
47-
model_fpn = mobilenet_backbone(backbone_name=backbone_name, fpn=True)
46+
mobilenet_backbone(backbone_name=backbone_name, weights=None, fpn=True, returned_layers=[3, 4, 5, 6])
47+
model_fpn = mobilenet_backbone(backbone_name=backbone_name, weights=None, fpn=True)
4848
assert isinstance(model_fpn, BackboneWithFPN)
49-
model = mobilenet_backbone(backbone_name=backbone_name, fpn=False)
49+
model = mobilenet_backbone(backbone_name=backbone_name, weights=None, fpn=False)
5050
assert isinstance(model, torch.nn.Sequential)
5151

5252

test/test_models.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -428,7 +428,7 @@ def test_inception_v3_eval():
428428

429429

430430
def test_fasterrcnn_double():
431-
model = models.detection.fasterrcnn_resnet50_fpn(num_classes=50)
431+
model = models.detection.fasterrcnn_resnet50_fpn(num_classes=50, weights=None, weights_backbone=None)
432432
model.double()
433433
model.eval()
434434
input_shape = (3, 300, 300)
@@ -467,7 +467,7 @@ def checkOut(out):
467467
assert "scores" in out[0]
468468
assert "labels" in out[0]
469469

470-
model = models.detection.fasterrcnn_resnet50_fpn(num_classes=50)
470+
model = models.detection.fasterrcnn_resnet50_fpn(num_classes=50, weights=None, weights_backbone=None)
471471
model.cuda()
472472
model.eval()
473473
input_shape = (3, 300, 300)
@@ -583,6 +583,7 @@ def test_segmentation_model(model_fn, dev):
583583
set_rng_seed(0)
584584
defaults = {
585585
"num_classes": 10,
586+
"weights_backbone": None,
586587
"input_shape": (1, 3, 32, 32),
587588
}
588589
model_name = model_fn.__name__
@@ -644,6 +645,7 @@ def test_detection_model(model_fn, dev):
644645
set_rng_seed(0)
645646
defaults = {
646647
"num_classes": 50,
648+
"weights_backbone": None,
647649
"input_shape": (3, 300, 300),
648650
}
649651
model_name = model_fn.__name__
@@ -738,7 +740,7 @@ def compute_mean_std(tensor):
738740
@pytest.mark.parametrize("model_fn", get_models_from_module(models.detection))
739741
def test_detection_model_validation(model_fn):
740742
set_rng_seed(0)
741-
model = model_fn(num_classes=50)
743+
model = model_fn(num_classes=50, weights=None, weights_backbone=None)
742744
input_shape = (3, 300, 300)
743745
x = [torch.rand(input_shape)]
744746

@@ -851,7 +853,7 @@ def test_detection_model_trainable_backbone_layers(model_fn, disable_weight_load
851853
max_trainable = _model_tests_values[model_name]["max_trainable"]
852854
n_trainable_params = []
853855
for trainable_layers in range(0, max_trainable + 1):
854-
model = model_fn(weights_backbone="DEFAULT", trainable_backbone_layers=trainable_layers)
856+
model = model_fn(weights=None, weights_backbone="DEFAULT", trainable_backbone_layers=trainable_layers)
855857

856858
n_trainable_params.append(len([p for p in model.parameters() if p.requires_grad]))
857859
assert n_trainable_params == _model_tests_values[model_name]["n_trn_params_per_layer"]

test/test_models_detection_negative_samples.py

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,9 @@ def test_assign_targets_to_proposals(self):
9999
],
100100
)
101101
def test_forward_negative_sample_frcnn(self, name):
102-
model = torchvision.models.detection.__dict__[name](num_classes=2, min_size=100, max_size=100)
102+
model = torchvision.models.detection.__dict__[name](
103+
weights=None, weights_backbone=None, num_classes=2, min_size=100, max_size=100
104+
)
103105

104106
images, targets = self._make_empty_sample()
105107
loss_dict = model(images, targets)
@@ -108,7 +110,9 @@ def test_forward_negative_sample_frcnn(self, name):
108110
assert_equal(loss_dict["loss_rpn_box_reg"], torch.tensor(0.0))
109111

110112
def test_forward_negative_sample_mrcnn(self):
111-
model = torchvision.models.detection.maskrcnn_resnet50_fpn(num_classes=2, min_size=100, max_size=100)
113+
model = torchvision.models.detection.maskrcnn_resnet50_fpn(
114+
weights=None, weights_backbone=None, num_classes=2, min_size=100, max_size=100
115+
)
112116

113117
images, targets = self._make_empty_sample(add_masks=True)
114118
loss_dict = model(images, targets)
@@ -118,7 +122,9 @@ def test_forward_negative_sample_mrcnn(self):
118122
assert_equal(loss_dict["loss_mask"], torch.tensor(0.0))
119123

120124
def test_forward_negative_sample_krcnn(self):
121-
model = torchvision.models.detection.keypointrcnn_resnet50_fpn(num_classes=2, min_size=100, max_size=100)
125+
model = torchvision.models.detection.keypointrcnn_resnet50_fpn(
126+
weights=None, weights_backbone=None, num_classes=2, min_size=100, max_size=100
127+
)
122128

123129
images, targets = self._make_empty_sample(add_keypoints=True)
124130
loss_dict = model(images, targets)
@@ -128,15 +134,19 @@ def test_forward_negative_sample_krcnn(self):
128134
assert_equal(loss_dict["loss_keypoint"], torch.tensor(0.0))
129135

130136
def test_forward_negative_sample_retinanet(self):
131-
model = torchvision.models.detection.retinanet_resnet50_fpn(num_classes=2, min_size=100, max_size=100)
137+
model = torchvision.models.detection.retinanet_resnet50_fpn(
138+
weights=None, weights_backbone=None, num_classes=2, min_size=100, max_size=100
139+
)
132140

133141
images, targets = self._make_empty_sample()
134142
loss_dict = model(images, targets)
135143

136144
assert_equal(loss_dict["bbox_regression"], torch.tensor(0.0))
137145

138146
def test_forward_negative_sample_fcos(self):
139-
model = torchvision.models.detection.fcos_resnet50_fpn(num_classes=2, min_size=100, max_size=100)
147+
model = torchvision.models.detection.fcos_resnet50_fpn(
148+
weights=None, weights_backbone=None, num_classes=2, min_size=100, max_size=100
149+
)
140150

141151
images, targets = self._make_empty_sample()
142152
loss_dict = model(images, targets)
@@ -145,7 +155,7 @@ def test_forward_negative_sample_fcos(self):
145155
assert_equal(loss_dict["bbox_ctrness"], torch.tensor(0.0))
146156

147157
def test_forward_negative_sample_ssd(self):
148-
model = torchvision.models.detection.ssd300_vgg16(num_classes=2)
158+
model = torchvision.models.detection.ssd300_vgg16(weights=None, weights_backbone=None, num_classes=2)
149159

150160
images, targets = self._make_empty_sample()
151161
loss_dict = model(images, targets)

test/test_models_detection_utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ def test_resnet_fpn_backbone_frozen_layers(self, train_layers, exp_froz_params):
4040
# be frozen for each trainable_backbone_layers parameter value
4141
# i.e all 53 params are frozen if trainable_backbone_layers=0
4242
# ad first 24 params are frozen if trainable_backbone_layers=2
43-
model = backbone_utils.resnet_fpn_backbone("resnet50", trainable_layers=train_layers)
43+
model = backbone_utils.resnet_fpn_backbone("resnet50", weights=None, trainable_layers=train_layers)
4444
# boolean list that is true if the param at that index is frozen
4545
is_frozen = [not parameter.requires_grad for _, parameter in model.named_parameters()]
4646
# check that expected initial number of layers are frozen

test/tracing/frcnn/trace_model.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
HERE = osp.dirname(osp.abspath(__file__))
77
ASSETS = osp.dirname(osp.dirname(HERE))
88

9-
model = torchvision.models.detection.fasterrcnn_resnet50_fpn()
9+
model = torchvision.models.detection.fasterrcnn_resnet50_fpn(weights=None, weights_backbone=None)
1010
model.eval()
1111

1212
traced_model = torch.jit.script(model)

torchvision/models/detection/backbone_utils.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ def forward(self, x: Tensor) -> Dict[str, Tensor]:
6262
def resnet_fpn_backbone(
6363
*,
6464
backbone_name: str,
65-
weights: Optional[WeightsEnum] = None,
65+
weights: Optional[WeightsEnum],
6666
norm_layer: Callable[..., nn.Module] = misc_nn_ops.FrozenBatchNorm2d,
6767
trainable_layers: int = 3,
6868
returned_layers: Optional[List[int]] = None,
@@ -171,8 +171,8 @@ def _validate_trainable_layers(
171171
def mobilenet_backbone(
172172
*,
173173
backbone_name: str,
174-
weights: Optional[WeightsEnum] = None,
175-
fpn: bool = True,
174+
weights: Optional[WeightsEnum],
175+
fpn: bool,
176176
norm_layer: Callable[..., nn.Module] = misc_nn_ops.FrozenBatchNorm2d,
177177
trainable_layers: int = 2,
178178
returned_layers: Optional[List[int]] = None,

torchvision/models/detection/faster_rcnn.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ def fasterrcnn_resnet50_fpn(
384384
weights: Optional[FasterRCNN_ResNet50_FPN_Weights] = None,
385385
progress: bool = True,
386386
num_classes: Optional[int] = None,
387-
weights_backbone: Optional[ResNet50_Weights] = None,
387+
weights_backbone: Optional[ResNet50_Weights] = ResNet50_Weights.IMAGENET1K_V1,
388388
trainable_backbone_layers: Optional[int] = None,
389389
**kwargs: Any,
390390
) -> FasterRCNN:
@@ -529,7 +529,7 @@ def fasterrcnn_mobilenet_v3_large_320_fpn(
529529
weights: Optional[FasterRCNN_MobileNet_V3_Large_320_FPN_Weights] = None,
530530
progress: bool = True,
531531
num_classes: Optional[int] = None,
532-
weights_backbone: Optional[MobileNet_V3_Large_Weights] = None,
532+
weights_backbone: Optional[MobileNet_V3_Large_Weights] = MobileNet_V3_Large_Weights.IMAGENET1K_V1,
533533
trainable_backbone_layers: Optional[int] = None,
534534
**kwargs: Any,
535535
) -> FasterRCNN:
@@ -586,7 +586,7 @@ def fasterrcnn_mobilenet_v3_large_fpn(
586586
weights: Optional[FasterRCNN_MobileNet_V3_Large_FPN_Weights] = None,
587587
progress: bool = True,
588588
num_classes: Optional[int] = None,
589-
weights_backbone: Optional[MobileNet_V3_Large_Weights] = None,
589+
weights_backbone: Optional[MobileNet_V3_Large_Weights] = MobileNet_V3_Large_Weights.IMAGENET1K_V1,
590590
trainable_backbone_layers: Optional[int] = None,
591591
**kwargs: Any,
592592
) -> FasterRCNN:

torchvision/models/detection/fcos.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -670,7 +670,7 @@ def fcos_resnet50_fpn(
670670
weights: Optional[FCOS_ResNet50_FPN_Weights] = None,
671671
progress: bool = True,
672672
num_classes: Optional[int] = None,
673-
weights_backbone: Optional[ResNet50_Weights] = None,
673+
weights_backbone: Optional[ResNet50_Weights] = ResNet50_Weights.IMAGENET1K_V1,
674674
trainable_backbone_layers: Optional[int] = None,
675675
**kwargs: Any,
676676
) -> FCOS:

torchvision/models/detection/keypoint_rcnn.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,7 @@ def keypointrcnn_resnet50_fpn(
356356
progress: bool = True,
357357
num_classes: Optional[int] = None,
358358
num_keypoints: Optional[int] = None,
359-
weights_backbone: Optional[ResNet50_Weights] = None,
359+
weights_backbone: Optional[ResNet50_Weights] = ResNet50_Weights.IMAGENET1K_V1,
360360
trainable_backbone_layers: Optional[int] = None,
361361
**kwargs: Any,
362362
) -> KeypointRCNN:

torchvision/models/detection/mask_rcnn.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ def maskrcnn_resnet50_fpn(
333333
weights: Optional[MaskRCNN_ResNet50_FPN_Weights] = None,
334334
progress: bool = True,
335335
num_classes: Optional[int] = None,
336-
weights_backbone: Optional[ResNet50_Weights] = None,
336+
weights_backbone: Optional[ResNet50_Weights] = ResNet50_Weights.IMAGENET1K_V1,
337337
trainable_backbone_layers: Optional[int] = None,
338338
**kwargs: Any,
339339
) -> MaskRCNN:

torchvision/models/detection/retinanet.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -612,7 +612,7 @@ def retinanet_resnet50_fpn(
612612
weights: Optional[RetinaNet_ResNet50_FPN_Weights] = None,
613613
progress: bool = True,
614614
num_classes: Optional[int] = None,
615-
weights_backbone: Optional[ResNet50_Weights] = None,
615+
weights_backbone: Optional[ResNet50_Weights] = ResNet50_Weights.IMAGENET1K_V1,
616616
trainable_backbone_layers: Optional[int] = None,
617617
**kwargs: Any,
618618
) -> RetinaNet:

torchvision/models/detection/ssd.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -570,7 +570,7 @@ def ssd300_vgg16(
570570
weights: Optional[SSD300_VGG16_Weights] = None,
571571
progress: bool = True,
572572
num_classes: Optional[int] = None,
573-
weights_backbone: Optional[VGG16_Weights] = None,
573+
weights_backbone: Optional[VGG16_Weights] = VGG16_Weights.IMAGENET1K_FEATURES,
574574
trainable_backbone_layers: Optional[int] = None,
575575
**kwargs: Any,
576576
) -> SSD:

torchvision/models/detection/ssdlite.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ def ssdlite320_mobilenet_v3_large(
212212
weights: Optional[SSDLite320_MobileNet_V3_Large_Weights] = None,
213213
progress: bool = True,
214214
num_classes: Optional[int] = None,
215-
weights_backbone: Optional[MobileNet_V3_Large_Weights] = None,
215+
weights_backbone: Optional[MobileNet_V3_Large_Weights] = MobileNet_V3_Large_Weights.IMAGENET1K_V1,
216216
trainable_backbone_layers: Optional[int] = None,
217217
norm_layer: Optional[Callable[..., nn.Module]] = None,
218218
**kwargs: Any,

torchvision/models/segmentation/deeplabv3.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ def deeplabv3_resnet50(
215215
progress: bool = True,
216216
num_classes: Optional[int] = None,
217217
aux_loss: Optional[bool] = None,
218-
weights_backbone: Optional[ResNet50_Weights] = None,
218+
weights_backbone: Optional[ResNet50_Weights] = ResNet50_Weights.IMAGENET1K_V1,
219219
**kwargs: Any,
220220
) -> DeepLabV3:
221221
"""Constructs a DeepLabV3 model with a ResNet-50 backbone.
@@ -256,7 +256,7 @@ def deeplabv3_resnet101(
256256
progress: bool = True,
257257
num_classes: Optional[int] = None,
258258
aux_loss: Optional[bool] = None,
259-
weights_backbone: Optional[ResNet101_Weights] = None,
259+
weights_backbone: Optional[ResNet101_Weights] = ResNet101_Weights.IMAGENET1K_V1,
260260
**kwargs: Any,
261261
) -> DeepLabV3:
262262
"""Constructs a DeepLabV3 model with a ResNet-101 backbone.
@@ -297,7 +297,7 @@ def deeplabv3_mobilenet_v3_large(
297297
progress: bool = True,
298298
num_classes: Optional[int] = None,
299299
aux_loss: Optional[bool] = None,
300-
weights_backbone: Optional[MobileNet_V3_Large_Weights] = None,
300+
weights_backbone: Optional[MobileNet_V3_Large_Weights] = MobileNet_V3_Large_Weights.IMAGENET1K_V1,
301301
**kwargs: Any,
302302
) -> DeepLabV3:
303303
"""Constructs a DeepLabV3 model with a MobileNetV3-Large backbone.

torchvision/models/segmentation/fcn.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ def fcn_resnet50(
111111
progress: bool = True,
112112
num_classes: Optional[int] = None,
113113
aux_loss: Optional[bool] = None,
114-
weights_backbone: Optional[ResNet50_Weights] = None,
114+
weights_backbone: Optional[ResNet50_Weights] = ResNet50_Weights.IMAGENET1K_V1,
115115
**kwargs: Any,
116116
) -> FCN:
117117
"""Constructs a Fully-Convolutional Network model with a ResNet-50 backbone.
@@ -152,7 +152,7 @@ def fcn_resnet101(
152152
progress: bool = True,
153153
num_classes: Optional[int] = None,
154154
aux_loss: Optional[bool] = None,
155-
weights_backbone: Optional[ResNet101_Weights] = None,
155+
weights_backbone: Optional[ResNet101_Weights] = ResNet101_Weights.IMAGENET1K_V1,
156156
**kwargs: Any,
157157
) -> FCN:
158158
"""Constructs a Fully-Convolutional Network model with a ResNet-101 backbone.

torchvision/models/segmentation/lraspp.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ def lraspp_mobilenet_v3_large(
121121
weights: Optional[LRASPP_MobileNet_V3_Large_Weights] = None,
122122
progress: bool = True,
123123
num_classes: Optional[int] = None,
124-
weights_backbone: Optional[MobileNet_V3_Large_Weights] = None,
124+
weights_backbone: Optional[MobileNet_V3_Large_Weights] = MobileNet_V3_Large_Weights.IMAGENET1K_V1,
125125
**kwargs: Any,
126126
) -> LRASPP:
127127
"""Constructs a Lite R-ASPP Network model with a MobileNetV3-Large backbone.

0 commit comments

Comments
 (0)