From 359d941bff241a7fd8428ccacb946cf97cc9727b Mon Sep 17 00:00:00 2001 From: Vasilis Vryniotis Date: Mon, 25 Jan 2021 21:19:05 +0000 Subject: [PATCH] Add Lite R-ASPP with MobileNetV3 backbone. --- ....test_lraspp_mobilenet_v3_large_expect.pkl | Bin 0 -> 41785 bytes test/test_models.py | 1 + torchvision/models/segmentation/_utils.py | 1 - torchvision/models/segmentation/lraspp.py | 67 ++++++++++++++++++ .../models/segmentation/segmentation.py | 60 +++++++++++++--- 5 files changed, 120 insertions(+), 9 deletions(-) create mode 100644 test/expect/ModelTester.test_lraspp_mobilenet_v3_large_expect.pkl create mode 100644 torchvision/models/segmentation/lraspp.py diff --git a/test/expect/ModelTester.test_lraspp_mobilenet_v3_large_expect.pkl b/test/expect/ModelTester.test_lraspp_mobilenet_v3_large_expect.pkl new file mode 100644 index 0000000000000000000000000000000000000000..b2aa2ca89a948424ef80b032ce84af68cb109cfd GIT binary patch literal 41785 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 Tensor: + low = input["low"] + high = input["high"] + + x = self.cbr(high) + s = self.scale(high) + x = x * s + x = F.interpolate(x, size=low.shape[-2:], mode='bilinear', align_corners=False) + + return self.low_classifier(low) + self.high_classifier(x) diff --git a/torchvision/models/segmentation/segmentation.py b/torchvision/models/segmentation/segmentation.py index 68c298e683a..b3c584d7823 100644 --- a/torchvision/models/segmentation/segmentation.py +++ b/torchvision/models/segmentation/segmentation.py @@ -4,10 +4,11 @@ from .. import resnet from .deeplabv3 import DeepLabHead, DeepLabV3 from .fcn import FCN, FCNHead +from .lraspp import LRASPP __all__ = ['fcn_resnet50', 'fcn_resnet101', 'fcn_mobilenet_v3_large', 'deeplabv3_resnet50', 'deeplabv3_resnet101', - 'deeplabv3_mobilenet_v3_large'] + 'deeplabv3_mobilenet_v3_large', 'lraspp_mobilenet_v3_large'] model_urls = { @@ -17,6 +18,7 @@ 'deeplabv3_resnet50_coco': 'https://download.pytorch.org/models/deeplabv3_resnet50_coco-cd0a2569.pth', 'deeplabv3_resnet101_coco': 'https://download.pytorch.org/models/deeplabv3_resnet101_coco-586e9e4e.pth', 'deeplabv3_mobilenet_v3_large_coco': None, + 'lraspp_mobilenet_v3_large_coco': None, } @@ -69,13 +71,34 @@ def _load_model(arch_type, backbone, pretrained, progress, num_classes, aux_loss aux_loss = True model = _segm_model(arch_type, backbone, num_classes, aux_loss, **kwargs) if pretrained: - arch = arch_type + '_' + backbone + '_coco' - model_url = model_urls[arch] - if model_url is None: - raise NotImplementedError('pretrained {} is not supported as of now'.format(arch)) - else: - state_dict = load_state_dict_from_url(model_url, progress=progress) - model.load_state_dict(state_dict) + _load_weights(model, arch_type, backbone, progress) + return model + + +def _load_weights(model, arch_type, backbone, progress): + arch = arch_type + '_' + backbone + '_coco' + model_url = model_urls[arch] + if model_url is None: + raise NotImplementedError('pretrained {} is not supported as of now'.format(arch)) + else: + state_dict = load_state_dict_from_url(model_url, progress=progress) + model.load_state_dict(state_dict) + + +def _segm_lraspp_mobilenetv3(backbone_name, num_classes, pretrained_backbone=True): + backbone = mobilenetv3.__dict__[backbone_name](pretrained=pretrained_backbone, _dilated=True).features + + # Gather the indeces of blocks which are strided. These are the locations of C1, ..., Cn-1 blocks. + # The first and last blocks are always included because they are the C0 (conv1) and Cn. + stage_indices = [0] + [i for i, b in enumerate(backbone) if getattr(b, "_is_cn", False)] + [len(backbone) - 1] + low_pos = stage_indices[-4] # use C2 here which has output_stride = 8 + high_pos = stage_indices[-1] # use C5 which has output_stride = 16 + low_channels = backbone[low_pos].out_channels + high_channels = backbone[high_pos].out_channels + + backbone = IntermediateLayerGetter(backbone, return_layers={str(low_pos): 'low', str(high_pos): 'high'}) + + model = LRASPP(backbone, low_channels, high_channels, num_classes) return model @@ -161,3 +184,24 @@ def deeplabv3_mobilenet_v3_large(pretrained=False, progress=True, aux_loss (bool): If True, it uses an auxiliary loss """ return _load_model('deeplabv3', 'mobilenet_v3_large', pretrained, progress, num_classes, aux_loss, **kwargs) + + +def lraspp_mobilenet_v3_large(pretrained=False, progress=True, num_classes=21, **kwargs): + """Constructs a Lite R-ASPP Network model with a MobileNetV3-Large backbone. + + Args: + pretrained (bool): If True, returns a model pre-trained on COCO train2017 which + contains the same classes as Pascal VOC + progress (bool): If True, displays a progress bar of the download to stderr + num_classes (int): number of output classes of the model (including the background) + """ + if kwargs.pop("aux_loss", False): + raise NotImplementedError('This model does not use auxiliary loss') + + backbone_name = 'mobilenet_v3_large' + model = _segm_lraspp_mobilenetv3(backbone_name, num_classes, **kwargs) + + if pretrained: + _load_weights(model, 'lraspp', backbone_name, progress) + + return model