Source code for pywick.models.classification.resnext

# Source: https://raw.githubusercontent.com/Cadene/pretrained-models.pytorch/master/pretrainedmodels/models/resnext.py (License: BSD-3-Clause)
# Pretrained: Yes

"""
Implementation of paper: `Aggregated Residual Transformations for Deep Neural Networks <https://arxiv.org/abs/1611.05431>`_.
"""

import torch.nn as nn
import torch.utils.model_zoo as model_zoo
from .resnext_features import resnext50_32x4d_features
from .resnext_features import resnext101_32x4d_features
from .resnext_features import resnext101_64x4d_features

__all__ = ['ResNeXt50_32x4d', 'resnext50_32x4d',
           'ResNeXt101_32x4d', 'resnext101_32x4d',
           'ResNeXt101_64x4d', 'resnext101_64x4d']

pretrained_settings = {
    'resnext50_32x4d': {
        'imagenet': {
            'url': 'https://github.com/barrh/pretrained-models.pytorch/releases/download/v0.7.4.1/resnext50_32x4d-b86d1c04b9.pt',
            'input_space': 'RGB',
            'input_size': [3, 224, 224],
            'input_range': [0, 1],
            'mean': [0.485, 0.456, 0.406],
            'std': [0.229, 0.224, 0.225],
            'num_classes': 1000
        }
    },
    'resnext101_32x4d': {
        'imagenet': {
            'url': 'http://data.lip6.fr/cadene/pretrainedmodels/resnext101_32x4d-29e315fa.pth',
            'input_space': 'RGB',
            'input_size': [3, 224, 224],
            'input_range': [0, 1],
            'mean': [0.485, 0.456, 0.406],
            'std': [0.229, 0.224, 0.225],
            'num_classes': 1000
        }
    },
    'resnext101_64x4d': {
        'imagenet': {
            'url': 'http://data.lip6.fr/cadene/pretrainedmodels/resnext101_64x4d-e77a0586.pth',
            'input_space': 'RGB',
            'input_size': [3, 224, 224],
            'input_range': [0, 1],
            'mean': [0.485, 0.456, 0.406],
            'std': [0.229, 0.224, 0.225],
            'num_classes': 1000
        }
    }
}

[docs]class ResNeXt50_32x4d(nn.Module): def __init__(self, num_classes=1000): super(ResNeXt50_32x4d, self).__init__() self.num_classes = num_classes self.features = resnext50_32x4d_features self.avg_pool = nn.AvgPool2d((7, 7), (1, 1)) self.last_linear = nn.Linear(2048, num_classes) def logits(self, input_): x = self.avg_pool(input_) x = x.view(x.size(0), -1) x = self.last_linear(x) return x def forward(self, input_): x = self.features(input_) x = self.logits(x) return x
[docs]class ResNeXt101_32x4d(nn.Module): def __init__(self, num_classes=1000): super(ResNeXt101_32x4d, self).__init__() self.num_classes = num_classes self.features = resnext101_32x4d_features self.avg_pool = nn.AvgPool2d((7, 7), (1, 1)) self.last_linear = nn.Linear(2048, num_classes) def logits(self, input_): x = self.avg_pool(input_) x = x.view(x.size(0), -1) x = self.last_linear(x) return x def forward(self, input_): x = self.features(input_) x = self.logits(x) return x
[docs]class ResNeXt101_64x4d(nn.Module): def __init__(self, num_classes=1000): super(ResNeXt101_64x4d, self).__init__() self.num_classes = num_classes self.features = resnext101_64x4d_features self.avg_pool = nn.AvgPool2d((7, 7), (1, 1)) self.last_linear = nn.Linear(2048, num_classes) def logits(self, input_): x = self.avg_pool(input_) x = x.view(x.size(0), -1) x = self.last_linear(x) return x def forward(self, input_): x = self.features(input_) x = self.logits(x) return x
[docs]def resnext50_32x4d(num_classes=1000, pretrained='imagenet'): """Pretrained Resnext50_32x4d model""" model = ResNeXt50_32x4d(num_classes=num_classes) if pretrained is not None: settings = pretrained_settings['resnext50_32x4d'][pretrained] if num_classes != settings['num_classes']: raise AssertionError("num_classes should be {}, but is {}".format(settings['num_classes'], num_classes)) model.load_state_dict(model_zoo.load_url(settings['url'])) model.input_space = settings['input_space'] model.input_size = settings['input_size'] model.input_range = settings['input_range'] model.mean = settings['mean'] model.std = settings['std'] return model
[docs]def resnext101_32x4d(pretrained='imagenet'): """Pretrained Resnext101_32x4d model""" model = ResNeXt101_32x4d(num_classes=1000) if pretrained: settings = pretrained_settings['resnext101_32x4d'][pretrained] model.load_state_dict(model_zoo.load_url(settings['url'])) model.input_space = settings['input_space'] model.input_size = settings['input_size'] model.input_range = settings['input_range'] model.mean = settings['mean'] model.std = settings['std'] return model
[docs]def resnext101_64x4d(pretrained='imagenet'): """Pretrained ResNeXt101_64x4d model""" model = ResNeXt101_64x4d(num_classes=1000) if pretrained: settings = pretrained_settings['resnext101_64x4d'][pretrained] model.load_state_dict(model_zoo.load_url(settings['url'])) model.input_space = settings['input_space'] model.input_size = settings['input_size'] model.input_range = settings['input_range'] model.mean = settings['mean'] model.std = settings['std'] return model