From cbeaafd005a2bdc1415e9db3f1d583d52b257eeb Mon Sep 17 00:00:00 2001 From: Abhijit Deo <72816663+abhi-glitchhg@users.noreply.github.com> Date: Sun, 23 Jan 2022 16:33:50 +0530 Subject: [PATCH 01/21] replace assert with valueerror --- .../models/detection/backbone_utils.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/torchvision/models/detection/backbone_utils.py b/torchvision/models/detection/backbone_utils.py index 808c69dfe73..cf9072d9a5c 100644 --- a/torchvision/models/detection/backbone_utils.py +++ b/torchvision/models/detection/backbone_utils.py @@ -111,7 +111,8 @@ def _resnet_fpn_extractor( ) -> BackboneWithFPN: # select layers that wont be frozen - assert 0 <= trainable_layers <= 5 + if trainable_layers not in range(0, 6): + raise ValueError(f" trainable_layers expected to be in [0,5], got {trainable_layers}") layers_to_train = ["layer4", "layer3", "layer2", "layer1", "conv1"][:trainable_layers] if trainable_layers == 5: layers_to_train.append("bn1") @@ -124,7 +125,8 @@ def _resnet_fpn_extractor( if returned_layers is None: returned_layers = [1, 2, 3, 4] - assert min(returned_layers) > 0 and max(returned_layers) < 5 + if min(returned_layers) <= 0 or max(returned_layers) >= 5: + raise ValueError(f" `returned_layers` object should contain integers between [1,4], got {returned_layers} ") return_layers = {f"layer{k}": str(v) for v, k in enumerate(returned_layers)} in_channels_stage2 = backbone.inplanes // 8 @@ -152,7 +154,10 @@ def _validate_trainable_layers( # by default freeze first blocks if trainable_backbone_layers is None: trainable_backbone_layers = default_value - assert 0 <= trainable_backbone_layers <= max_value + if trainable_backbone_layers not in range(0, max_value + 1): + raise ValueError( + f"trainable_layers expected to be in between [0,{max_value}], got {trainable_backbone_layers} " + ) return trainable_backbone_layers @@ -183,7 +188,8 @@ def _mobilenet_extractor( num_stages = len(stage_indices) # find the index of the layer from which we wont freeze - assert 0 <= trainable_layers <= num_stages + if trainable_layers not in range(0, num_stages + 1): + raise ValueError(f"trainable_layers expected to be in between [0,{num_stages}], got {trainable_layers} ") freeze_before = len(backbone) if trainable_layers == 0 else stage_indices[num_stages - trainable_layers] for b in backbone[:freeze_before]: @@ -197,7 +203,10 @@ def _mobilenet_extractor( if returned_layers is None: returned_layers = [num_stages - 2, num_stages - 1] - assert min(returned_layers) >= 0 and max(returned_layers) < num_stages + if min(returned_layers) <= 0 or max(returned_layers) >= num_stages: + raise ValueError( + f" returned_layers object should contain integers between [1,{num_stages - 1}], got {returned_layers} " + ) return_layers = {f"{stage_indices[k]}": str(v) for v, k in enumerate(returned_layers)} in_channels_list = [backbone[stage_indices[i]].out_channels for i in returned_layers] From 84d9cebb788e61e1a051cc3dfca02b485687f22a Mon Sep 17 00:00:00 2001 From: piyush-kgp Date: Sun, 23 Jan 2022 23:15:43 +0530 Subject: [PATCH 02/21] pytest should raise ValueError not AssertionError --- test/test_models_detection_utils.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/test/test_models_detection_utils.py b/test/test_models_detection_utils.py index 6551a1a759f..4536837f356 100644 --- a/test/test_models_detection_utils.py +++ b/test/test_models_detection_utils.py @@ -3,8 +3,7 @@ import pytest import torch from common_utils import assert_equal -from torchvision.models.detection import _utils -from torchvision.models.detection import backbone_utils +from torchvision.models.detection import _utils, backbone_utils from torchvision.models.detection.transform import GeneralizedRCNNTransform @@ -54,7 +53,7 @@ def test_validate_resnet_inputs_detection(self): ) assert ret == 3 # can't go beyond 5 - with pytest.raises(AssertionError): + with pytest.raises(ValueError): ret = backbone_utils._validate_trainable_layers( pretrained=True, trainable_backbone_layers=6, max_value=5, default_value=3 ) From b8cfa28a3053a40c489eed5c8496fc0fe4703a30 Mon Sep 17 00:00:00 2001 From: Abhijit Deo <72816663+abhi-glitchhg@users.noreply.github.com> Date: Mon, 24 Jan 2022 10:23:36 +0530 Subject: [PATCH 03/21] minor edit --- torchvision/models/detection/backbone_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/torchvision/models/detection/backbone_utils.py b/torchvision/models/detection/backbone_utils.py index cf9072d9a5c..2eedbf3e8da 100644 --- a/torchvision/models/detection/backbone_utils.py +++ b/torchvision/models/detection/backbone_utils.py @@ -177,7 +177,7 @@ def mobilenet_backbone( def _mobilenet_extractor( backbone: Union[mobilenet.MobileNetV2, mobilenet.MobileNetV3], fpn: bool, - trainable_layers, + trainable_layers: int, returned_layers: Optional[List[int]] = None, extra_blocks: Optional[ExtraFPNBlock] = None, ) -> nn.Module: From 830e0055937639d21484d3ff4e07bfe1e740d130 Mon Sep 17 00:00:00 2001 From: Abhijit Deo <72816663+abhi-glitchhg@users.noreply.github.com> Date: Mon, 24 Jan 2022 11:20:31 +0530 Subject: [PATCH 04/21] raise assert changed to raise valueerror in test --- test/test_models_detection_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_models_detection_utils.py b/test/test_models_detection_utils.py index 6551a1a759f..6fd33a8a48c 100644 --- a/test/test_models_detection_utils.py +++ b/test/test_models_detection_utils.py @@ -54,7 +54,7 @@ def test_validate_resnet_inputs_detection(self): ) assert ret == 3 # can't go beyond 5 - with pytest.raises(AssertionError): + with pytest.raises(ValueError): ret = backbone_utils._validate_trainable_layers( pretrained=True, trainable_backbone_layers=6, max_value=5, default_value=3 ) From 1a79a055903a609efd1c7223648db5825d32cded Mon Sep 17 00:00:00 2001 From: Abhijit Deo <72816663+abhi-glitchhg@users.noreply.github.com> Date: Mon, 24 Jan 2022 11:26:08 +0530 Subject: [PATCH 05/21] Update torchvision/models/detection/backbone_utils.py Co-authored-by: Aditya Oke <47158509+oke-aditya@users.noreply.github.com> --- torchvision/models/detection/backbone_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/torchvision/models/detection/backbone_utils.py b/torchvision/models/detection/backbone_utils.py index 2eedbf3e8da..af47b2777c0 100644 --- a/torchvision/models/detection/backbone_utils.py +++ b/torchvision/models/detection/backbone_utils.py @@ -111,7 +111,7 @@ def _resnet_fpn_extractor( ) -> BackboneWithFPN: # select layers that wont be frozen - if trainable_layers not in range(0, 6): + if trainable_layers < 0 or trainable_layers > 5: raise ValueError(f" trainable_layers expected to be in [0,5], got {trainable_layers}") layers_to_train = ["layer4", "layer3", "layer2", "layer1", "conv1"][:trainable_layers] if trainable_layers == 5: From b8b22c8499387781bc4b37ca4e902f256a95b084 Mon Sep 17 00:00:00 2001 From: Abhijit Deo <72816663+abhi-glitchhg@users.noreply.github.com> Date: Mon, 24 Jan 2022 11:26:43 +0530 Subject: [PATCH 06/21] Update torchvision/models/detection/backbone_utils.py Co-authored-by: Aditya Oke <47158509+oke-aditya@users.noreply.github.com> --- torchvision/models/detection/backbone_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/torchvision/models/detection/backbone_utils.py b/torchvision/models/detection/backbone_utils.py index af47b2777c0..b783f3bfb54 100644 --- a/torchvision/models/detection/backbone_utils.py +++ b/torchvision/models/detection/backbone_utils.py @@ -188,7 +188,7 @@ def _mobilenet_extractor( num_stages = len(stage_indices) # find the index of the layer from which we wont freeze - if trainable_layers not in range(0, num_stages + 1): + if trainable_layers < 0 or trainable_layers > num_stages: raise ValueError(f"trainable_layers expected to be in between [0,{num_stages}], got {trainable_layers} ") freeze_before = len(backbone) if trainable_layers == 0 else stage_indices[num_stages - trainable_layers] From 1bd39a9a6ac9bd9bed597aab768f57f9e0f1084a Mon Sep 17 00:00:00 2001 From: Abhijit Deo <72816663+abhi-glitchhg@users.noreply.github.com> Date: Mon, 24 Jan 2022 11:36:22 +0530 Subject: [PATCH 07/21] minor edits --- torchvision/models/detection/backbone_utils.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/torchvision/models/detection/backbone_utils.py b/torchvision/models/detection/backbone_utils.py index b783f3bfb54..19e75843d3a 100644 --- a/torchvision/models/detection/backbone_utils.py +++ b/torchvision/models/detection/backbone_utils.py @@ -126,7 +126,7 @@ def _resnet_fpn_extractor( if returned_layers is None: returned_layers = [1, 2, 3, 4] if min(returned_layers) <= 0 or max(returned_layers) >= 5: - raise ValueError(f" `returned_layers` object should contain integers between [1,4], got {returned_layers} ") + raise ValueError(f"Each returned layer must be in the range [1,4]. Got {returned_layers}") return_layers = {f"layer{k}": str(v) for v, k in enumerate(returned_layers)} in_channels_stage2 = backbone.inplanes // 8 @@ -154,9 +154,9 @@ def _validate_trainable_layers( # by default freeze first blocks if trainable_backbone_layers is None: trainable_backbone_layers = default_value - if trainable_backbone_layers not in range(0, max_value + 1): + if trainable_backbone_layers < 0 or trainable_backbone_layers > max_value: raise ValueError( - f"trainable_layers expected to be in between [0,{max_value}], got {trainable_backbone_layers} " + f"trainable_backbone_layers expected to be in between [0,{max_value}], got {trainable_backbone_layers} " ) return trainable_backbone_layers From 6ff20cc58b9ec98b6cbacd0b08ef83940ce65ab7 Mon Sep 17 00:00:00 2001 From: Abhijit Deo <72816663+abhi-glitchhg@users.noreply.github.com> Date: Mon, 24 Jan 2022 12:32:26 +0530 Subject: [PATCH 08/21] minor edits --- torchvision/models/detection/backbone_utils.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/torchvision/models/detection/backbone_utils.py b/torchvision/models/detection/backbone_utils.py index 19e75843d3a..27e0c28766b 100644 --- a/torchvision/models/detection/backbone_utils.py +++ b/torchvision/models/detection/backbone_utils.py @@ -154,10 +154,10 @@ def _validate_trainable_layers( # by default freeze first blocks if trainable_backbone_layers is None: trainable_backbone_layers = default_value - if trainable_backbone_layers < 0 or trainable_backbone_layers > max_value: - raise ValueError( - f"trainable_backbone_layers expected to be in between [0,{max_value}], got {trainable_backbone_layers} " - ) + if trainable_backbone_layers < 0 or trainable_backbone_layers > max_value: + raise ValueError( + f"trainable_backbone_layers expected to be in between [0,{max_value}], got {trainable_backbone_layers} " + ) return trainable_backbone_layers @@ -203,10 +203,10 @@ def _mobilenet_extractor( if returned_layers is None: returned_layers = [num_stages - 2, num_stages - 1] - if min(returned_layers) <= 0 or max(returned_layers) >= num_stages: - raise ValueError( - f" returned_layers object should contain integers between [1,{num_stages - 1}], got {returned_layers} " - ) + if min(returned_layers) <= 0 or max(returned_layers) >= num_stages: + raise ValueError( + f" returned_layers object should contain integers between [1,{num_stages - 1}], got {returned_layers} " + ) return_layers = {f"{stage_indices[k]}": str(v) for v, k in enumerate(returned_layers)} in_channels_list = [backbone[stage_indices[i]].out_channels for i in returned_layers] From 1431ac388981e370a49d65381317c5a84daa6952 Mon Sep 17 00:00:00 2001 From: Abhijit Deo <72816663+abhi-glitchhg@users.noreply.github.com> Date: Mon, 24 Jan 2022 14:49:18 +0530 Subject: [PATCH 09/21] added one test --- test/test_backbone_utils.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/test_backbone_utils.py b/test/test_backbone_utils.py index 4a375b0036a..5a5a5c620e0 100644 --- a/test/test_backbone_utils.py +++ b/test/test_backbone_utils.py @@ -23,6 +23,9 @@ def test_resnet_fpn_backbone(backbone_name): y = resnet_fpn_backbone(backbone_name=backbone_name, pretrained=False)(x) assert list(y.keys()) == ["0", "1", "2", "3", "pool"] + with pytest.raises(ValueError): + y = resnet_fpn_backbone(backbone_name=backbone_name, pretrained=False, trainable_layers=6) + # Needed by TestFxFeatureExtraction.test_leaf_module_and_function def leaf_function(x): From ebc36896bfa2baddfdf40d7fea58677eb16be1b4 Mon Sep 17 00:00:00 2001 From: Abhijit Deo <72816663+abhi-glitchhg@users.noreply.github.com> Date: Mon, 24 Jan 2022 14:58:57 +0530 Subject: [PATCH 10/21] added another test --- test/test_backbone_utils.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/test_backbone_utils.py b/test/test_backbone_utils.py index 5a5a5c620e0..2c300855108 100644 --- a/test/test_backbone_utils.py +++ b/test/test_backbone_utils.py @@ -25,6 +25,8 @@ def test_resnet_fpn_backbone(backbone_name): with pytest.raises(ValueError): y = resnet_fpn_backbone(backbone_name=backbone_name, pretrained=False, trainable_layers=6) + with pytest.raises(ValueError): + y = resnet_fpn_backbone(backbone_name, False, returned_layers=[0, 1, 2, 3]) # Needed by TestFxFeatureExtraction.test_leaf_module_and_function From 93c796d7c7a90883ce5fdadc761da13c4620ad9b Mon Sep 17 00:00:00 2001 From: Abhijit Deo <72816663+abhi-glitchhg@users.noreply.github.com> Date: Mon, 24 Jan 2022 15:02:38 +0530 Subject: [PATCH 11/21] added another test --- test/test_backbone_utils.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/test_backbone_utils.py b/test/test_backbone_utils.py index 2c300855108..38d40cb14a4 100644 --- a/test/test_backbone_utils.py +++ b/test/test_backbone_utils.py @@ -27,6 +27,8 @@ def test_resnet_fpn_backbone(backbone_name): y = resnet_fpn_backbone(backbone_name=backbone_name, pretrained=False, trainable_layers=6) with pytest.raises(ValueError): y = resnet_fpn_backbone(backbone_name, False, returned_layers=[0, 1, 2, 3]) + with pytest.raises(ValueError): + y = resnet_fpn_backbone(backbone_name, False, returned_layers=[2, 3, 4, 5]) # Needed by TestFxFeatureExtraction.test_leaf_module_and_function From 9ba1eae362a61b33cf369129dba921079ea7878a Mon Sep 17 00:00:00 2001 From: piyush-kgp Date: Tue, 25 Jan 2022 13:52:05 +0530 Subject: [PATCH 12/21] test for mobilenet --- test/test_backbone_utils.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/test/test_backbone_utils.py b/test/test_backbone_utils.py index 38d40cb14a4..a616c11cccd 100644 --- a/test/test_backbone_utils.py +++ b/test/test_backbone_utils.py @@ -8,6 +8,7 @@ from torchvision import models from torchvision.models._utils import IntermediateLayerGetter from torchvision.models.detection.backbone_utils import resnet_fpn_backbone +from torchvision.models.detection.backbone_utils import mobilenet_backbone from torchvision.models.feature_extraction import create_feature_extractor from torchvision.models.feature_extraction import get_graph_node_names @@ -31,6 +32,16 @@ def test_resnet_fpn_backbone(backbone_name): y = resnet_fpn_backbone(backbone_name, False, 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): + y = mobilenet_backbone(backbone_name=backbone_name, pretrained=False, fpn=False, trainable_layers=-1) + with pytest.raises(ValueError): + y = mobilenet_backbone(backbone_name, False, fpn=True, returned_layers=[-1, 0, 1, 2]) + with pytest.raises(ValueError): + y = mobilenet_backbone(backbone_name, False, fpn=True, returned_layers=[3, 4, 5, 6]) + + # Needed by TestFxFeatureExtraction.test_leaf_module_and_function def leaf_function(x): return int(x) From 47569fd27718822cea282f9c3febd2d56a0590a8 Mon Sep 17 00:00:00 2001 From: piyush-kgp Date: Tue, 25 Jan 2022 13:55:34 +0530 Subject: [PATCH 13/21] ufmt formatting --- test/test_backbone_utils.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/test/test_backbone_utils.py b/test/test_backbone_utils.py index a616c11cccd..f874a6d1722 100644 --- a/test/test_backbone_utils.py +++ b/test/test_backbone_utils.py @@ -7,10 +7,8 @@ from common_utils import set_rng_seed from torchvision import models from torchvision.models._utils import IntermediateLayerGetter -from torchvision.models.detection.backbone_utils import resnet_fpn_backbone -from torchvision.models.detection.backbone_utils import mobilenet_backbone -from torchvision.models.feature_extraction import create_feature_extractor -from torchvision.models.feature_extraction import get_graph_node_names +from torchvision.models.detection.backbone_utils import mobilenet_backbone, resnet_fpn_backbone +from torchvision.models.feature_extraction import create_feature_extractor, get_graph_node_names def get_available_models(): From fd94a0aa8a08ecf31590011478fa2cf65bff34b2 Mon Sep 17 00:00:00 2001 From: piyush-kgp Date: Tue, 25 Jan 2022 14:17:11 +0530 Subject: [PATCH 14/21] cant have unused variables --- test/test_backbone_utils.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/test_backbone_utils.py b/test/test_backbone_utils.py index f874a6d1722..3e1718aba75 100644 --- a/test/test_backbone_utils.py +++ b/test/test_backbone_utils.py @@ -33,11 +33,11 @@ def test_resnet_fpn_backbone(backbone_name): @pytest.mark.parametrize("backbone_name", ("mobilenet_v2", "mobilenet_v3_large", "mobilenet_v3_small")) def test_mobilenet_backbone(backbone_name): with pytest.raises(ValueError): - y = mobilenet_backbone(backbone_name=backbone_name, pretrained=False, fpn=False, trainable_layers=-1) + mobilenet_backbone(backbone_name=backbone_name, pretrained=False, fpn=False, trainable_layers=-1) with pytest.raises(ValueError): - y = mobilenet_backbone(backbone_name, False, fpn=True, returned_layers=[-1, 0, 1, 2]) + mobilenet_backbone(backbone_name, False, fpn=True, returned_layers=[-1, 0, 1, 2]) with pytest.raises(ValueError): - y = mobilenet_backbone(backbone_name, False, fpn=True, returned_layers=[3, 4, 5, 6]) + mobilenet_backbone(backbone_name, False, fpn=True, returned_layers=[3, 4, 5, 6]) # Needed by TestFxFeatureExtraction.test_leaf_module_and_function From 40becbf85a4f203bee8f4a1e1faca5e76e3fcbc7 Mon Sep 17 00:00:00 2001 From: piyush-kgp Date: Tue, 25 Jan 2022 14:57:12 +0530 Subject: [PATCH 15/21] suggested changes --- test/test_backbone_utils.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/test/test_backbone_utils.py b/test/test_backbone_utils.py index 3e1718aba75..11dcf9098b1 100644 --- a/test/test_backbone_utils.py +++ b/test/test_backbone_utils.py @@ -22,21 +22,21 @@ def test_resnet_fpn_backbone(backbone_name): y = resnet_fpn_backbone(backbone_name=backbone_name, pretrained=False)(x) assert list(y.keys()) == ["0", "1", "2", "3", "pool"] - with pytest.raises(ValueError): - y = resnet_fpn_backbone(backbone_name=backbone_name, pretrained=False, trainable_layers=6) - with pytest.raises(ValueError): - y = resnet_fpn_backbone(backbone_name, False, returned_layers=[0, 1, 2, 3]) - with pytest.raises(ValueError): - y = resnet_fpn_backbone(backbone_name, False, returned_layers=[2, 3, 4, 5]) + with pytest.raises(ValueError, "trainable_layers expected to be in [0,5]"): + resnet_fpn_backbone(backbone_name=backbone_name, pretrained=False, trainable_layers=6) + with pytest.raises(ValueError, "Each returned layer must be in the range [1,4]"): + resnet_fpn_backbone(backbone_name, False, returned_layers=[0, 1, 2, 3]) + with pytest.raises(ValueError, "Each returned layer must be in the range [1,4]"): + resnet_fpn_backbone(backbone_name, False, 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): + with pytest.raises(ValueError, "trainable_layers expected to be in between [0,num_stages]"): mobilenet_backbone(backbone_name=backbone_name, pretrained=False, fpn=False, trainable_layers=-1) - with pytest.raises(ValueError): + with pytest.raises(ValueError, "returned_layers object should contain integers between [1,num_stages - 1]"): mobilenet_backbone(backbone_name, False, fpn=True, returned_layers=[-1, 0, 1, 2]) - with pytest.raises(ValueError): + with pytest.raises(ValueError "returned_layers object should contain integers between [1,num_stages - 1]"): mobilenet_backbone(backbone_name, False, fpn=True, returned_layers=[3, 4, 5, 6]) From 1083d890d14b28177ae01f36676ae7426683bd20 Mon Sep 17 00:00:00 2001 From: piyush-kgp Date: Tue, 25 Jan 2022 15:03:19 +0530 Subject: [PATCH 16/21] minor edit --- test/test_backbone_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_backbone_utils.py b/test/test_backbone_utils.py index 11dcf9098b1..8af786c1761 100644 --- a/test/test_backbone_utils.py +++ b/test/test_backbone_utils.py @@ -36,7 +36,7 @@ def test_mobilenet_backbone(backbone_name): mobilenet_backbone(backbone_name=backbone_name, pretrained=False, fpn=False, trainable_layers=-1) with pytest.raises(ValueError, "returned_layers object should contain integers between [1,num_stages - 1]"): mobilenet_backbone(backbone_name, False, fpn=True, returned_layers=[-1, 0, 1, 2]) - with pytest.raises(ValueError "returned_layers object should contain integers between [1,num_stages - 1]"): + with pytest.raises(ValueError, "returned_layers object should contain integers between [1,num_stages - 1]"): mobilenet_backbone(backbone_name, False, fpn=True, returned_layers=[3, 4, 5, 6]) From 3745a328364119d3ca1601f136389a1f3593c679 Mon Sep 17 00:00:00 2001 From: piyush-kgp Date: Tue, 25 Jan 2022 15:34:02 +0530 Subject: [PATCH 17/21] corrected bug pointed out by datumbox --- torchvision/models/detection/backbone_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/torchvision/models/detection/backbone_utils.py b/torchvision/models/detection/backbone_utils.py index 27e0c28766b..d224d917c5d 100644 --- a/torchvision/models/detection/backbone_utils.py +++ b/torchvision/models/detection/backbone_utils.py @@ -203,7 +203,7 @@ def _mobilenet_extractor( if returned_layers is None: returned_layers = [num_stages - 2, num_stages - 1] - if min(returned_layers) <= 0 or max(returned_layers) >= num_stages: + if min(returned_layers) < 0 or max(returned_layers) >= num_stages: raise ValueError( f" returned_layers object should contain integers between [1,{num_stages - 1}], got {returned_layers} " ) From 4804a8cc8b8c9d89368757af5bda9bab57acfed1 Mon Sep 17 00:00:00 2001 From: piyush-kgp Date: Tue, 25 Jan 2022 15:35:20 +0530 Subject: [PATCH 18/21] corrected bug pointed out by datumbox --- torchvision/models/detection/backbone_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/torchvision/models/detection/backbone_utils.py b/torchvision/models/detection/backbone_utils.py index d224d917c5d..b19411bf3d2 100644 --- a/torchvision/models/detection/backbone_utils.py +++ b/torchvision/models/detection/backbone_utils.py @@ -205,7 +205,7 @@ def _mobilenet_extractor( returned_layers = [num_stages - 2, num_stages - 1] if min(returned_layers) < 0 or max(returned_layers) >= num_stages: raise ValueError( - f" returned_layers object should contain integers between [1,{num_stages - 1}], got {returned_layers} " + f" returned_layers object should contain integers between [0,{num_stages - 1}], got {returned_layers} " ) return_layers = {f"{stage_indices[k]}": str(v) for v, k in enumerate(returned_layers)} From 1272b24d931b4f4f23be42ae5833b6147ce5d5a6 Mon Sep 17 00:00:00 2001 From: piyush-kgp Date: Tue, 25 Jan 2022 16:40:53 +0530 Subject: [PATCH 19/21] bug correction and shorten msg --- test/test_backbone_utils.py | 12 ++++++------ torchvision/models/detection/backbone_utils.py | 10 +++++----- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/test/test_backbone_utils.py b/test/test_backbone_utils.py index 8af786c1761..a55929d4b36 100644 --- a/test/test_backbone_utils.py +++ b/test/test_backbone_utils.py @@ -22,21 +22,21 @@ def test_resnet_fpn_backbone(backbone_name): y = resnet_fpn_backbone(backbone_name=backbone_name, pretrained=False)(x) assert list(y.keys()) == ["0", "1", "2", "3", "pool"] - with pytest.raises(ValueError, "trainable_layers expected to be in [0,5]"): + with pytest.raises(ValueError, match=r"Trainable layers should be in the range"): resnet_fpn_backbone(backbone_name=backbone_name, pretrained=False, trainable_layers=6) - with pytest.raises(ValueError, "Each returned layer must be in the range [1,4]"): + with pytest.raises(ValueError, match=r"Each returned layer should be in the range"): resnet_fpn_backbone(backbone_name, False, returned_layers=[0, 1, 2, 3]) - with pytest.raises(ValueError, "Each returned layer must be in the range [1,4]"): + with pytest.raises(ValueError, match=r"Each returned layer should be in the range"): resnet_fpn_backbone(backbone_name, False, 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, "trainable_layers expected to be in between [0,num_stages]"): + with pytest.raises(ValueError, match=r"Trainable layers should be in the range"): mobilenet_backbone(backbone_name=backbone_name, pretrained=False, fpn=False, trainable_layers=-1) - with pytest.raises(ValueError, "returned_layers object should contain integers between [1,num_stages - 1]"): + with pytest.raises(ValueError, match=r"Each returned layer should be in the range"): mobilenet_backbone(backbone_name, False, fpn=True, returned_layers=[-1, 0, 1, 2]) - with pytest.raises(ValueError, "returned_layers object should contain integers between [1,num_stages - 1]"): + with pytest.raises(ValueError, match=r"Each returned layer should be in the range"): mobilenet_backbone(backbone_name, False, fpn=True, returned_layers=[3, 4, 5, 6]) diff --git a/torchvision/models/detection/backbone_utils.py b/torchvision/models/detection/backbone_utils.py index b19411bf3d2..b4902478b76 100644 --- a/torchvision/models/detection/backbone_utils.py +++ b/torchvision/models/detection/backbone_utils.py @@ -112,7 +112,7 @@ def _resnet_fpn_extractor( # select layers that wont be frozen if trainable_layers < 0 or trainable_layers > 5: - raise ValueError(f" trainable_layers expected to be in [0,5], got {trainable_layers}") + raise ValueError(f"Trainable layers should be in the range [0,5], got {trainable_layers}") layers_to_train = ["layer4", "layer3", "layer2", "layer1", "conv1"][:trainable_layers] if trainable_layers == 5: layers_to_train.append("bn1") @@ -126,7 +126,7 @@ def _resnet_fpn_extractor( if returned_layers is None: returned_layers = [1, 2, 3, 4] if min(returned_layers) <= 0 or max(returned_layers) >= 5: - raise ValueError(f"Each returned layer must be in the range [1,4]. Got {returned_layers}") + raise ValueError(f"Each returned layer should be in the range [1,4]. Got {returned_layers}") return_layers = {f"layer{k}": str(v) for v, k in enumerate(returned_layers)} in_channels_stage2 = backbone.inplanes // 8 @@ -156,7 +156,7 @@ def _validate_trainable_layers( trainable_backbone_layers = default_value if trainable_backbone_layers < 0 or trainable_backbone_layers > max_value: raise ValueError( - f"trainable_backbone_layers expected to be in between [0,{max_value}], got {trainable_backbone_layers} " + f"Trainable backbone layers expected to be in between [0,{max_value}], got {trainable_backbone_layers} " ) return trainable_backbone_layers @@ -189,7 +189,7 @@ def _mobilenet_extractor( # find the index of the layer from which we wont freeze if trainable_layers < 0 or trainable_layers > num_stages: - raise ValueError(f"trainable_layers expected to be in between [0,{num_stages}], got {trainable_layers} ") + raise ValueError(f"Trainable layers should be in the range [0,{num_stages}], got {trainable_layers} ") freeze_before = len(backbone) if trainable_layers == 0 else stage_indices[num_stages - trainable_layers] for b in backbone[:freeze_before]: @@ -205,7 +205,7 @@ def _mobilenet_extractor( returned_layers = [num_stages - 2, num_stages - 1] if min(returned_layers) < 0 or max(returned_layers) >= num_stages: raise ValueError( - f" returned_layers object should contain integers between [0,{num_stages - 1}], got {returned_layers} " + f"Each returned layer should be in the range [0,{num_stages - 1}], got {returned_layers} " ) return_layers = {f"{stage_indices[k]}": str(v) for v, k in enumerate(returned_layers)} From c92c6199117c3d3f14bc4dc2bf2ff1a790843c75 Mon Sep 17 00:00:00 2001 From: piyush-kgp Date: Tue, 25 Jan 2022 16:50:56 +0530 Subject: [PATCH 20/21] ufmt stuff --- torchvision/models/detection/backbone_utils.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/torchvision/models/detection/backbone_utils.py b/torchvision/models/detection/backbone_utils.py index b4902478b76..9ab3f088f7c 100644 --- a/torchvision/models/detection/backbone_utils.py +++ b/torchvision/models/detection/backbone_utils.py @@ -204,9 +204,7 @@ def _mobilenet_extractor( if returned_layers is None: returned_layers = [num_stages - 2, num_stages - 1] if min(returned_layers) < 0 or max(returned_layers) >= num_stages: - raise ValueError( - f"Each returned layer should be in the range [0,{num_stages - 1}], got {returned_layers} " - ) + raise ValueError(f"Each returned layer should be in the range [0,{num_stages - 1}], got {returned_layers} ") return_layers = {f"{stage_indices[k]}": str(v) for v, k in enumerate(returned_layers)} in_channels_list = [backbone[stage_indices[i]].out_channels for i in returned_layers] From 922c710059d4ab1b96dafd4c92f76e1d5663b4b5 Mon Sep 17 00:00:00 2001 From: piyush-kgp Date: Tue, 25 Jan 2022 18:10:51 +0530 Subject: [PATCH 21/21] resolved last comment --- test/test_models_detection_utils.py | 2 +- torchvision/models/detection/backbone_utils.py | 9 ++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/test/test_models_detection_utils.py b/test/test_models_detection_utils.py index 4536837f356..44abfd51a7f 100644 --- a/test/test_models_detection_utils.py +++ b/test/test_models_detection_utils.py @@ -53,7 +53,7 @@ def test_validate_resnet_inputs_detection(self): ) assert ret == 3 # can't go beyond 5 - with pytest.raises(ValueError): + with pytest.raises(ValueError, match=r"Trainable backbone layers should be in the range"): ret = backbone_utils._validate_trainable_layers( pretrained=True, trainable_backbone_layers=6, max_value=5, default_value=3 ) diff --git a/torchvision/models/detection/backbone_utils.py b/torchvision/models/detection/backbone_utils.py index 9ab3f088f7c..5ac5f179479 100644 --- a/torchvision/models/detection/backbone_utils.py +++ b/torchvision/models/detection/backbone_utils.py @@ -1,12 +1,11 @@ import warnings -from typing import Callable, Dict, Optional, List, Union +from typing import Callable, Dict, List, Optional, Union from torch import nn, Tensor from torchvision.ops import misc as misc_nn_ops -from torchvision.ops.feature_pyramid_network import FeaturePyramidNetwork, LastLevelMaxPool, ExtraFPNBlock +from torchvision.ops.feature_pyramid_network import ExtraFPNBlock, FeaturePyramidNetwork, LastLevelMaxPool -from .. import mobilenet -from .. import resnet +from .. import mobilenet, resnet from .._utils import IntermediateLayerGetter @@ -156,7 +155,7 @@ def _validate_trainable_layers( trainable_backbone_layers = default_value if trainable_backbone_layers < 0 or trainable_backbone_layers > max_value: raise ValueError( - f"Trainable backbone layers expected to be in between [0,{max_value}], got {trainable_backbone_layers} " + f"Trainable backbone layers should be in the range [0,{max_value}], got {trainable_backbone_layers} " ) return trainable_backbone_layers